当前位置:Web前端 > > 正文

css垂直左右居中的方式(css常用元素水平垂直居中方案)

时间:2022-04-03 12:16:16类别:Web前端

css垂直左右居中的方式

css常用元素水平垂直居中方案

flex实现水平垂直居中

适用场景:父子宽高都可未知(比较推荐这种方式,简单,而且目前兼容性也不错。)

  • <html>
      <head>
        <style>
          .parent {
              width: 100%;
              height: 100px;
              background: cyan;
              display: flex;
              justify-content: center;
              align-items: center;
            }
            .son {
              width: 20%;
              height: 20%;
              background: pink;
            }
        </style>
      </head>
      <body>
        <li class='parent'>
           <li class='son'></li>
        </li>
      </body>
    </html>
    
    
  • 绝对定位加上负margin

    适用场景:父元素宽高已知未知都行,但是首先得有宽高。其次子元素的宽高必须已知,因为需要设置子元素的负margin. (也可以将负margin设置成translate来做位移实现)

  • <html>
      <head>
          <style>
          .parent {
              position: relative;
              width: 200px;
              height: 200px;
              background: pink;
            }
            .son {
              position: absolute;
              left: 50%;
              top: 50%;
              margin-left: -25px;
              margin-top: -25px;
              width: 50px;
              height: 50px;
              background: yellow;
            }
          </style>
      </head>
      <body>
        <li class='parent'>
           <li class='son'></li>
        </li>
      </body>
    </html>
    
  • 绝对定位 + auto margin

    适用场景:父子元素宽高都未知的情况(该方式不需要明确知道子元素宽高,子元素宽高可用百分比,对于子元素宽高不确定需要居中的情况比较适合。)

  • <html>
      <head>
        <style>
          .parent {
              position: relative;
              width: 200px;
              height: 200px;
              background: cyan;
            }
            .son {
              position: absolute;
              left: 0;
              top: 0;
              bottom: 0;
              right: 0;
              margin: auto;
              width: 10%;
              height: 10%;
              background: yellow;
            }
        </style>
      </head>
      <body>
        <li class='parent'>
           <li class='son'></li>
        </li>
      </body>
    </html>
    
    
  • 网格布局

    适用场景:父子元素宽高未知,兼容性不大好

  • <html>
      <head>
        <style>
          .parent {
              display: grid;
          }
          .son {
            jusitify-self: center;
            align-self: center;
          }
        </style>
      </head>
        <body>
          <li class='parent'>
           <li class='son'></li>
        </li>
        </body>
    </html>
    
    
  • Table-cell + text-align + vertical-align

    适用场景: 父元素大小已知(非百分比高度),子元素大小未知,但子元素须为行内块元素,较好的兼容性

  • <html>
      <head>
        <style>
          .parent {
              display: table-cell;
              vertical-align: middle;
              text-align: center;
              width: 100vw;
              height: 90vh;
              background-color: yellowgreen;
            }
            .son {
              display: inline-block;
              width: 200px;
              height: 200px;
              background-color: Indigo;
            }
        </style>
      </head>
      <body>
        <li class='parent'>
           <li class='son'></li>
        </li>
      </body>
    </html>
    
    
  • 伪元素

    适用场景:父子宽高都可未知,子元素需为行内块元素(这种方式其实就是使用伪元素的高度为100%,子元素和伪元素都设置 vertical-align: middle实现垂直居中的效果)

  • <html>
      <head>
        <style>
        .parent {
          height: 100vh;
          width: 100vw;
          text-align: center;
          background: #c0c0c0;
        }
         
        .parent:before {
          content: "\200B";
          display: inline-block;
          height: 100%;
          vertical-align: middle;
        }
         
        .son {
          display: inline-block;
          vertical-align: middle;
          width: 200px;
          height: 200px;
          padding: 10px 15px;
          background: #f5f5f5;
        }
        </style>
      </head>
      <body>
        <li class="parent">
          <li class="son"></li>
        </li>
      </body>
    </html>
    
    
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐