博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS水平垂直居中
阅读量:6096 次
发布时间:2019-06-20

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

水平居中

水平居中比较简单,这里只简单概述一下:

  • 对于行内元素来说(span、img、input等),直接text-align:center;即可搞定;
  • 对于块级元素,使用margin: 0 auto;也可以搞定;

还有其它一些方法,比如借助绝对定位等,不过更麻烦也不太推荐,所以不讲。

垂直居中

垂直居中主要有8种方法,本文只介绍7种,还有一种个人觉得不伦不类,懒得写了。

完整DEMO演示地址:

2.1. line-height法

通过设置line-height和height相同来达到文本元素垂直居中的效果。

示例:

.test {	height: 200px; height: 200px; }

优点:简洁,简单,好记,兼容性好;

缺点:只对文本元素生效,而且文本不能超过单行。

2.2. 绝对居中法

所谓绝对居中就是:

.parent {	position: relative; width: 400px; height: 400px; } .children { position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: auto; width: 100px; height: 100px; }

优点:

  • 支持IE8+,兼容性良好.
  • 代码量少,标签结构简单.

缺点:

  • 高度必须定义;
  • 使用了绝对定位;

2.3. 负外边距法

将设置了绝对定位的子元素水平和垂直偏移50%;然后,在水平和垂直方向分别偏移负自身宽高的一半。

.parent{
position:relative} .children{ position: absolute; left: 50%; top: 50%;} .content{ width: 100%; height: 150px;margin-left: -50%; margin-top: -75px;}

优点:

  • 兼容性好,IE6+,移动端更不用说

不足:

  • 子元素的宽高值需要确定,这对于高度自适应容器是个问题.
  • 最好将盒子设置box-sizing:border-box,因为偏移值是依据content+padding值来确定.

2.4. 负位移法(推荐)

将设置了绝对定位的子元素水平和垂直偏移50%;然后,通过CSS3 transform属性值将子元素偏移负自身宽高的一半。

.parent{
position:relative} .children{ position: absolute;left: 50%;top: 50%;transform:translate(-50%,-50%);}

优点:

  • 支持子容器高度自适应,无需显示设置宽高度;
  • 代码量少.

缺点:

  • 兼容性为IE8+,不过移动端兼容良好;
  • 需要添加浏览器私有前缀.

2.5. 表格法

通过设置display:table/table-cell相关属性,模拟表格布局。注意,将元素设置为display:table-cell;后并不是说这个元素就可以垂直居中了,而是它的子元素相对于它垂直居中,所以使用table-cell方式垂直居中的话还需要一个额外的标签。

 
表格法兼容性好,支持IE6+,支持动态高度,表格法兼容性好,支持IE6+,支持动态高度,表格法兼容性好,支持IE6+,支持动态高度,表格法兼容性好,支持IE6+,支持动态高度表格法兼容性好,支持IE6+,支持动态高度。

注意.children不要设置了height:100%;,否则不兼容IE7。

优点:

  • 支持高度自适应,可适用于响应式环境.
  • 适用于多个子元素水平垂直居中环境.
  • 兼容性良好

缺点:

  • 需要额外标签。

2.6. 行内块法

通过增加一个空白元素(如伪元素),并将其高度设置为百分百,然后同时将空白元素和要居中的元素设置vertical-align: middle;即可实现垂直居中。

.parent{
}.parent:after{ content:'';display:inline-block;vertical-align:middle;height:100%;width:0} .children{ display:inline-block;vertical-align:middle}

优点:

  • 支持子元素高度自适应.
  • 适用于多个子元素水平垂直居中环境.
  • 兼容性良好,IE7+支持.

缺点:

  • 说不上来,但是个人不太喜欢这种方式;

2.7. flex

使用CSS3新添加的flexbox弹性布局可以非常容易的实现各种居中,如一个、多个子元素的水平/垂直居中、对齐、等高;

.parent{
display: flex; align-items: center; justify-content: center;}

优点:

  • 不需要设置子元素的高度、宽度.
  • 适用于任意子元素水平垂直居中环境.
  • 代码量少.

缺点:

  • IE10+才兼容,移动端虽然都支持但是也存在部分兼容问题.
  • 需要添加浏览器私有前缀.

转载于:https://www.cnblogs.com/ruoyaozhan/p/10872485.html

你可能感兴趣的文章
Confluence 6 针对站点维护使用只读模式
查看>>
聊聊你可能误解的Kubernetes Deployment滚动更新机制
查看>>
详解coredump
查看>>
bash脚本:break和continue
查看>>
Ajax跨域问题解决
查看>>
docker on CentOS 7.0
查看>>
python课程第二周 内置数据结构——列表和元组
查看>>
golang beego crud
查看>>
搜索“抑郁症” 谷歌先让你做个医学测验
查看>>
web app变革之rem
查看>>
【unity】将场景导出XML或JSON或二进制并且解析还原场景
查看>>
HAProxy的独门武器:ebtree[转]
查看>>
tortoisegit push 出错 没有生成puttykey
查看>>
关于PrintWriter的println()和write()方法区别
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
Debian 6.05安装后乱码
查看>>
欢迎大家观看本人录制的51CTO精彩视频课程!
查看>>
IntelliJ IDEA中设置忽略@param注释中的参数与方法中的参数列表不一致的检查
查看>>
读 《重构 : 改善既有代码的设计》
查看>>