水平垂直居中的实现方式有多种,请见:http://blog.csdn.net/zhouziyu2011/article/details/53514416


在支持 CSS3 属性的现代浏览器当中,可以利用CSS3的translate属性实现水平垂直居中。

尤其是当子元素的width和height未知时,无法通过设置margin-left:-width/2和margin-top:-height/2来实现,这时候可以设置子元素的transform: translate(-50%,-50%)。

<!DOCTYPE html>
<html>
<head>  
    <style type="text/css">  
        #out{  
            position: fixed;  
            width: 400px;  
            height: 200px;  
            background: red;  
        }  
        #in{  
            width: 50%;  
            height: 50%; 
            background: yellow;  
            position: absolute;  
			transform: translate(-50%,-50%);
            top: 50%;  
            left: 50%;   
        }  
    </style>  
</head>  
<body>  
    <div id="out">  
        <div id="in"></div>  
    </div>  
</body>
</html>

其实,在translate 函数当中使用百分比是以该元素的content、padding、border为标准计算的。

下面给子元素加上padding 和 border:

<!DOCTYPE html>
<html>
<head>  
    <style type="text/css">  
        #out{  
            position: fixed;  
            width: 400px;  
            height: 200px;  
            background: red;  
        }  
        #in{  
            width: 50%;  
            height: 50%; 
			border: 5px solid pink;
			padding: 5px; 
            background: yellow;  
            position: absolute;  
			transform: translate(-50%,-50%);
            top: 50%;  
            left: 50%;   
        }  
    </style>  
</head>  
<body>  
    <div id="out">  
        <div id="in"></div>  
    </div>  
</body>
</html>

使用 CSS3 translate 属性和绝对定位、相对定位属性加上 top、left 数值都可以使元素产生位移,但存在细微差别,表现在offsetLeft 和 offsetTop 属性。

使用绝对定位、相对定位属性加上 topleft ,会影响offsetTop offsetLeft 的值;

使用 translate offsetTop offsetLeft 与没有产生位移的元素没有区别,即无论translate 的值为多少,这offsetTop offsetLeft 的值都是固定不变的。

eg1:相对定位或绝对定位+left和top属性

<!DOCTYPE html>
<html>
<head>  
    <style type="text/css">  
        #container {
			position: relative; /*或position: absolute;*/
			width: 200px;
			height: 200px;
			background-color: red;
			top: 100px;
			left: 200px;
		}
    </style>  
</head>  
<body>  
    <div id="container"></div>
	<script>
		var container = document.getElementById("container");
		console.log(container.offsetLeft);
		console.log(container.offsetTop);
	</script>
</body>
</html>

eg2:translate属性

<!DOCTYPE html>
<html>
<head>  
    <style type="text/css">  
        #container {
			position: relative; /*或position: absolute;*/
			width: 200px;
			height: 200px;
			background-color: red;
			transform: translate(300px,100px);
		}
    </style>  
</head>  
<body>  
    <div id="container"></div>
	<script>
		var container = document.getElementById("container");
		console.log(container.offsetLeft);
		console.log(container.offsetTop);
	</script>
</body>
</html>

本文转载:CSDN博客