css不定宽高垂直水平居中的所有解决方式

491 阅读1分钟

最近在对以前学过的基础知识进行梳理,垂直居中布局为css中最经典的问题之一。在这里对所有解决方案做一个总结。

table

假设代码如下

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
  }
  #inner{
    display: inline-block;
  }

div变为表格元素,然后将其居中

absolute+margin

假设代码如下

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    position: relative;
  }
  #inner{
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
  }

该方法操作简单,兼容性也不错

absolute+transform

假设代码如下

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    position: relative;
  }
  #inner{
    position: absolute;
    top: 50% ;
    left: 50%;
    transform: translate(-50%,-50%);
  }

向左向下移动50%父级宽高位置后,通过translate修正偏移的子元素宽高达到垂直水平居中

flex

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    display: flex;
    align-items: center;
    justify-content: center;
  }

最优解决方式,兼容性好操作简单,flex为当下最流行布局方式。

flex+margin

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    display: flex;
  }
  #innder{
    margin: auto;
  }

设置为弹性盒子布局后,子元素通过margin自适应居中

grid

  <div id="outer">
    <div id="inner"></div>
  </div>

实现方式

  #outer{
    display: grid;
    align-items: center;
    justify-items: center;
  }

css最近二维布局方式,解决方法类似flex,兼容性较差不支持IE,但功能强大