8种css垂直水平居中方案

    前言:在前端的日常开发中,通常掌握三五种方案就足以解决绝大多数的垂直水平居中需求。所以此文并不是用于工作上的需求处理,而且希望通过抛砖引玉,能和大家一起探寻下css的深度。

以下为本人了解的几种方法:

 一、块级元素

1、定位 + margin: auto

<div class="box">你好,世界。</div>

<style type="text/css">
  .box {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
  }
</style>


    注:兼容至ie7。需要设置box的宽高,否则box将充满整个父元素或body。

2、定位 + 负margin

<div class="box">你好,世界。</div>

<style type="text/css">
  .box {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
  }
</style>


    注:兼容至ie7。需要box定宽高用于计算margin。

3、定位 + translate

<div class="box">你好,世界。</div>

<style type="text/css">
  .box {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
</style>


    注:兼容性至ie10。无需关注box的宽高,可自适应。

4、定位 + calc

<div class="box">你好,世界。</div>

<style type="text/css">
  .box {
    width: 100px;
    height: 100px;
    position: absolute;
    top: calc(50% - 50px);
    left: calc(50% - 50px);
  }
</style>


    注:兼容性至ie9。需要box定宽高用于计算calc。

5、flex

<div class="parent">
  <div class="box">你好,世界。</div>
</div>

<style type="text/css">
  .parent {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
  }
</style>


    注:兼容性至ie11。需要增加父级元素。无需关注box的宽高,可自适应。(当box宽度超过parent时,需要处理box内容塌陷问题。)

二、行内元素

1、text-align + vertical-align

<div class="parent">
  <div class="box">你好,世界。</div>
  <div class="after"></div>
</div>

<style type="text/css">
  .parent {
    height: 100vh;
    text-align: center;
  }
  .after{
    display: inline-block;
    *display: inline;
    *zoom: 1;
    height: 100%;
    vertical-align: middle;
  }
  .box{
    display: inline-block;
    *display: inline;
    *zoom: 1;
    vertical-align: middle;
  }
</style>


    注:兼容性至ie4。依赖兄弟元素或伪元素(伪元素兼容至ie9)。与table均为块级元素垂直水平居中的古老魔法。

2、text-align + line-height

<div class="parent">
  <span class="box">你好,世界。</span>
</div>

<style type="text/css">
  .parent {
    height: 100vh;
    line-height: 100vh;
    text-align: center;
  }
</style>


    注:兼容性至ie4。需要父元素定高,仅对行内或行内块元素有效。

三、表单元素

1、Table + text-align

<div class="parent">
  <span class="box">你好,世界。</span>
</div>

<style type="text/css">
  .parent {
    display: table;
    width: 100vh;
    height: 100vh;
  }
  .box{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
  }
</style>


    注:兼容性至ie8。

2、Table + text-align

<Table>
  <tr>
    <td>你好,世界</td>
  </tr>
</Table>

<style type="text/css">
  Table {
    width: 100vh;
    height: 100vh;
    text-align: center;
  }
</style>


    注:兼容性至ie3。古老魔法!!!

猜你喜欢

转载自blog.csdn.net/qq_38629292/article/details/125801031
今日推荐