水平居中
文字水平居中(推荐)
css
.box{
text-align: center;
}
缺点:
- 只对行内元素有效,会影响后代元素内容
- 如果子元素宽度大于父元素宽度则无效
margin 0 auto 块级居中
css
.box{
/* 必须设置宽度 */
width: 50px;
margin: 0 auto;
}
缺点:
- 必须设置宽度,值不能设置auto
- 元素宽度要小于父元素宽度
绝对定位
css
.parent{
height: 200px;
width: 200px;
position: relative;
background-color: #c1c;
}
.child{
position: absolute;
left: 50%; /*父元素宽度一半,这里等同于left:100px*/
transform: translateX(-50%); /*自身宽度一半,等同于margin-left: -50px;*/
width: 100px;
height: 100px;
background-color: #eee;
}
缺点:
- 脱离文档流
- 需要知道父级宽度
flex布局(推荐)
css
.box{
display: flex;
justify-content: center;
}
缺点:
- 老浏览器兼容问题
垂直居中
文本居中
css
.box{
height: 30px;
/*要和height一样,利用line-height拉高占据的空间*/
line-height: 30px;
}
缺点:
- 只能是行内元素
表格元素居中 d:table-cell
css
.tableBox{
display: table-cell;
vertical-align: middle;
}
绝对定位
css
.parent{
position: relative;
width:100px;
height:100px;
}
.child{
position: absolute;
margin: auto 0;
top: 0;
bottom: 0;
height: 50px;
}
缺点:
- 脱离文档流
flex
css
.box{
display: flex;
align-items: center;
}
css
.parent{
display: flex;
}
.child{
align-self: center;
}
缺点:
- 老浏览器兼容问题
垂直水平居中
行内/行内块级/图片
利用text-align: center;
实现水平居中,line-height
和vertical-align
实现垂直居中
css
.parent{
height: 150px;
line-height: 150px; /*行高的值与height相等*/
text-align: center;
font-size: 0; /*消除幽灵空白节点的bug*/
}
.child{
/*display: inline-block;*/ /*如果是块级元素需改为行内或行内块级才生效*/
vertical-align: middle;
}
d:table-cell
使用table-cell
&vertical-align
实现垂直对齐,水平居中通过margin
(块级元素)/text-align
(行内元素)
css
.parent{
height: 100px;
width: 100px;
display: table-cell;
vertical-align: middle;
/*text-align: center;*/
/* 如果是行内元素就添加这个 */
}
.child{
/* 如果是块级元素就添加这个 */
margin: 0 auto;
width: 50px;
height: 50px;
}
缺点:
- 设置table-cell元素会使宽度和高度的值设置百分比失效
button
利用button默认样式,将目标元素改为行内/行内块级元素
css
button{ /*改掉button默认样式就好了,不需要居中处理*/
height: 200px;
width: 200px;
outline: none;
border: none;
}
/*如果是块级元素,display: inline-block; */
缺点:
- 只能用于行内内容
- IE浏览器点击会有凹下的效果
绝对定位
css
.parent{
position: relative;
width:100px;
height:100px;
}
.child{
position: absolute;
top: 50%;
left: 50%;
/*left和top值为父级元素的一半*/
transform: translate(-50%,-50%);
}
缺点:
- 脱离文档流
flex
css
.box{
display: flex;
justify-content: center;
align-items: center;
}
缺点:
- 老浏览器兼容问题