使用相同的font-size,但使用不同的font-family,渲染出来的line-height是不同的
并且font-size:100px时元素的height也不是100px:
为什么会造成这种原因呢?是因为字体设计导致的!
字模em-square 又称为 em size,是字体设计中的概念,在一个字体中,每个字符都被放置在自己的空间容器中,即字模
字模的高度称为“ em”,它源自大写字母“ M”字符的宽度,因为字母的比例被做成了方形(因此有了“EM Square”的称呼)
在计算机字体中,em 是空间的数字化定义总量
当时用字体来设置样式时,em 将会缩放到需要的值
知道了你的字体将会使用 1000,1024 或 2048UPM 后,你需要设定你的字形的绘制,以保证你字体样式的所有面都充分地填入 UPM 空间内
使用font-face选择一种字体后,这种字体定义其字模em-square(字模),每个字符将会绘制出自己的正方形容器,这个正方形使用相对单位和生成一个1000单位(也可以是1024,2048或者其他)
设计字体时还可以设置一些度量线(ascender,descender,capital height,x-height等),有些值(顶线、基线)是超出em-square之外的值
比如em-square是1000,顶线(ascender)是1100和底线(descender)是540,这意味着该字体在1000个单位的em-square使用了1100 + 540个单位,也就是说font-size:100px的时候,其高度是164px,这个计算高度定义了字体元素内容高度(content-area)
在字体设计时Capital高度是640和x-height的值是485,定义了大写字母是68px高度(680个单位)和小写字母(x-hegiht)是49px高度(485个单位)
当一个行盒(line-box)元素呈现在屏幕上,它根据它的宽度可以有很多线,每一行都是由一个或多个行内元素(inline box)(HTML标签元素(如span之类的inline属性标签)或匿名内联元素文本内容)组成
line-box的高度是基于它的子元素高度的,浏览器为每个行内元素计算的高度都是line-box(子元素的最高点到最低点),因此line-box的总高度足以包含所有子元素(默认情况下)。
inline-block和blocksified行内元素,padding,margin和border都会增加高度,所以内容区域和line-box的高度也会增加
元素(黑色边框)产生了一个line-box(白色边框),其包含了内联元素(实心边框)和匿名内联元素(虚线边框)
内联元素有两个不同高度:内容区域(content-area)高度
和 行距高度
leading
:行距高度和内容区域(content-area)高度差
称为leading(行距)
leading = (lineHeight – fontSize)
这些特定的行内元素,高度计算基于他们的盒模型(height、margin和border属性),但如果hegiht的值是auto,则使用line模型计算高度,即line-height就是行内元素的高度
特殊元素:
line-height的默认值是normal,normal一般为1或1.2,这取决于元素的 font-family
在设计字体时,字体的顶线(ascender)和底线(descender)是超出字模em-square之外计算的,此时字体的**字体元素内容高度(content-area)**将会超过字模定义大小,超出的比例就是line-height的默认值是normal的值
例子:Catamaran字体
Catamaran的em-square是1000,但其顶线ascender和底线descender的值:
度量线的间距:通过Ascent/Descent度量使用line-height: normal(hhea)
这些度量都是特殊字型,由字体设计师来设置
所用的值是无单位数值乘以元素的 font size
计算出来的值与使用数值指定的一样,大多数情况下,使用这种方法设置line-height是首选方法,在继承情况下不会有异常的值
line-height:1是一个非常糟糕的做法
指定
长度
与元素自身的字体大小有关,计算出的值是给定的百分比值乘以元素计算出的字体大小。
一个inline-block元素,如果里面没有inline内联元素,或者overflow不是visible,则该元素的基线就是其margin底边缘,否则,其基线就是元素里面最后一行内联元素的基线
vertical-align属性,设置垂直对齐方式,只针对 行内元素 或 行内块级元素(块级元素无效)
vertical-align属性对于行内格式化上下文中的leading有很大的作用,vertical-align的默认值是baseline,vertical-align值为baseline表示基线对齐
比如:并列的两个字体元素,两个字体的font-size不相同,但是两个元素都会按照vertical-align:baseline对齐
super
text-bottom
使元素的中部与父元素的基线加上父元素x-height(小写字符x的高度)的一半对齐
middle中线位置(字符x的中心)并不是字符内容的绝对居中位置
长度值
百分值