美文网首页
居中的几种方式

居中的几种方式

作者: TraderNayuta | 来源:发表于2018-10-20 22:48 被阅读0次

水平居中

  • 对于行内元素: 在其父元素上使用text-align: center

  • 对于定宽的块级元素:

    1. margin-left: auto; margin-right: auto
    2.  .content {
         width: 100px;
         position: absolute;
         left: 50%;
         margin-left: -50px;
       }
      
    3.  .content {
         width: 100px;
         position: absolute;
         top: 0;
         right: 0;
         bottom: 0;
         left: 0;
         margin: auto;
       }
      
      
  • 对于宽度不定的块级元素

    1.  .content {
         position: absolute;
         left: 50%;
         transform: translateX(-50%); /* 移动元素本身50% */
       }
      
      
    2. 相对定位实现水平居中
      用float或者display把父元素变成行内块状元素

      .parent {
        display: inline-block; /* 把父元素转化为行内块状元素 */
        /*float: left; 把父元素转化为行内块状元素 */ 
        position: relative;
        left: 50%;
      }
      /*目标元素*/
      .content {
        position: relative;
        right: 50%;
      }
      
      
    3. CSS3的flex实现水平居中方法

      1.  .parent {
           display: flex;
           flex-direction: column;
         }
         .content {
           align-self: center;
         }
        
        
      2.  .parent {
           display: flex;
         }
         .content {
           margin: auto;
         }
        
        
      3.  .parent {
           display: flex;
           justify-content: center;
         }
        
        
    4. CSS3的fit-content配合左右margin为auto实现水平居中方法

       .content {
         width: fit-content;
         margin-left: auto;
         margin-right: auto;
       }
      
      
    5. table标签配合margin左右auto实现水平居中
      使用table标签(或直接将块级元素设值为display:table),再通过给该标签添加左右margin为auto(不推荐使用table,违反语义化)

    6. inline-block实现水平居中方法
      display:inline-block;(或display:inline)和text-align:center;实现水平居中(这种方法有问题,不推荐,因为inline-block元素之间会有空隙,可以用负margin解决)

垂直居中

关于垂直居中,最好的方式就是父元素不给定高度,则只需要使用padding: npx 0就可以实现垂直居中

如果父元素给定了高度,则:

  • 使用table的特性

    <table class="parent">
      <tr>
        <td class="child">
        xxx
      </tr>
    </table>
    
    
  • 可以将标签伪装为table

    <div class="table">
      <div class="td">
        <div class="child">
        xxx
        </div>
      </div>
    </div>
    
    div.table {
      display: table;
      height: 400px;
    }
    div.tr {
      display: table-row;
    }
    div.td {
      display: table-cell;
      vertical-align: middle;
    }
    .child {
      border: 10px solid black;
    }
    
    
  • 绝对定位

    1.  .parent {
         height: 400px;
         position: relative;
       }
       .content {
         height: 100px;
         position: absolute;
         top: 50%;
        margint-top: -50px;
       }
      
      
    2.  .parent {
         height: 400px;
         position: relative;
       }
       .content {
         position: absolute;
         top: 50%;
         transform: translateY(-50%);
       }
      
      
    3. .parent {
         height: 600px;
         position: relative;
       }
      .child {
        position: absolute;
        height: 200px;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
      }
      
      
  • flex

    .parent {
      height: 400px;
      display: flex;
      align-items: center;
    }
    .content {
      width: 300px;
    }
    
    
  • 100%高度的after before加上 inline-block

    .parent {
      height: 400px;
      text-align: center;
    }
    .content {
      display: inline-block;
      width: 200px;
      vertical-align: middle;
    }
    .parent:before {
      display: inline-block;
      height: 100%;
      vertical-align: middle;
    }
    .parent:after {
      display: inline-block;
      height: 100%;
      vertical-align: middle;
    }
    

相关文章

网友评论

      本文标题:居中的几种方式

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