定义行高

课后整理 2021-1-7

示例2】下面示例演示了不同取值下,行高样式的比较效果。行高取值单位一般使用em或百分比,很少使用像素,也不建议使用。

.p1 {  line-height:0.5em;}
.p2 { line-height:0em;}

在浏览器中预览,则显示效果如图15所示,说明当取值小于字体大小时,多行文本会发生重叠现象。

图15  段落文本重叠演示效果

例如,如果段落字体大小为12px,则行高设置为1.8em比较合适;如果段落字体大小为14px,则行高设置为1.5em~1.6em比较合适;如果段落字体大小为16px ~18px,则行高设置为1.2em比较合适。一般浏览器默认行高为1.2em左右。例如,IE默认为19px,如果除以默认字体大小(16px),则约为1.18em;而Firefox默认为1.12em。

提示

行高一般以中线为准,减去字体大小值之后,平分为上下空隙,如果值为奇数,则把多出的一个像素分给上边空隙或下边空隙。

例如,如果字体大小为12px,行高为1.6em,则行高实际为19px,行高减去字体大小后等于7px,则上下空隙分别分得3px,然后把多出的一个像素分给上边空隙。使用等式表示如下:

行高(19px)=下边空隙(3px) + 字体大小(12px) + 上边空隙(4px)

如果在浏览器中预览,则英文字体显示如图16所示,其中多余的一个像素分给了上边空隙。而对于中文字体来说,则多余的一个像素分给了下边空隙,如图17所示。

图16  英文字体的行高值分配示意图

图17  中文字体的行高值分配示意图

示例3】下面示例演示了如何设置更灵活的行高样式。

用户也可以给line-height属性设置一个数值,但是不设置单位。例如:

body { line-height:1.6;}

这时浏览器会把它作为1.6em或者160%,也就是说页面行高实际为19px。利用这种特殊的现象,用户可以设计多层嵌套结构中行高继承出现的问题。

新建一个网页,保存为test2.html,在<head>标签内添加<style type="text/css">标签,定义一个内部样式表,然后输入下面样式,设置网页和段落文本的默认样式。

body {
    font-size:12px;
    line-height:1.6em;}
p { font-size:30px;}

然后在<body>标签中输入如下标题和段落文本。

<h1>《人间词话》节选</h1>
<h2>王国维</h2>
<p>古今之成大事业、大学问者,必经过三种之境界:"昨夜西风凋碧树。独上高楼,望断天涯路。"此第一境也。"衣带渐宽终不悔,为伊消得人憔悴。"此第二境也。"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境也。此等语皆非大词人不能道。然遽以此意解释诸词,恐为晏欧诸公所不许也。</p>

上面示例定义body元素的行高为1.6em。由于line-height具有继承性,因此网页中的段落文本的行高也继承body元素的行高。浏览器在继承该值时,并不是继承“1.6em”这个值,而是把它转换为精确值之后(即19px)再继承,换句话说p元素的行高为19px,但是p元素的字体大小为30px,继承的行高小于字体大小,就会发生文本行重叠现象。如果在浏览器中预览,则演示效果如图18所示。

图18  错误的行高继承效果

解决方法:

在定义body元素的行高时,不为其设置单位,即直接定义为line-height:1.6,这样页面中其他元素所继承的值为1.6,而不是19px。则内部继承元素就会使用为继承的值1.6附加默认单位em,最后页面中所有继承元素的行高都为1.6em。

body {
    font-size:12px;
    line-height:1.6;}
p { font-size:30px;}