博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈 css 的各种居中——读编写高质量代码有感
阅读量:5856 次
发布时间:2019-06-19

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

css 的居中有水平居中和垂直居中,这两种居中又分为行内元素居中和块级元素居中,不同的居中用不同方法。

水平居中

1、行内元素水平居中(文本,图片)

给父层设置 text-align:center; 可以实现行内元素水平居中。

    

2、确定宽度块级元素水平居中

确定宽度的块级元素水平居中,常用的有 margin:0 auto; 相信很多开发人员都用的是这个,不过本人认为还有更好的写法:margin-left:auto;margin-right:auto; 因为 margin-top 和 margin-bottom 在重置 css 时就已经写了为 0 了。

    

3、不确定宽度的块级元素水平居中

不确定宽度的块级元素有三种方法实现。

方法一:

    

这里用到了 table 标签来实现不确定宽度的块级元素水平居中。table 本身不是块级元素,如果不给它设定宽度的话,会由内部元素的宽度“撑开”,但即使不设定它的宽度,仅设置 margin-left:auto 和 margin-right:auto 就可以实现水平居中。

这种方法很巧妙,但是增加了无语义标签,加深了标签的嵌套层数。

方法二:

    

方法二是改变元素的 display 值,使块级元素变成行内元素,然后使用 text-align:center 使其居中。相对于方法一,它不用增加无语义标签,简化了标签的嵌套深度,但它也存在一定的问题:它将块级元素变成了行内元素,这样就失去了一些块级元素的功能,比如设置宽度,高度。

方法三:

    

方法三通过给父层设置浮动和相对定位以及 left:50%,子元素设置相对定位和 left:-50% 来实现水平居中。它可以保留块级元素的功能,而且不会添加无语义标签,不增加嵌套深度,但是设置了相对定位,会带来一定的副作用。

这三种方法各有优缺点,具体使用哪种方法可以视具体情况而定。

垂直居中

1、父层高度不确定的垂直居中

通过给父层设置相同的上下内边距实现。

    
hello world

2、父层高度确定的单行文本垂直居中

通过给父层设置行高来实现,行高和父层高度相同。

    
hello world

3、父层高度确定的多行文本、图片、块级元素垂直居中

方法一:

说到垂直居中,css 中有个用于垂直居中的属性 vertical-align,但只有在父层为 td 或者 th 时,这个属性才会生效,对于其他块级元素,例如 div、p 等,默认情况是不支持的。在 firefox 和 ie8 下,可以设置块级元素的 display 值为 table-cell,来激活 vertical-align 属性,但 ie6,7 并不支持,所以这种方法没有办法跨浏览器兼容。但是我们可以使用 table。

    
hellow world
hellow world
hellow world

table 可以很好的实现垂直居中效果,但是它添加了无语义标签,增加了嵌套深度。

方法二:

对支持 display:table-cell 的 ie8 和 firefox 用 display:table-cell 和 vertical-align:middle 来实现居中,对不支持 display:table-cell 的 ie6 和 ie7 使用 hack 写法。

    
hellow world
hellow world
hellow world

利用 hack 技术区别对待 firefox、ie8 和 ie6、ie7,在不支持 display:table-cell 的 ie6 和 ie7 下,通过给父子两层元素分别设置 top:50% 和 top:-50% 来实现居中。这种方法的好处是没有增加额外的标签,但缺点也很明显,一方面它使用了 hack,不利于维护,另一方面,它设置了 position:relative 和 position:absolute,带来了副作用。

转载于:https://www.cnblogs.com/axl234/p/3867347.html

你可能感兴趣的文章
ASP.NET中 Repeater嵌套
查看>>
15.5. warning
查看>>
你必须要知道的架构知识~第五章 依赖住入在这个时候出场了
查看>>
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
查看>>
Java程序员的日常—— FileUtils工具类的使用
查看>>
人工智能和大数据的开发过程中需要注意这12点
查看>>
Intel发布专为机器学习而设计的Intel® Nervana™神经网络处理器,年底量产
查看>>
最强Android模拟器genymotion的安装与配置
查看>>
计算网络带宽需求的正确姿势
查看>>
如何建立云环境下的性能测试策略
查看>>
论网站内容建设策略
查看>>
10月18日云栖精选夜读:解读OpenMessaging开源项目,阿里巴巴发起首个分布式消息领域的国际标准...
查看>>
如何把SVG小图片转换为 html字体图表
查看>>
MongDB的安装和基本操作 二(增删改查)
查看>>
RvmTranslator 3.1 is released
查看>>
WCF的三个名称/命名空间,你是否傻傻分不清楚?
查看>>
百分点:守住电商后门 推荐引擎让大数据快变现
查看>>
外媒:中国TA459 APT组织利用CVE-2017-0199攻击顶级金融公司
查看>>
解析深度学习的未来十大趋势
查看>>
影响百万人就业、价值6万亿的“大生意”是这样落地的
查看>>