我们在页面布局中经常会遇到需要将内容水平/垂直居中的情况,现在我们就来梳理一下实现的方法。
一、水平居中
1.行元素设置其父元素的text-align:center,适用于单行文本水平居中。
2.块元素设置其本身的左右margin为auto即可,适用于设置了一定宽高值的块元素。
3.使用flex
二、垂直居中
- line-height
使行元素垂直居中,可以设置行元素的line-height值,适用于单行文本垂直居中。
若行元素所在的块级父元素有固定高度,则使行元素的line-height值与其父元素的高度相等;若行元素所在的父元素没有设置高度,则行元素设置的line-height值就是其父元素的高度。
若要居中一张图片,可以设置图片的vertical-align:middle; 图片的父元素设置line-height值。
2.table-cell
通过如下设置可以实现元素的垂直居中。
#parent {display: table;}//此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
#child {
display: table-cell;//此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
vertical-align: middle;
}
3.使用绝对定位和负外边距
使用绝对定位实现垂直居中时,元素的margin-top应该等于对应的top值的一半再取负值。
#parent {position: relative;}
#child {
height: 30%;
width: 50%;
position: absolute;
top: 50%;
margin: -15% 0 0 0;
}
4.相等的上下padding值
#parent {
padding: 5% 0;
}
#child {
padding: 10% 0;
}
三、水平垂直居中
1.绝对定位和负外边距
使用绝对定位实现水平垂直居中时,元素的margin-top和margin-left应该等于对应的top和left值的一半再取负值。
#parent {position: relative;}
#child {
position: absolute;
top: 50%;
left: 50%;
height: 30%;
width: 50%;
margin: -15% 0 0 -25%;
}
2.定位和transform
transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。2D 转换方法,通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数,默认以元素的中心点为基点,x,y如果为负就反方向移动。这种方法类似于上一种使用负边距。
#parent {position: relative;}
#child {
position: fixed;//相对定位或绝对定位均可
width:500px;
height:300px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
3.绝对定位和margin:auto
#parent {position: relative;}
#child {
width: 50%;
height: 30%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
4.flex布局
div{
display: flex;
justify-content:center;
align-items:Center;
}
能实现居中效果的方法还有很多,这里列出来的方法只是一小部分,日后会慢慢补充。
参考文章1:https://www.cnblogs.com/hutuz…
参考文章2:https://blog.csdn.net/liufeif…