我一直在尝试配置一个基本的CSS模板,可以用来开始使用REM。我看到了设置以下body { font-size: 62.5% };
的方法,以便数学更容易(1rem = 10px,因为16px是默认字体大小)。
我不确定我是否喜欢这种方式,因为如果字体大小为10px,则必须指定<h1>
-<h6>
以及<p>
标签的大小。我的基线。
我一直在尝试一些不同的方法,并且对px
和%
在字体大小方面的联系非常困惑。请看以下示例:
<html>
<body>
<header>
<h1>Testing h1</h1>
<h2>Testing h2</h2>
</header>
<main>
<p>Random paragraph</p>
</main>
</body>
</html>
考虑以下CSS:
body {
font-size: 100%;
}
我希望浏览器以默认大小显示字体,即16px。 <p>
标签中的所有内容仍为16px,但是<h1>
-<h6>
会恢复为浏览器样式表中指定的原始大小。为什么未将所有文本设置为16px?
另一个例子:
body {
font-size: 12px;
}
为什么<h1>
-<h6>
的字体大小为12px
? <h1>
-<h6>
的确变小了(12/16 = 0.75时降低了75%)。我希望h1为12px或保持相同的默认值,因为在用户代理样式表中为h1-h6指定的值更多。
规则在指定百分比方面如何工作?在设置样式表以便可以使用REM方面的最佳实践是什么?
答案 0 :(得分:6)
h1
的默认font-size
设置为2em
,表示2 x the font size of the parent element
。与其他标题相同,它们都具有使用font-size
单位指定的em
。
在font-size
中使用百分比也相对于父font-size
,并且表示p x the font size of the parent element
,其中p
是0
(对于0%)和{ {1}}(100%)。
因此,如果您在正文中指定1
,则正文将具有100%
(默认为16px
),而font-size
将具有h1
。
您可以使用相同的逻辑为其他标题找到32px
。
font-size
body {
font-size:100%;
}
如果您在正文中指定<h1>this a text</h1>
,则12px
将具有h1
24px
body {
font-size:12px;
}
指定<h1>this a text</h1>
将使主体具有62.5%
和10px
h1
20px
body {
font-size:62.5%;
}
由于<h1>this a text</h1>
没有p
的默认值,因此它将仅继承正文中指定的值。
您可以使用开发工具轻松地在计算选项卡中检查这些值:
来自documenation:
em值的大小是动态的。定义字体大小时 属性,则em 等于适用于的字体的大小 所涉及元素的父级。如果尚未设置字体大小 页面上的任何地方,那么它就是浏览器的默认设置,通常是 16px
对于百分比:
相对于父元素的字体大小的
font-size
正值。
答案 1 :(得分:3)
为什么
<h1>-<h6>
的字体大小不为12px?
<h1>
和相关元素在您更改祖先的字体大小时不会将其字体大小更改为与祖先相同,这仅仅是因为未设置其默认字体大小(在浏览器内置的样式表中)到100%
,1em
,inherit
或类似名称中,并且您没有指定其他字体大小来覆盖浏览器提供的字体大小。
<h1>-<h6>
的确变小了(因为12/16 = 0.75,缩小了75%)。我希望h1为12px或保持相同的默认值,因为在用户代理样式表中为h1-h6指定的值更多。
在浏览器样式表中指定的值(至少在我的浏览器中)使用em
单位,因此它是比例(对于<h1>
是两倍)。父元素的字体大小。
规则在指定百分比方面如何工作?
用于祖先元素(px
,%
或其他任何内容)的字体大小的单位选择无关紧要。
答案 2 :(得分:1)
rem
相对于HTML
,而不是BODY
rem
单位基于HTML
元素而不是BODY
元素的字体大小。因此,您应该这样设置基本字体大小:
HTML {font-size: 62.5%; } /* Now `rem` is equivalent to `10px` */
代替
BODY {font-size: 62.5%; } /* Does NOT affect `rem` */
请注意,至少在某些浏览器中,HTML
元素的字体大小会影响滚轮步长:HTML
元素的字体大小越小,步长就越小并且滚动速度较慢。
要重置所有元素的字体大小,可以使用通用选择器:
* {font-size: 100%; }
或:
* {font-size: 1em; }
DOCTYPE
可确保跨浏览器的一致性此外,请确保在HTML文档的开头具有正确的DOCTYPE
声明,以为该文档打开标准兼容模式,以实现一致的跨浏览器呈现和行为:
<!DOCTYPE html>
答案 3 :(得分:-3)
在我这边工作得很好。唯一的可能是,您的HTML中缺少指向CSS文件的链接... :) 否则,请确保为同一属性尝试内联样式。