博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS设置居中的方案总结-超全
阅读量:7130 次
发布时间:2019-06-28

本文共 3929 字,大约阅读时间需要 13 分钟。

前几天面试一家公司,被问到垂直居中的方法,我只答出了margin、table-cell、flex三种。回来之后觉得特别惭愧,于是整理了一下居中的方案做个记录,希望对大家也有帮助。

如果哪里写的不对,欢迎指正,非常感谢。

块级元素居中 html代码部分

child
复制代码

行内元素居中 html代码部分

child
复制代码

水平居中

01 行内元素 text-align: center;

.parent {   text-align: center;}复制代码

02 块级元素 margin: auto;

(低版本浏览器还需要设置 text-align: center;)

.parent {    text-align: center; }.child {    width: 100px;    margin: auto;     border: 1px solid blue;}复制代码

由于本文主要想记录的是垂直居中的方案,这里水平垂直的其他方案就不做过多记录了。

垂直居中

01 行内元素(单行文字垂直居中):设置 line-height = height

.parent {   height: 200px;   line-height: 200px;   border: 1px solid red;}复制代码

02 块级元素:绝对定位(需要提前知道尺寸)

优点:兼容性不错

缺点:需要提前知道尺寸,margin-top: -(高度的一半); margin-left: -(宽度的一半);

.parent {    position: relative;    height: 200px;}.child {    width: 80px;    height: 40px;    background: blue;    position: absolute;    left: 50%;    top: 50%;    margin-top: -20px;    margin-left: -40px;}复制代码

03 块级元素:绝对定位 + transform

优点:不需要提前知道尺寸

缺点:兼容性不好

.parent {    position: relative;    height: 200px;}.child {    width: 80px;    height: 40px;    position: absolute;    left: 50%;    top: 50%;    transform: translate(-50%, -50%);    background: blue;}复制代码

04 块级元素:绝对定位 + margin: auto;

优点:不需要提前知道尺寸,兼容性好

缺点:这个方法是我最喜欢用的一个,要说缺点的话,我目前还不知道。
此方法出自张鑫旭老师的博客

.parent {    position: relative;    height: 200px;}.child {    width: 80px;    height: 40px;    position: absolute;    left: 0;    top: 0;    right: 0;    bottom: 0;    margin: auto;    background: blue;}复制代码

05 块级元素:padding

缺点:如果高度固定,需要提前计算尺寸(只在某些特定情况适用)。

.parent {    padding: 5% 0;}.child {    padding: 10% 0;    background: blue;}复制代码

06 块级元素:display: table-cell

.parent {    width: 600px;    height: 200px;    border: 1px solid red;    display: table;}.child {    display: table-cell;    vertical-align: middle;}复制代码

或:

这个方案是在知乎看到的,原文说是淘宝团队的方案:

张鑫旭老师的博客也有提到过:

.parent {    height: 300px;    border: 1px solid red;    display: table-cell;    vertical-align: middle;    /* *display: block;    *font-size: (heightX0.873);    *font-family: arial; */}复制代码

同样适用于多行文字的垂直居中处理

HTML代码:

child child child child child child child child child child child child child child child child child child child childchild child child
复制代码

CSS代码:

.parent {    width: 400px;    height: 300px;    display: table-cell;            vertical-align: middle;    border: 1px solid red;}.child {    display: inline-block;    vertical-align: middle;    background: blue;}复制代码

07 块级元素:display: flex

缺点:兼容性不好

.parent {    width: 600px;    height: 200px;    border: 1px solid red;    display: flex;    align-items: center;    justify-content: center;  /*水平居中*/}.child {    background: blue;}复制代码

08 块级元素:伪元素

这个方案是先从这位博主的文章中看到:

然后发现张鑫旭老师的文章中也有提到:

.parent {    width: 300px;    height: 300px;    border: 1px solid red;    text-align: center;}.child {    background: blue;    width: 100px;    height: 40px;    display: inline-block;    vertical-align: middle;}.parent::before {    content: '';    height: 100%;    display: inline-block;    vertical-align: middle;            }复制代码

09 块级元素:calc()

也是个不错的方法。

缺点:兼容性较差,需要计算。

.parent {    width: 300px;    height: 300px;    border: 1px solid red;    position: relative;}.child {    width: 100px;    height: 100px;    background: blue;    padding: -webkit-calc((100% - 100px) / 2);    padding: -moz-calc((100% - 100px) / 2);    padding: -ms-calc((100% - 100px) / 2);    padding: calc((100% - 100px) / 2);    background-clip: content-box;}复制代码

10 块级元素:inline-block

HTML代码:

child
brother
复制代码

CSS代码:

.parent {    width: 400px;    height: 400px;    border: 1px solid red;    position: relative;}.child, .brother {    display: inline-block;    vertical-align: middle;}.child {    background: blue;    font-size: 12px;}.brother {    height: 400px;    font-size: 0;}复制代码

其他

当然,还有一种方法,就是使用table布局:

content
复制代码

因为html还要加table等标签,冗余有点多,而且结构也改变了。

转载地址:http://bbyrl.baihongyu.com/

你可能感兴趣的文章
iOS中的webView加载HTML
查看>>
使用Java语言开发微信公众平台(六)
查看>>
陶哲轩实分析习题9.8.5 : 在有理点间断,无理点连续的严格单调函数
查看>>
Java调用存储过程时报 The user specified as a definer ('root'@'%') does not exist 解决方法...
查看>>
virtualenvwrapper 的安装和使用
查看>>
3月7日学习内容整理:restframework的版本信息组件
查看>>
【状压DP】【TSP问题专题】
查看>>
zabbix系列 ~ linux监控相关
查看>>
PAT-乙级-02
查看>>
内核编程小结(引用)
查看>>
基本计数方法系列 uva习题
查看>>
uva 571(bfs)
查看>>
libpcap/winpcap相关
查看>>
监听器/国际化
查看>>
PHP & 符号讲解
查看>>
[zhuan]Simple Emacs Configuration
查看>>
三个臭皮匠,顶上一个诸葛亮——在Google Ideathon上Design Thinking分享
查看>>
商城产品分类设计思路
查看>>
[loj 2478][luogu P4843]「九省联考 2018」林克卡特树
查看>>
java异步任务处理
查看>>