【翻译】无单位的line-height

今天在查一个问题,偶然发现bootstrap的行高是一个非常奇葩的小数,1.42857143。
很奇怪,于是乎去stackoverflow找了一下,发现这个数字是由 20 / 14的得到的,20px是bootstrap希望得到的line-height,而14px则是bootstrap默认的font-size,于是乎另外一个疑问出现了,为什么不直接写20px呢?
翻到一篇老文章,强调了一下为什么,在大部分情况下,应该使用无单位的line-height。
以下是一些简翻:

我想分享一些对于CSS:The Definitive Guide或这我的其他一些书的读者来说,是老生常谈的一点知识,不过仍然有需要写出来让更多人知晓。
CSS属性 line-height 可以接受没有单位的数值,你当然也可以给有单位的数值,尽管大部分情况下不应该这么做。
那么区别在哪里呢?当你定义一个有单位的数值,比如1em,你将会将一个计算后的值传递下去给所有的子节点,用如下的代码举例:

ul {font-size: 15px; line-height: 1em;}
li {font-size: 10px;}
small {font-size: 80%;}
<ul>
  <li>I'm a list item with <small>small text</small>.</li>
</ul>

ul元素的line-height属性被计算成了15px,因为em单位是用元素自己的font-size属性来计算的,在此我先直接声明了font-size属性,可以得出计算后的结果。
然后这个计算后的数值被传递给了他的子节点,所以li和small的font-size都将会是15px,而不是根据他们自己的font-size来计算,实际上,页面就如同我如此设定了css属性一样来渲染:

ul {font-size: 15px; line-height: 1em;}
li {font-size: 10px; line-height: 15px;}
small {font-size: 80%; line-height: 15px;}

如果我拿走line-height属性上的em,那么被传递下去的值就不再是被计算后的值了,而是原始的数字1,虽然在当前元素上的计算他仍然类似于em,是一个对于font-size的乘法因子。
因此每一个元素都会使用自己的font-size来进行计算,得到自己的line-height值,最后的结果就如同我如此设定css属性:

ul {font-size: 15px; line-height: 1;}
li {font-size: 10px; line-height: 10px;}
small {font-size: 80%; line-height: 8px;}

这之间有很大的区别,这也是为什么总是强烈推荐使用没有单位的数字,如果你想去设置一些line-height在html或者body元素,或一些有很多子结点的元素上。
再次强调,line-height属性可以接受无单位的数值,这在大部分情况下都是比有单位的数值更好的选择。(完)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,703评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,448评论 1 45
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 10,161评论 0 0
  • 在币圈中,很多人常犯错,导致投资损失,很大部分是不爱思考,犯直觉思维冲动决策的错。 什么是直觉思维? 直觉思维是人...
    zym_b252阅读 2,338评论 0 1
  • 一直想不明白,我们为什么会在一起。也一直在想,我们要通过哪种信仰在一起过一辈子。 现实很现实,也很累。真的是累了,...
    59a5a322af7b阅读 1,544评论 0 0

友情链接更多精彩内容