css之垂直水平居中(行内元素块元素)

Posted 过鹿人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了css之垂直水平居中(行内元素块元素)相关的知识,希望对你有一定的参考价值。

行内元素

1.line-height + text-aligin:center方式

html

<div class="box">
    <span>
      居中,居中,居中,居中,居中,居中,居中,
    </span>
</div>

 

css

    .box {
      background: red;
      width: 800px;
      height: 300px;
      /* 垂直居中 */
      line-height: 300px;
      /* 水平居中 */
      text-align: center;
    }
    .box > span {
      display: inline-block;
      /* 需要重新设置line-height,否则会继承父元素的值 */
      line-height: 2em;
    }

效果:

如果是多行文本呢?

 

 

 这显然就跟我们预期不符了呀,原因是文本默认是baseline基线对齐的,因此针对多行文本,还需要给子元素span添加vertical-align: middle;

css

    .box > span {
      display: inline-block;
      /* 需要重新设置line-height,否则会继承父元素的值 */
      line-height: 2em;
      /* 设置文本垂直方向对齐方式为居中对齐 */
      vertical-align: middle;
    }

效果

2.padding

这其实是最简单的方式,也是经常容易被忽视的一个方式 

html

  <div class="box">
    <span>居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,居中,</span>
  </div>

 

css

    .box{
      background: red;
      width: 800px;
       /* 上下padding相等 左右padding相等 */
      padding: 100px 50px;
    }

效果

 

 

 无论是单行文本还是多行文本都适用

3.flex 

css

    .box {
      background: red;
      width: 800px;
      height: 300px;
      /* display设为flex */
      display: flex;
      /* 水平居中 */
      justify-content: center;
      /* 垂直居中 */
      align-items: center;
    }
    .box > span {
      margin: 0 50px;
    }

效果

 

 

4.父relative+子absolute

css

    .box {
      background: red;
      width: 800px;
      height: 300px;
      position: relative;
    }
    /* 不定宽高、宽高固定都可用 */
    .box > span {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }

效果

    .box {
      background: red;
      width: 800px;
      height: 300px;
      position: relative;
    }
    /* 宽高固定 */
    .box > div {
      position: absolute;
      width: 200px;
      height: 200px;
      background: gold;
      top: 50%;
      left: 50%;
      margin-left: -100px;
      margin-top: -100px;
    }

效果

 

 

5.table-cell

css

    .box {
      background: red;
      width: 800px;
      height: 300px;
      display: table-cell;
      vertical-align: middle;
      text-align: center;
    }

效果

 

块元素

块元素的垂直水平居中,以上所述的5种方式其实也都适用,但还有常见的两种方式。

 1.父bfc + 子margin:(父高度-子高度)/2 auto

html

  <div class="box6">
    <div>
    </div>
  </div>

css

    .box6 {
      background: red;
      width: 800px;
      height: 300px;
      /* 触发bfc 解决父子margin-top塌陷问题 */
      overflow: hidden;
    }
    .box6 > div {
      width: 200px;
      height: 200px;
      background: gold;
      /* 设置margin居中 */
      margin: 50px auto;
    }

效果

2. absolute + margin: auto

html
  <div class="box7">
    <div>
    </div>
  </div>

 

 css

.box7 {
      background: red;
      width: 800px;
      height: 300px;
      /* 父relative */
      position: relative;
    }
    .box7 > div {
      width: 200px;
      height: 200px;
      background: gold;
      /* 子absolute */
      position: absolute;
      /* 上下左右离父元素都为0 */
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      /* 剩余空间都被上下左右的margin吸收 */
      margin: auto;
    }

效果

 

以上是关于css之垂直水平居中(行内元素块元素)的主要内容,如果未能解决你的问题,请参考以下文章

css 水平垂直居中

CSS水平居中与垂直居中的总结

CSS_水平垂直居中总结

CSS水平和垂直居中技巧大梳理

CSS实现垂直居中的7种方法

CSS设置行内元素和块级元素的水平居中垂直居中