最近在总结前端知识,也参加了一些面试,面试中遇到一道题要求垂直水平居,现在对这进行一下总结,也好巩固一下知识。

方案一、flex布局

 .layout.flex{
            display: flex;
            width:100%;
            align-items: center;    /*在交叉轴上如何对齐*/
            justify-content: center;     /*在主轴上如何对齐*/
            height: 300px;
            border: 1px solid #000000;
        }
<section class="layout flex">
    <h1>flex布局水平垂直居中方案</h1>
</section>

  方案二、margin:auto

#content{
            position: absolute;
            margin: auto;
            top:0;
            bottom: 0;
            left: 0;
            right: 0;
            width: 300px;
            height: 100px;
            border: 1px solid blue;
            /*将section中的文字也水平垂直居中*/
            text-align: center;
            line-height: 100px;
        }
    </style>

 <section id="content">
        水平垂直居中--margin:auto
    </section>

  这里的section设置任意的高度和宽度都可以实现水平垂直居中的效果。

方案三、transform

 #content{
            position: absolute;
            top:50%;
            left: 50%;
            height: 100px;
            width: 500px;
            border: 1px solid blue;
            transform: translate(-50%, -50%);
        }
 <section id="content">
        垂直水平居中--translate
    </section>

  使用transform方式可居中任意宽高的元素,缺点是transform只有IE10+以及其他现代浏览器才支持,存在兼容性问题。

方案四、表格布局

  .container{
            width: 60%;
            height: 300px;
            border: 1px #000000;
            display: table;
        }
        .cell{
            display: table-cell;
            text-align: center;
            vertical-align: middle;
            border: 1px solid blue;
        }
<section class="container">
        <div class="cell">水平垂直居中--table</div>
    </section>

  表格布局方式兼容性较好