css水平垂直居中的技巧
- 1. 水平垂直居中(场景一)
- 2. 水平垂直居中(场景二)
- 3. 水平垂直居中(场景三)
- 4. 水平垂直居中(场景四)
1. 水平垂直居中(场景一)
条件:一个固定大小的div
,包含一个固定大小的div
。
效果:让内部的div
位于外部div
水平垂直居中的位置,且内部的div
文本水平垂直居中。
注意事项:父元素的第一个子元素margin
塌陷的问题。
<html><style>.outer {height: 500px;width: 500px;background-color: brown;margin: 0 auto;/* 解决margin塌塌陷问题 */overflow: hidden;}.inner {height: 100px;width: 100px;background-color: aqua;/* 设置该元素在父元素中水平居中 */margin: 0 auto;margin-top: 200px;/* 设置该元素中的文本水平居中 */text-align: center;/* 设置该元素中的文本垂直居中 */line-height: 100px;}</style><div class="outer"><div class="inner">hello</div></div>
</html>
2. 水平垂直居中(场景二)
条件:一个固定大小的div
,包含一个行内元素、行内块元素。
效果:让内部的行内元素、行内块元素都位于外部div
水平垂直居中的位置。
注意事项:基线的影响。
<html><style>.outer {height: 500px;width: 500px;background-color: brown;/* 设置内部文本或行内元素水平居中 */text-align: center;/* 设置内部文本或行内元素垂直居中 */line-height: 500px;/* 为了让其子元素正好垂直居中,没有偏差 */font-size: 0;}.inner {background-color: aqua;/* 行内元素的基线相对于该元素所在行的基线的垂直对齐 */vertical-align: middle;font-size: 20px;}img {height: 100px;width: 100px;vertical-align: middle;}</style><div class="outer"><span class="inner">hello</span><imgsrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"/></div>
</html>
3. 水平垂直居中(场景三)
条件:一个伸缩容器。
效果:让伸缩项目在伸缩容器的水平垂直居中位置。
实现方式一:
<html><style>.div1 {width: 500px;height: 500px;background-color: blueviolet;/* 设置为伸缩容器 */display: flex;/* 主轴上居中对齐 */justify-content: center;/* 侧轴上居中对齐 */align-items: center;}.div2 {width: 200px;height: 200px;background-color: blue;}</style><div class="div1"><div class="div2"></div></div>
</html>
实现方式二:
<html><style>.outer {width: 500px;height: 500px;background-color: blueviolet;/* 设置为伸缩容器 */display: flex;}.inner {width: 200px;height: 200px;background-color: blue;/* 设置margin为auto,会让伸缩项目水平垂直居中 */margin: auto;}</style><div class="outer"><div class="inner"></div></div>
</html>
4. 水平垂直居中(场景四)
条件:一个固定大小的div
。
效果:让div
在视口的水平垂直居中位置。
注意事项:视口的大小不固定。
<html><style>body {/* 设置body的高度为视口的高度 */height: 100vh;/* 设置为伸缩容器 */display: flex;}.div1 {width: 500px;height: 500px;background-color: brown;/* 垂直水平居中父元素 */margin: auto;}</style><div class="div1"></div>
</html>
代码中vh
单位,是相对于视口高度的百分比,更多长度单位介绍可以参考另一篇博文:长度单位介绍
ps:运行代码,无论怎么调整视口的大小,红色块始终位于视口的水平垂直居中的位置。