-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
详解 line-height 属性 —— HTML中一行文字是如何排布的?什么是内容区、行内框、行框? #3
Comments
应该是不同字体也产生一样的em框,只是不同字体在同样em框里的位置和大小等定义不一样吧 |
@Aze-ziv 你好,就我查到的一些资料来看, 参考资料:
|
感谢;那我们的font-size设置的就不是em框的大小了吧,有些奇怪 |
Most fonts, as it turns out, don’t have em boxes whose heights match the character glyphs.:意指同个字的不同字体的字形(可视文字)与em框没有一个确定的关系;但是这个em框应该是和我们的font-size大小一样,不然怎么理解我们font-size如果设置为16px的em框大小呢 |
感谢您的回答,是我的表述存在一些问题,em框的高度应该是相同的,我赞同您的观点 |
一位前端工程师,写过的最多的代码一定是
<div>, <span>
等填满了文字内容的HTML标签,那么各位有没有想过在这些标签内的文字是如何排布的?本文将详细介绍
line-height、font-size
等属性的来龙去脉,以及em框、内容区、行内框和行框
等概念,深入剖析这一行文字在毫厘之中的奥秘。1. font-size:生成 em框 与 内容区
首先,一个字符受字体内置配置以及
font-size
属性影响,会在其周围产生一个不可见的em框(em square)
(如下图),font-size属性
并不决定实际显示的字符尺寸,只是指定 em框 的高度
(宽度则会因字符、字体不同,而不尽相同)。em框
与其中字符的具体大小、相对位置关系由字体内置值决定。也就是说对于不同的字体,即使是同样
font-size
的同一个字符也会产生不同尺寸的em框,并与em框有不同的相对位置。一个元素中多个字符的 em 框组合在一起,就形成了
内容区
,即下图粉色外边框所圈起来的部分。内容区的
高度
就是 font-size 的值,而宽度
则视内容(如一行中文字的个数)而定。2. line-height和基线
line-height
属性的值规定的是两行文字基线
之间的最小距离。基线相当于一把尺子,水平地串在 em 框里,一个个字符就以基线为参照,整齐地“站”在基线上(如下图)。
基线的位置因字体而异,由字体内置值决定位于 em 框中特定的位置,如下图:
因为基线无法在浏览器中看到,所以我们以上图中每行文字的 underline 为参照来看基线,上述三行分别为不同的字体,但有相同的 font-size 。
这三行中相同的字,如落、孤,可以明显地看到与基线有着不同的位置关系,第一行字底部与基线有一点重合,而其余两行则和基线几乎没有重合。
因为这三种字体的基线在 em 框之中的位置是不同的。
声明
line-height
属性后,两行文字的基线便按照这个值上下分开,行与行也相应的上下分开。当行高大于字体高度,即line-height的值减去font-size的值大于0时,基线相隔的距离大于该行的行框高度时,两行文字便被分开。
当行高小于字体高度,即
line-height
的值减去font-size
的值小于0时,基线相隔的距离小于该行的行框高度时,两行文字便会重合在一起。3. 行间距、行内框与行框是什么
内容区的上下还会有
行间距(leading)
,具体值为行高减去字符大小的一半,( line-height 减 font-size 除 2 )。行间距
可能是负值(行高小于字符尺寸),这时就会产生上图所呈现的行与行相互重合的现象。行内框
即内容区
加行间距
,其高度的计算公式是:font-size + (line-height - font-size)
,去掉括号即line-height
,也就是说行内框的高度就等于 line-height 的值。同一行中可以有不同高度的行内框(如下图)。
行框的上边界由最高的行内框决定,下边界由最低的行内框决定。
4. 行与行之间最终的相对位置
一个行框包含着一整行的内容,各个行框之间上下紧密贴合排列,形成了最终呈现在页面上行与行之间的位置关系。
总结:
font-size
的值决定一个字符的em 框
的高度,字符的大小由字体内置值决定、又受em框
高度影响;em框
组合形成内容区
,内容区加内边距即行内元素背景颜色
所应用的范围;内容区
加上行间距
(line-height - font-size
),形成行内框
;行内框
决定了一个行框
的高度;行框
上下紧密贴合形成了行与行之间的位置关系。参考资料:
《CSS 权威指南(第三版)》,第六章、文本属性和第七章、视觉格式化
W3C规范-9 Visual formatting model(可视化模型)/ 中文版
另一篇同样主题的博文:深入理解CSS中的行高,相互对照,加深理解。
慕课网上张鑫旭老师的两节课:line-height与内联元素的高度机制
The text was updated successfully, but these errors were encountered: