在body里,用font-size把字体设置为small时,发生了什么?

《Head First HTML与CSS 第2版》里字体与颜色一章里面讲解字体大小,作者在css文件里,把body的字体统一设置为font-size:small,我把例子简化成如下:

<body>
<h1>这是一个标题</h1>
<p>这里段落</p>
<h2>这里一个次标题</h2>
<p>这里也是段落</p>

然后是css部份

body {
    font-size:small;
    }

打开浏览器(chrome)看了一下,嗯,确实应用了这个css,所有的文字都比原始的大小小了。然后,继续针对h1标题进行字体大小设置,增加下面css代码:

body {
    font-size:small;
    }
h1 {
    font-size:150%;
    }

按照我的理解,h1既然已经设置成150%,那字体应该比设置成small时大,但等刷新页面的时候,发现设置成150%后,h1的字体反而比刚设置成small时更小了。

我现在就很不理解为什么设置成150%的时候,反而更小,这中间发生了什么?网上也没有查到答案。
附图:
图片描述

阅读 8.2k
6 个回答

1、默认body,h1font-size16px,32px

2、当你设置

body {
    font-size:small;
    }
    

bodyfont-size 为 13px,h1font-size 为 26px

3、当你继续设置 h1 的时候,

body {
    font-size:small;
    }
h1 {
    font-size:150%;
    }
    
<percentage>:父元素字体大小的正数<percentage>

bodyfont-size 还是 13px,但是 h1font-size = 父元素字体大小*150%,所以 h1 font-size 为 13*150%=19.5px,小于前面的 26px,所以变小了;

其实这里主要的问题是: font-size:small;small的意思是,

xx-small, x-small, small, medium, large, x-large, xx-large
该套绝对大小关键字定义相对于用户的默认字体大小(medium)。

默认body,h1font-size16px,32pxsmall的结果导致前面变成 13px,26px;small并没有把bodyh1font-size关联起来,仅仅是相对自身变小;

一是由于继承,二是默认样式
例如:
设置前:body中font-size: 18px; h1默认为font-size: 2em; ==> 36px
在body上设置的font-size:12px; h1上设置font-size:150%; ==> 18px

对比起来自然会小些

font-size:150%;是相对于父容器中字体尺寸进行相应调整

也就是150%是的对比标准是p元素,而不是h元素

你打开devtools看看就知道了。

  1. 首先是不设置样式下的h1,浏览器会对其设置默认样式:
    h1默认样式

    也就是font-size是2em。em这个单位意思是相对于父元素的字体大小来计算数值。所以h1的字号相当于2倍body的字号,也就是16px*2=32px。

  2. 给body设置字号small后,这里不放截图了,显然small比16px小,所以h1的字号虽然是2em,但实际大小是13px*2 = 26px。至于这里的small字号等于13px是浏览器自己的行为,不讨论了。
  3. 最后设置h1的字号为150%,实际上相当于设置成1.5em,与原来的2em比起来当然又要小一号了。

总结一下就是,你以为h1的字号应该与body字号大小相同,所以觉得设置成150%后会比原来大。实际上不是的,浏览器将h1的字号默认设置成body的两倍字号大小了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏