总结一下了解的css实现水平垂直居中的方法。
可以在codepen上进行测试。
- 2022.3.8更新,增加一些文本水平垂直居中的写法。codepen
原始代码
1
2
3
4
5
6
7
8
9<html>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>1
2
3
4
5
6
7
8
9
10
11.father {
border: solid 1px;
width: 300px;
height: 300px;
}
.son {
background: #e4393c;
width: 100px;
height: 100px;
}具体实现
flex 方法1——适用于未知宽高
给父元素加弹性盒属性,加justify-content
, align-items
属性即可
1 | .father { |
flex 方法2——适用于已知宽高
给父元素加弹性盒属性,子元素加 margin:auto
1 | .father { |
定位,父相子绝,配合transform属性——适用于未知宽高
父元素相对定位,子元素绝对定位,并且使用transform
平移实现
1 | .father { |
定位,父相子绝,配合margin属性
父元素相对定位,子元素绝对定位,同时上下左右为0,同时加上margin:auto
1 | .father { |
父元素display: table-cell
,子元素display: inline-block;
将父元素转为一个表格单元,子元素转为行内块
1 | .father { |
纯定位方式实现
父相子绝,子元素 left , right 各50%,再使用 margin-left , margin-top , 移动子元素自身宽高的一半
1 | .father { |
grid 方法1
1 | .father { |
grid 方法2
父元素加display: grid;
,子元素加align-self: center; justify-self: center;
即可
1 | .father { |
补充
1 | <div class="father"> |
1 | .father{ |
参考
写在最后
关于浏览器兼容性,
- 完全不考虑并且布局较复杂,推荐使用grid(grid 就是为了解决复杂布局的)
- 完全不考虑,flex和grid都是不错的选择;
- 需要考虑移动端,建议使用flex而不是grid;
- 需要兼容老版本的浏览器,建议使用纯定位方式实现