前端常见面试题:实现元素水平垂直居中

分成 块级元素 和 行内元素 进行总结

块级元素

flex布局:

    具体的做法就是把父元素的属性: jusity-content(主轴对齐方式) 和 align-items(交叉轴单行对齐)  的值设置为 center


效果图:

块级元素Flex布局


Css代码:


#warp{

    width:100%;

    height:400px;

    background-color:antiquewhite;

    display:flex;

    /* 主轴的对齐方式 */

    justify-content:center;

    /* 交叉轴上的单行对齐 */

    align-items:center;

}

.center{

    width:160px;

    height:220px;

    background-color:azure;

    text-align:center;

 }

.centerspan{

    line-height:220px;

}



Html代码:


<divid="warp">

    <divclass="center">

        <span>实现水平垂直居中</span>

    </div>

</div>



绝对定位(position: absolute)+ 负margin(这种方式需要知道元素的宽高):


效果图:

绝对定位+margin


Css代码:


.center{

    width:400px;

    height:200px;

    background-color:beige;

    position:absolute;

    top:50%;

    left:50%;

    margin-top:-100px;

    margin-left:-200px;

    text-align:center;

 }

.centerspan{

    line-height:200px;

 }



Html代码:


<divclass="center">

    <span>水平垂直居中</span>

</div>



绝对定位(position: absolute)+ transform: translate()属性:


效果图:

绝对定位+transform


代码:


.center{

    width:380px;

    height:400px;

    background-color:#ccc;

    position:absolute;

    top:50%;

    left:50%;

    transform:translate(-50%,-50%);

    text-align:center;

 }



总结: 

    其实后面两种原理是相同的,通过绝对定位设置top和left为50%之后,再考虑处理元素自身的宽高;区别是负margin的方式需要知道具体的值才能设置,而transform: translate()设置百分比就可以,不需要知道具体的值

其他:

如果只需要水平居中:给对应的块级元素设置 margin: 0 auto;  即可


行内元素

    1、在父元素上设置:text-align: center;  实现水平居中;设置元素的 line-height 的值等于父元素的 height 的值实现垂直居中,这应该是我们平时用的比较多的一种

    2、在父元素上设置:text-align: center;  实现水平居中;再给父元素设置 display: table;  行内元素设置 display: table-cell;  vertical-align: middle; 实现垂直居中


效果图:

table类型


Css代码:


.warp{

    display:table;

    width:200px;

    height:300px;

    background-color:blanchedalmond;

    text-align:center;

 }

.warpspan{

    display:table-cell;

    vertical-align:middle;

 }



Html代码:


<divclass="warp">

    <span>设置元素水平垂直居中</span>

</div>



3、给行内元素一个没有宽高的父元素,利用 flex 布局使其父元素水平垂直居中即可


效果图:

行内元素Flex布局


Css代码:


*{margin:0;padding:0;list-style:none;}

.container{

    margin:100px00100px;

    width:400px;

    height:400px;

    background-color:blanchedalmond;

    display:flex;

    justify-content:center;

    align-items:center;

 }

.center{

    /* padding: 10px; */

    background-color:#ccc;

 }



Html代码:


<divclass="container">

    <divclass="center">

        <span>元素水平垂直居中</span>

    </div>

</div>



以上就是这次总结全部的内容,欢迎留言补充、指正,如果对你有帮助还请点赞、转发。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。