元素垂直水平居中幾種方法

第一種:已知元素寬高,使元素水平居中

代碼如下:

#test{
				width: 200px;
				height: 200px;
				background: pink;
				margin: 0 auto;
				text-align: center;
				line-height: 200px;
				}

margin:0 auto    使元素水平居中,上下的外邊距爲0,左右外邊距爲auto,左右的外邊距會平均分配。當上下的外邊距設置爲auto時,效果和當前效果一致。

第二種:已知元素高寬,使元素垂直水平居中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--已知高寬的元素水平居中的方案-->
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#wrap{
				position: relative;
				width: 400px;
				height: 600px;
				background: pink;	
				margin: 0 auto;
			}
			#test{
				position: absolute;
				left: 50%;
				top: 50%;
				width: 100px;
				height: 100px;
				margin-left: -50px;
				margin-top: -50px;
				background: deeppink;	
			}
			
		</style>
	</head>
	<body>
		<div id="wrap">
			<div id="test">
				test
			</div>
		</div>
	</body>
</html>

讓內部div相對於外部div進行定位,內部div的偏移量爲外部div高寬的50%,然後再使內部div向內移動自身的一半。

元素的初始位置如圖中1方塊的位置, 當這時left和top各爲50%時,內部div位於圖中2方塊的位置,設置margin爲負數時,使內部div到達外部div的中間,圖中3方塊的位置。

第三種:已知元素高寬,使元素垂直水平居中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#wrap{
				position: relative;
				background: pink;	
				width: 400px;
				height: 600px;
				margin: 0 auto;
			}
			#test{
				position: absolute;
				left: 0;
				top: 0;
				right: 0;
				bottom: 0;
				margin: auto;
				width: 100px;
				height: 100px;
				background: deeppink;	
			}
			
		</style>
	</head>
	<body>
		<div id="wrap">
			<div id="test">
				testt<br />	
			</div>
		</div>
	</body>
</html>

絕對定位盒子的特性

水平方向上:left+right+padding+width+margin = 包含塊水平方向上padding區域的尺寸

垂直方向上:top+bottom+height+padding+margin = 包含塊內垂直方向上padding區域的尺寸

當left、right、top、bottom、padding的值都爲0,margin爲auto時,可使得元素垂直水平居中

 

第四種:未知元素的高寬,是元素垂直水平居中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>		
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
				
			}
			#wrap{
				position: relative;
				background: pink;	
				width: 400px;
				height: 600px;
				margin: 0 auto;
				
			}
			
			#test{
				position: absolute;
				left: 50%;
				top: 50%;
				transform: translate3d(-50%,-50%,0);
				background: deeppink;	
			}
			
		</style>
	</head>
	<body>
		<div id="wrap">
			
			<div id="test">
				testttestttestttestt<br />	
				testttestttestttestt<br />	
				testttestttestttestt<br />	
				testttestttestttestt<br />	
				testttestttestttestt<br />	
			</div>
		</div>
	</body>
</html>

這種方法和第二種方法類似,使內部div相對於外部div進行定位,left和top值都爲外部div的50%,然後通過transform: translate3d(-50%,-50%,0)方法,使元素在x和y中方向上向內移動自身大小的一半,z軸方向上不變。不過大部分瀏覽器不支持該方法。

 

第五種:使圖片垂直水平居中,也適用於未知元素的垂直水平居中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }

        html,body{
            height: 100%;
        }

        body{
            text-align: center;
        }
        body::after{
            content: "";
            display: inline-block;
            height: 100%;
            vertical-align: middle;
        }

        img{
            vertical-align: middle;
        }
    </style>
</head>
<body>
    <img src="img/1.jpg">
</body>
</html>

先讓body的高度變爲100%,然後在body後添加僞類after,設置高度爲100%,寬度爲0,然後使添加的僞類水平居中,最後使圖片的基線對準僞元素的基線即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章