美文网首页前端开发
css居中方式总结(亲测有效)

css居中方式总结(亲测有效)

作者: 陈大事_code | 来源:发表于2019-08-13 14:57 被阅读8次
    • 水平居中(行内元素水平居中、块级元素水平居中)
    • 垂直居中
    • 水平垂直居中

    行内元素水平居中

    text-align: center

    <div class="container">hello world</div>
    
    .container {
        text-align: center    
    }
    

    适用情况:

    • 行内元素,包括:文字、按钮、图片等
    • display: inline、inline-block、inline-table、inline-flex的块级元素(注:此时,width/height不生效哦~)

    块级元素水平居中

    margin: 0 auto;

    <div class="container">
        <div class="son">hello world</div>
    </div>
    
    .son {
        width: 100px;
        margin: 0 auto;
    }
    

    适用情况:

    • 子元素必须设置宽度,即定宽。(否则,宽度默认为100%,就不存在居中一说)

    display: table

    <div class="container">
        <div class="son">hello world</div>
    </div>
    
    .son {
        display: table;
        margin: 0 auto;
    }
    

    原因:
    利用table的长度自适应,即使不定义长度,会根据其内容的长度来定义宽度,而不是默认为100%的宽度。在某种意义上来说,也是一种定宽。

    块级元素垂直居中

    • 单行文字居中

      <div class="container">
        <div class="son">hello world</div>
      </div>
      
      .container {
          height: 100px;
          line-height: 100px;
      }
      
    • 多行文字居中

      <div class="container">
        <div>hello world</div>
          <div>hello world</div>
          <div>hello world</div>
      </div>
      
      .container {
          height: 500px;
          display: table-cell;
          vertical-align: middle;
      }
      

    块级元素水平垂直居中

    flex布局(推荐使用)

    <div class="container">
        <div>hello world</div>
    </div>
    
    .container {
        display: flex;
        justify-content: center;
        align-items: center;
    }
    

    适用范围:

    • 不定宽高

    绝对定位 + transform属性

    <div class="container">
        <div class="son">hello world</div>
    </div>
    
    .container {
        display: relative;
    }
    .son {
        display: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%)
    }
    
    • 在translate中使用-50%,是相对于子元素本身的宽度,不要与下面的margin混淆。
    • 不定宽高

    绝对定位 + margin

    <div class="container">
        <div class="son">hello world</div>
    </div>
    
    .container {
        height: 500px;
        width: 500px;
        display: relative;
    }
    .son {
        display: absolute;
        height: 100px;
        width: 100px;
        top: 50%;
        left: 50%;
        margin: -50px 0 0 -50px;
    }
    

    注意:

    在margin 中不能使用-50%,因为在这里相对的父元素百分比,如果使用了 margin: -50% 0 0 -50%; 则子元素还是会回到左上角。

    适用范围:

    • 子元素定宽

    绝对定位

    <div class="container">
        <div class="son">hello world</div>
    </div>
    
    .container{
        width: 500px;
        height: 500px;
        background: red;
        position: relative;
    }   
    .son{
        height: 100px;
        width: 100px;
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;
        background: yellow;
    }
    

    适用条件

    • 父子元素都必须定宽

    相关文章

      网友评论

        本文标题:css居中方式总结(亲测有效)

        本文链接:https://www.haomeiwen.com/subject/isxbjctx.html