本文是从SlideShare找到的文档《Line-Height 行高中文版》的学习笔记,原演示稿的内容质量和设计编排都属上乘,不过觉得99张幻灯片的篇幅有点过多了,因此总结一下。

Line Height (中文版) [slideshare id=2470819&w=425&h=355&sc=no]
View more presentations from bigCat Mao

行高的基本知识

在CSS中设定line-height的值,共有五种定义方式:

  • line-height:normal 普通行高,此值据浏览器不同在1.2倍文字大小左右
  • line-height:inherit 继承父级行高
  • line-height:120% 百分比率,此时按照font-size求得数值
  • line-height:20px 绝对长度
  • line-height:1.2 纯数字比率

line-height可以缩写到font属性中,紧跟在font-size属性后面,用斜杠分割

p { font: 12pt/18pt 宋体; }

line-height减去font-size即为行间距,实质是文字上下各分配等大的半行间距。如line-height:20px,font-size:16px时:

行高的继承

在父级元素(如body)中设置行高想传递给子级时,建议使用纯数字,即上述的第五种定义方法。

原因是:若在父级设置绝对长度的行高,则子级元素继承此固定数值,不随子级不同文字大小做自适应。父级设置百分比行高道理相同,会以父级font-size乘以百分比求出行高,仍以固定数值继承给子级。若在父级设置行高为normal,可以适应子级元素的不同文字大小,但normal的值在浏览器中解释有些许区别。

推荐方案:正文行高1.5,标题行高1.2(WCAG2.0规定段落行高至少1.5倍)。

行高的相关盒模型

与行高相关的四种盒模型是

  • containing box
  • line box
  • inline box
  • content area

以一个带有多个换行的段落为例:

1,段落整体构成一个containing box

2,containing box中,每一行文字是一个line box

3,回到整个段落中,依据元素标签划分为一系列inline box

inline box有可能跨行,且分为有标签的inline box(如上图中的emphasis)和匿名inline box(如普通文字)

4,每个inline box中含有一个content area

不同盒子的高度细节

1,content area的高度对应font-size

2,inline box的高度对应line-height,若font-size > line-height时,inline box的高度仍使用行高(而非文字高)

3,line box高度取决其内部最高的inline box或替代元素(图片之类)

4,多个line box无缝堆叠,构成整个containing box的高度

实际运用中的特殊情况

上标下标可能导致行高异常,可将该元素的行高归零解决

sup, sub {line-height:0; }

文字中的图片也会造成行高异常

之前在博客里为外站链接加了Google缓存的Favicon,结果在几个主流浏览器中一番折腾,仍旧是各种对不齐,所以研究一下行高的事,准备继续鼓捣,嗯嗯。


WarmGrid

Answerers: April and Probe