css - html根字体设置成很大的值后, 包裹了行内元素的div莫名变高是什么原因
PHP中文网
PHP中文网 2017-04-17 14:51:02
0
5
1019

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

    <style>
    html {
        font-size: 100px;
    }
    span {
        font-size: 12px;
        line-height: 12;
    }
    </style>
</head>
<body>
    <p>
    <span>dsflfij</span>
    </p>
</body>
</html>

p的高度变得很高

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
黄舟

你的 span 的 line-height 值设置的是 12。

按照规定,当行高设为数字时,行高的计算值就是自身字体大小的相应倍数,具体到你的问题中就是 12x12=144,这样的话 p 的高度就应该是 144px(不算边框) 才对,但我们通过审查元素工具可以看到 p 的最终高度是 161px(不算边框)。

这其实涉及到行框高度的计算。p 的高度就是其内部行框的高度,而行框的高度是行框内最高点和最低点之间的距离(The line box height is the distance between the uppermost box top and the lowermost box bottom)。我们来看下面的demo。为了方便观察把 span 元素变成行块元素(有高度),背景颜色设为淡灰色,并且在 span 后面放一个字母 x ,x 底边所在的线就可以看做是 span 所在行框的基线。

http://codepen.io/zengkan0703...
当我们把 span 的 vertical-align 值设为 middle,如 box2 ,可以看到行框的最高点和最低点都是 span 元素的最高点和最低点,p 的最终高度就是理想的 144px。 当 span 的 vertical-align 值为默认的 baseline 时,如 box1, 为了跟行框的基线对齐,span 元素会下移,行框的最高点变成了匿名行内框 x 的最高点,最低点还是 span 的最低点,所以行框的高度就会变大为 161px。

刘奇

css 中 line-height 的问题

line-height 一个很重要的用途就是让我们的文本可以在父级元素中垂直居中,但是在使用它的过程中也会遇到一些问题。

先来看一个实例,如下图:

代码也很简单,就是当我们在p 中定义的字体很大的情况下,我们看到字体和父级元素之间有一些空隙。那么这是为什么?
我们查一下 line-height 的定义,如下:

normal 默认。设置合理的行间距。
number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。
length 设置固定的行间距。
% 基于当前字体尺寸的百分比行间距。
inherit 规定应该从父元素继承 line-height 属性的值。

所以在以上的情况我们要想使,我们的字体能够撑满我们的容器,就需要给父级容器添加 line-height属性且值为 100%

代码和效果如下:

那么为什么会出现上面的问题呢?

line-height 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和底部。

所以,可以得出下面的一个公式:

空白间距 = line-height – font-size

所以,当设置为line-height 的值为100%的时候,line-height的值就等于 font-size的尺寸,此时的空白间距为0。

大家讲道理

来, 走几步.

第一步, 属性的继承. p 没有自己定义的 font-sizeline-height, 因此继承于 HTML, 得到 p 具有如下计算值:

font-size: 100px;
line-height: normal;

第二步, 了解行高. 基于以上的计算值, 假设用户代理(即浏览器)采用的 line-height 使用值为 1.15, 那么实际上 p 的行高是 115px. 而所谓行高, 即是行盒的最小高度.

第三步, 了解行盒. 概念比较复杂, 详情请看我最后的链接. 行盒的高度是最上行内盒顶部到最下行内盒的底部(其中还有 vertical-align 的因素, 这里不表)并包含这个最小高度(这个最小高度是通过虚拟"支柱"实现的, 不表), 在你的代码里, p 只有一个行盒, 这个行盒又只有一个行内盒 SPAN, 而这个行内盒的行高是 12px * 12, 大于最小高度 115px, 故此行盒实际高度 144px.

第四步, p 取其顶部到其最后一个行盒(本例中只有一个)的高度, 即 144px.

所以, 当你增加 HTMLfont-size 时, 导致 p 的行高使用值也在跟着变化, 一旦这个值超过 SPAN 的高度, 就会成为 p 的高度.

详细原理参见: https://segmentfault.com/a/11...

PHPzhong
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

    <style>
    html {
        font-size: 100px;
    }
    span {
        font-size: 12px;
        line-height: 12;
    }
    </style>
</head>
<body>
    <p>
    <span>dsflfij</span>1
    </p>
</body>
</html>

因为font-size可继承,你这样写了后p的font-size也变大了。

并且需要注意的一点line-height里面 12 != 12px,详情百度一下差异

阿神

font-size是可继承的属性,你这样写之后p就继承了html 的font-size:100px的属性,所以p的font-size也变大了,由于你设置了span的font-size,所以就感觉p变得很高。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板