20

CSS水平居中、垂直居中、水平垂直居中方法总结

文字的水平居中:

text-align:center;

单行文字的垂直居中:

line-height:30px;
height:30px;

让有宽度的div水平居中:

margin: 0 auto;
width:300px;//必须要有宽度,margin:0 auto才能让它居中

让绝对定位的div垂直居中:

position:absolute;
top:0;
bottom:0;
margin:auto 0;  //垂直方向的auto 发挥的作用
width:300px;
height:300px;

同理,让绝对定位的div水平和垂直方向都居中:

position:absolute;
top:0;
left: 0;
right:0;
bottom:0;
margin:auto; 
width:300px;
height:300px;

已知宽高的容器的水平垂直方向居中:

width: 300px;
height:300px;
position: absolute;
top:50%;
left:50%;
margin-top: -150px; //自身高度的一半
margin-left:-150px;

未知宽高的容器的水平垂直方向居中:

width:300px;
height:300px;
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);

*注:transform属性,低版本浏览器不兼容,例如IE8

水平垂直居中记得要想到flexbox:

.container{
  display: flex;
  align-items: center;
  justify-content: center;
}
.container .div{
//whatever
}

此时.div无论是否已知宽高,都能两个方向居中。

垂直居中(表格布局法)

.container{
  display: table;
}
.container .div{
  display: table-cell;
  vertical-align:middle;
}

为什么height=line-height就能垂直居中?

拜读了张鑫旭大神的文章:

  • 行高指的是什么?
    行高指的是文本行的基线间的距离。

  • 什么是基线?
    基线不是文字的下端沿。是英文字母X的下端沿。

文字有顶线,底线,基线和中线,用以确定文字行的位置。

  • 什么是行距?
    行高与字体尺寸之间的差。

  • 还要理解一个概念 -- 行内框
         行内元素会生成一个行内框。它无法显示出来,但是又确实存在。

     在没有其他因素影响的时候,行内框等于内容区域。
    > 设定行高可以增加或者减少行内框的高度,即:将行距的值(行高-字体尺寸)除以2,分别加到内容区域的上下两边。这是理解的关键,也就是内容区域的上面和下面均等增加一个距离。可以在一段文字上进行调试看看,发现增加减小line-height时,文字是整体上下缩进的,而非第一行不动,后面的向上靠拢。

行内框具有垂直居中性。即行内框占据的空间按与文字内容公用水平中垂线。(张鑫旭)

关于vertical-align:middle属性,也很神奇,可以好好再拜读下大神的文章。


evelynlab
565 声望30 粉丝

do something interesting


« 上一篇
DOCTYPE