有什么办法可以让字体大小相对于正文字体大小设置?
我知道我可以使用这样的百分比:
body{
font-size: 14px;
}
p{
font-size: 150%;
}
但这会在嵌套元素上产生不需要的结果,其中字体大小相对于父元素:
li{
font-size: 150%;
}
li li{
/* ... */
}
CSS3引入rem
(根em),即html。与设置单位相对于父字体大小的 em 不同,rem
它将设置相对于根的单位。这是一篇关于 rem 的精彩文章:>>>点击这里<<<
CSS:
html {
font-size: 14px;
}
p {
font-size: 21px; /*cross browser fall-back hack*/
font-size: 1.5rem; /*same as 150%*/
}
li {
font-size: 21px; /*cross browser fall-back*/
font-size: 1.5rem;
}
li li {
font-size:18px; /*cross browser fall-back*/
font-size: 1.25rem;
}
对于跨浏览器兼容性问题,您可以通过还包括 px 来使用回退以获得所需的结果。
我正在添加对 Jukka K. Korpela 评论的回复,因为我认为它与原始帖子相关。
rem 的功能是尝试消除整个文档(尤其是在列表中)的 em/% 的复合效果,并获得 px 所没有的弹性。em/% 需要大量维护,并且随着互联网环境的不断发展,这意味着大量的时间。此外,早期的 IE 仍然需要 hack 来设置基本百分比(最常见的是根 [HTML] 为 100%),然后将父元素设置为必要的大小。但是,这种 hack 会导致正确遵循级联的新浏览器出现问题。同样,我的建议是使用 rem 来获得灵活性和易于维护以及 px 的后备(对于不受支持的浏览器)。
使用相对值时,例如font-size: 150%;
this 是相对于父元素的。你无法改变这一点。
例如,如果您有:
<div>
<p id=p1>
<p id=p2>
<p id=p3>
...
使用这个 CSS:
div { font-size: 10pt }
p { font-size: 200% }
结果是 p1 的字体大小为 20pt,p2 的字体大小为 40pt,p3 的字体大小为 8-pt,以此类推。
您可以通过覆盖所有内容的字体大小来解决此问题,然后仅对相关元素执行相对字体大小,例如:
* { font-size: 100% }
body { font-size: 10pt }
#p3 { font-size: 150% }
div { font-size: 120% }
但同样,任何元素的嵌套,如<div>
上面示例中的 s 都会再次导致相对字体大小随着每个嵌套而增大或缩小。
如果您想要绝对控制或需要“像素完美”结果,则使用绝对单位(像素)。另一方面,如果字体大小需要根据屏幕大小进行更改,则通常使用相对单位,例如em或rem 。它提供了更容易的操作并且需要更少的媒体查询使用。
em单位是相对于父字体大小的,而rem单位是相对于根元素的。
下面是一个使用rem单位的例子:
html { font-size: 100% } //usually this is 16px
p,
div {
font-size: 1rem; //this will equal to 16px
}
section,
article {
font-size: 1.5rem; //this will equal to 24px
}
这里有一篇很棒的文章https://kolosek.com/css-relative-font-size/详细解释了绝对和相对字体大小。