• CSS实现垂直居中的几种方法


    table元素自带垂直居中

    <table class="parent">
      <tr>
        <td class="child"> table自带垂直功能 </td>
        <td class="child"> table自带垂直功能 </td>
      </tr>
    </table>
    
    .parent {
      border: 1px solid red;
      padding: 10px;
    }
    .child {
      border: 1px solid green;
      padding: 10px;
    }
    

    示例代码 - table


    行内元素垂直居中

    单行内联元素

    通过设置内联元素的高度(height)等于行高(line-height),从而使元素垂直居中。

    <div>
      <span>单行内联元素垂直居中</span>
    </div>
    
    div {
      height: 100px;
      border: 1px solid red;
    }
    span {
      border: 1px solid green;
      line-height: 100px;
    }
    

    示例代码 - 单行内联元素


    多行内联元素

    利用表布局

    <div class="parent">
      <span class="child">
        内联元素是在表格里面,这时可以利用inline元素的CSS属性vertical-align,默认是baseline属性,将其设置为middle
      </span>
    </div>
    
    .parent {
      border: 1px solid red;
      height: 200px;
      display: table;
    }
    .child {
      display: table-cell;
      vertical-align: middle;
    }
    

    示例代码 - 表布局


    利用flex布局

    利用 flex 布局实现垂直居中,将主轴方向定义为纵向,然后使用 justify-content 将其居中。

    由于 flex 布局是 CSS3 中定义,较老的浏览器存在兼容性问题。

    块级元素也可使用 flex 布局实现居中。

    <div class="parent">
      <span>
        利用flex布局实现垂直居中,其中flex-direction: column定义主轴方向为纵向。因为flex布局是CSS3中定义,较老的浏览器存在兼容性问题。
      </span>
    </div>
    
    .parent {
      border: 1px solid red;
      height: 200px;
      display: flex;
      flex-direction: column;
      justify-content: center;
    }
    

    示例代码 - flex布局


    添加伪元素

    先给子元素设置为行内块级元素,并设置 vertical-align,然后再给父元素添加 100% 高度的伪元素 before 或 after,让文本和伪元素垂直对齐,从而达到垂直居中的目的。

    <div class="parent">
      <span class="child">
        给父元素添加100%高度的伪元素before、after,让文本和伪元素垂直对齐,从而达到垂直居中的目的
      </span>
    </div>
    
    .parent {
      border: 1px solid red;
      height: 200px;
      text-align: center;
    }
    .child {
      border: 1px solid blue;
      display: inline-block;
       300px;
      height: 100px;
      vertical-align: middle;
    }
    .parent::before {
      content: '';
      height: 100%;
      display: inline-block;
      vertical-align: middle;
    }
    

    示例代码 - 添加伪元素


    块级元素垂直居中

    定高

    绝对定位 + margin-top

    如果我们知道居中元素的高度和宽度,可以通过绝对定位元素距离顶部 50%,并设置 margin-top 向上偏移元素高度的一半,就可以实现垂直居中了。

    <div class="parent">
      <div class="child">
        固定高度的块级元素; 如果我们知道居中元素的高度和宽度, 可以通过绝对定位元素距离顶部50%,并设置margin-top向上偏移元素高度的一半,就可以实现垂直居中了。
      </div>
    </div>
    
    .parent {
      border: 1px solid red;
      position: relative;
      height: 300px;
    }
    .child {
      border: 1px solid red;
      position: absolute;
      height:200px;
      top: 50%;
      margin-top: -100px;
    }
    

    示例代码 - margin-top


    绝对定位 + margin:auto;

    在子元素上设置 position: absolute;margin: auto;,然后分别给 top、bottom、left、right 都设置为 0 即可。

    <div class="parent">
      <div class="child">
        子元素设置absolute,margin:auto,top、bottom、left、right为0
      </div>
    </div>
    
    .parent {
      border: 1px solid red;
      height: 200px;
      position: relative;
    }
    .child {
      border: 1px solid green;
      position: absolute;
       200px;
      height: 100px;
      margin: auto;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
    }
    

    示例代码 - margin:auto;


    不定高

    transform属性

    当垂直居中的元素的高度和宽度未知时,我们可以借助 CSS3 中的 transform 属性向 Y 轴反向偏移 50% 的方法实现垂直居中,但是部分浏览器存在兼容性的问题。

    <div class="parent">
      <div class="child">
        未知高度的块级元素;当垂直居中的元素的高度和宽度未知时,我们可以借助CSS3中的transform属性向Y轴反向偏移50%的方法实现垂直居中,但是部分浏览器存在兼容性的问题。
      </div>
    </div>
    
    .parent {
      border: 1px solid red;
      position: relative;
      height: 200px;
    }
    .child {
      border: 1px solid blue;
      position: absolute;
      transform: translateY(-50%);
      top: 50%;
    }
    

    示例代码 - transform


    使用假表格

    将父元素 display 设置为 table-cell,然后利用 vertical-align 实现垂直居中。

    <div class="parent">
      <div class="child">
        利用假表格来实现,在父元素设置vertical-align: middle; display: table-cell;即可</div>
    </div>
    
    .parent {
      border: 1px solid red;
       250px;
      height: 200px;
      vertical-align: middle;
      display: table-cell;
    }
    .child {
      border: 1px solid green;
    }
    

    示例代码 - 假表格

  • 相关阅读:
    [剑指 Offer 11. 旋转数组的最小数字]
    进程描述符(PCB)
    [剑指 Offer 57. 和为s的两个数字]
    Linux netstat命令
    kafka2.3.X配置文件
    docker
    shell操作mysql数据库
    Linux文件查找之find命令
    sed 切割日志文件
    Linux文本处理之awk
  • 原文地址:https://www.cnblogs.com/LqZww/p/13638061.html
Copyright © 2020-2023  润新知