方法一:display:table
父元素使用 display:table
和子元素使用 display:table-cell
属性来模拟表格,子元素设置 vertical-align:middle
即可垂直居中
1 2 3 4 5
| <div class="span_box bg_box"> <span class="words_span"> 方法一:父元素使用display:table和子元素使用display:table-cell属性来模拟表格,子元素设置vertical-align:middle即可垂直居中 </span> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .bg_box { width: 300px; height: 300px; margin-top: 20px; background-color: #bbbbbb; }
.span_box { display: table; } .words_span { display: table-cell; vertical-align: middle; }
|
方法二:display:inline-block
对子元素设置 display:inline-block
属性,使其转化成行内块元素,模拟成单行文本。父元素设置对应的 height
和 line-height
。对子元素设置 vertical-align:middle
属性,使其基线对齐。添加 line-height
属性,覆盖继承自父元素的行高。缺点:文本的高度不能超过外部盒子的高度。
1 2 3 4 5
| <div class="p_box bg_box"> <p class="words_p"> 方法二:对子元素设置display:inline-block属性,使其转化成行内块元素,模拟成单行文本。父元素设置对应的height和line-height。对子元素设置vertical-align:middle属性,使其基线对齐。添加line-height属性,覆盖继承自父元素的行高。缺点:文本的高度不能超过外部盒子的高度。 </p> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| .bg_box { width: 300px; height: 300px; margin-top: 20px; background-color: #bbbbbb; }
.p_box { line-height: 300px; } .words_p { display: inline-block; line-height: 20px; vertical-align: middle; }
|
方法三:绝对定位
margin-top: -[height/2];
脱离文档流的居中方式,把内部 div 设置宽高之后,再设置 top 为 50%
,使用负边距调整,将 margin-top
设置为负的高度的一半
就可以垂直居中了。缺点:需要计算出多行文字固定的高度。高度一旦改变,负边距也要调整。
1 2 3 4 5
| <div class="wrapper bg_box"> <div class="content_box"> 方法三:脱离文档流的居中方式,把内部div设置宽高之后,再设置top为50%,使用负边距调整,将margin-top设置为负的高度的一半就可以垂直居中了。缺点:需要计算出多行文字固定的高度。高度一旦改变,负边距也要调整。 </div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| .bg_box { width: 300px; height: 300px; margin-top: 20px; background-color: #bbbbbb; }
.wrapper { position: relative; overflow: hidden; } .content_box { position: absolute; top: 50%; width: 300px; height: 127px; margin-top: -63.5px; }
|
transfrom: translateY(-50%)
脱离文档流的居中方式,把内部 div 设置宽高之后,再设置 top 为 50%
,使用负边距调整,将 margin-top
设置为负的高度的一半
就可以垂直居中了。
1 2 3 4 5 6
| <div class="wrapper bg_box"> <div class="content_box"> 方法三:脱离文档流的居中方式,把内部 div 设置宽高之后,再设置 top 为 50%,使用负边距调整,将 margin-top 设置为负的高度的一半就可以垂直居中了。 </div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| .bg_box { width: 300px; height: 300px; margin-top: 20px; background-color: #bbbbbb; }
.wrapper { position: relative; overflow: hidden; } .content_box { position: absolute; top: 50%; width: 300px; transform: translateY(-50%); }
|