一水平居中:
(1). 行内元素的水平居中?
如果被设置元素为文本图片等行内元素时, 在父元素中设置 text-align:center 实现行内元素水平居中, 将子元素的 display 设置为 inline-block, 使子元素变成行内元素
- <div class="parent" style="background-color: gray;">
- <div class="child" style="background-color: lightblue;">DEMO</div>
- </div>
- <style>
- .parent{text-align: center;}
- .child{display: inline-block;}
- </style>
(2) 块状元素的水平居中 (定宽)
当被设置元素为定宽块级元素时用 text-align:center 就不起作用了可以通过设置左右 margin 值为 auto 来实现居中的
- <div class="parent" style="background-color: gray;">
- <div class="child" style="background-color: lightblue;">DEMO</div>
- </div>
- .child{
- width: 200px;
- margin: 0 auto;
- }
(3) 块状元素的水平居中 (不定定宽)
在实际工作中我们会遇到需要为不定宽度的块级元素设置居中, 比如网页上的分页导航, 因为分页的数量是不确定的, 所以我们不能通过设置宽度来限制它的弹性
可以直接给不定宽的块级元素设置 text-align:center 来实现, 也可以给父元素加 text-align:center 来实现居中效果
当不定宽块级元素的宽度不要占一行时, 可以设置 display 为 inline 类型或 inline-block(设置为 行内元素 显示或行内块元素)
- <div class="container">
- <ul>
- <li><a href="#">1</a></li>
- <li><a href="#">2</a></li>
- <li><a href="#">3</a></li>
- </ul>
- </div>
- .container{text-align:center;background: beige}
- .container ul{list-style:none;margin:0;padding:0;display:inline-block;}
- .container li{margin-right:8px;display:inline-block;}
二垂直居中:
和水平居中一样, 这里要讲垂直居中, 首先设定两个条件即父元素是盒子容器且高度已经设定
场景 1: 子元素是行内元素, 高度是由其内容撑开的
这种情况下, 需要通过设定父元素的 line-height 为其高度来使得子元素垂直居中
- <div class="wrap line-height">
- <span class="span">111111</span>
- </div>
- .wrap{
- width:200px ;
- height: 300px;
- line-height: 300px;
- border: 2px solid #ccc;
- }
- .span{
- background: red;
- }
场景 2: 子元素是块级元素但是子元素高度没有设定, 在这种情况下实际上是不知道子元素的高度的, 无法通过计算得到 padding 或 margin 来调整, 但是还是存在一些解法
通过给父元素设定 display:table-cell;vertical-align:middle 来解决
- <div class="wrap">
- <div class="non-height">11111</div>
- </div>
- .wrap{
- width:200px ;
- height: 300px;
- border: 2px solid #ccc;
- display: table-cell;
- vertical-align: middle;
- }
- .non-height{
- background: green;
- }
结果
场景 3: 子元素是块级元素且高度已经设定
计算子元素的 margin-top 或 margin-bottom, 计算方法为父 (元素高度 - 子元素高度)/2
- <div class="wrap">
- <div class="div1">111111</div>
- </div>
- .wrap{
- width:200px ;
- height: 300px;
- border: 2px solid #ccc;
- }
- .div1{
- width:100px ;
- height: 100px;
- margin-top: 100px;
- background: darkblue;
- }
结果
三水平垂直居中:
3.1 水平对齐 + 行高
text-align + line-height 实现单行文本水平垂直居中
- <style>
- .test{
- text-align: center;
- line-height: 100px;
- }
- </style>
- <div class="test" style="background-color: lightblue;width: 200px;"> 测试文字 </div>
3.2 水平 + 垂直对齐
1. text-align + vertical-align 在父元素设置 text-align 和 vertical-align, 并将父元素设置为 table-cell 元素, 子元素设置为 inline-block 元素
- <style>
- .parent{
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- }
- .child{
- display: inline-block;
- }
- </style>
- <div class="parent" style="background-color: gray; width:200px; height:100px;">
- <div class="child" style="background-color: lightblue;"> 测试文字 </div>
- </div>
2. 若子元素是图像, 可不使用 table-cell, 而是其父元素用行高替代高度, 且字体大小设为 0 子元素本身设置 vertical-align:middle
- <div class="parent" style="background-color: gray; width:200px;">
- <img class="child" src="http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/img1.gif" width="50%" alt="test">
- </div>
- <style>
- .parent{
- text-align: center;
- line-height: 100px;
- font-size: 0;
- }
- .child{
- vertical-align: middle;
- }
- </style>
3.3 相对 + 绝对定位
使用 absolute, 利用绝对定位元素的盒模型特性, 在偏移属性为确定值的基础上, 设置 margin:auto
- <style>
- .parent{
- position: relative;
- }
- .child{
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- height: 50px;
- width: 80px;
- margin: auto;
- }
- </style>
- <div class="parent" style="background-color: lightgray; width:200px; height:100px;">
- <div class="child" style="background-color: lightblue;"> 测试文字 </div>
- </div>
来源: https://www.cnblogs.com/chaixiaozhi/p/8490725.html