前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!
1. 已知元素宽度
方法一:已知宽高,可以用position定位 margin负值的方法 ;
绝对定位 4个方向全部0px margin:auto 可以做到基于父容器水平垂居中;如果只需要垂直居中,那可以把left和right删掉,并且水平居中的方法也很多;
绝对定位 左50% margin左:宽度一半的负值,可以做到水平居中,右也可以;
绝对定位 上50% margin上:高度一半的负值,可以做到垂直居中,底部也可以;
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.wrapper{
width: 500px;
height: 500px;
background: #f90;
left: 0;
right: 0;
top: 0;
bottom: 0;
position: absolute;
margin: auto;
/*绝对定位 4个方向全部0px margin:auto 可以做到基于父容器水平垂居中*/
/*如果只需要垂直居中,那可以把left和right删掉,并且水平居中的方法也很多*/
}
.content{
width: 100px;
height: 200px;
background: #0f8;
position: absolute;
/*position: absolute基于第一个不是position:static的父级元素定位*/
left: 50%;
top: 50%;
margin-left: -50px;
margin-top: -100px;
/*绝对定位 左50% margin左:宽度一半的负值 可以做到水平居中 右也可以*/
/*绝对定位 上50% margin上:高度一半的负值 可以做到垂直居中 底部也可以*/
}
</style>
</head>
<body>
<div class="wrapper">
<span class="content"></span>
</div>
</body>
</html>
方法二:已知宽高,并且必须是 block 或 inline-block 元素,可以用margin负值 transform:translate(-50%,-50%) ;
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.wrapper{
width: 500px;
height: 500px;
background: #f90;
left: 0;
right: 0;
top: 0;
bottom: 0;
position: absolute;
margin: auto;
/*绝对定位 4个方向全部0px margin:auto 可以做到基于父容器水平垂居中*/
/*如果只需要垂直居中,那可以把left和right删掉,并且水平居中的方法也很多*/
}
.content{
width: 100px;
height: 200px;
background: #0f8;
display: inline-block;
/*还有种不用定位也可以水平垂直据中的方法,元素必须是inline-block或者block元素,并且已知宽高,设置margin-left:50%; margin-top:50%; transform:translate(-50%,-50%)*/
margin-left: 50%;
margin-top: 50%;
transform: translate(-50%,-50%);
/*transform变化、使...变形、转换;transform属性应用于元素的2D或3D转换。这个属性允许你将元素移动,旋转,缩放,倾斜*/
/*translate平移,是transform的属性值的一部分*/
/*transition过渡、转变;可多个样式的变换效果*/
}
</style>
</head>
<body>
<div class="wrapper">
<span class="content"></span>
</div>
</body>
</html>
2. 未知元素宽度
未知宽高,可以用:position绝对定位 top上50% bottom下50% transform:translate(-50%,-50%) 可以做到垂直居中
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
.wrapper{
width: 500px;
height: 500px;
background: #f90;
left: 0;
right: 0;
top: 0;
bottom: 0;
position: absolute;
margin: auto;
/*绝对定位 4个方向全部0px margin:auto 可以做到基于父容器水平垂居中*/
/*如果只需要垂直居中,那可以把left和right删掉,并且水平居中的方法也很多*/
}
.content{
width: 100px;
height: 200px;
background: #0f8;
position: absolute;
/*position: absolute基于第一个不是position:static的父级元素定位*/
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
/*transform变化、使...变形、转换;transform属性应用于元素的2D或3D转换。这个属性允许你将元素移动,旋转,缩放,倾斜*/
/*translate平移,是transform的属性值的一部分*/
/*transition过渡、转变;可多个样式的变换效果*/
}
</style>
</head>
<body>
<div class="wrapper">
<span class="content"></span>
</div>
</body>
</html>
3. div中img图片垂直居中
可以用vertical-align:middle,但是这个属性只有在inline-block类型(inline也有影响)的元素身上起作用,vertical-align的理解我得继续学习下,也欢迎大家指正
方法一:图片vertical-align:middle 父元素的height与line-height一致
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0;margin: 0;
}
.wrapper{
height: 300px;
line-height: 300px;
width: 300px;
margin:100px auto;
background: #f90;
text-align: center;
}
.wrapper img{
width: 150px;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="wrapper">
<img src="images/1.jpg" alt="美女" title="美女"/>
</div>
</body>
</html>
方法二:父元素设置display:table-cell和vertical-align
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0;margin: 0;
}
.wrapper{
width: 300px;
height: 300px;
background: #f90;
text-align: center;
vertical-align: middle;
display: table-cell;
}
.wrapper img{
width: 150px;
}
</style>
</head>
<body>
<div class="wrapper">
<img src="images/1.jpg" alt="美女" title="美女"/>
</div>
</body>
</html>