You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子节点是否继承:root的font-size?全局重置后继承失效原因咨询

嘿,我来帮你把这两个关于CSS继承和:root的问题讲明白~

问题1:子节点是否从:root伪类继承font-size属性?

答案是肯定的。:root本质上就是HTML文档的根元素(也就是<html>标签)的伪类别名,所有可继承的CSS属性(比如font-size、font-family、color这些),默认都会从:root传递给它的子节点。

不过有个重要前提:如果子元素被其他CSS规则直接指定了该属性,那继承来的值就会被覆盖——这也是第二个问题的核心原因。

问题2:为什么全局重置font-size:0后,子元素不继承:root的字体大小?

咱们先拆解你的代码逻辑:

* { font-size: 0; }
:root { font-size: 12pt; font-family: sans-serif; color: silver; }

这里的*是通配符选择器,它会匹配所有元素,包括<h1>这类:root的子元素。这就相当于给每个子元素都直接设置了font-size:0,而CSS中,直接应用在元素上的样式优先级远高于继承来的样式——哪怕:root的选择器优先级比*高,也没用,因为:root的font-size是传给子元素的继承值,而子元素自己已经被*直接指定了font-size。

你可以观察到,font-family和color是能正常继承的,因为*选择器没设置这两个属性,子元素找不到直接指定的值,就会用继承来的:root的样式。

再看第二个代码示例:

* { font-size: 0; }
:root { font-size: 12pt; font-family: sans-serif; color: silver; }
h1 { font-size: 1.8rem; }

这里给<h1>直接指定了font-size:1.8rem,这个规则的优先级比*高,所以会覆盖0;同时rem单位是基于根元素(:root)的font-size计算的,所以最终<h1>的大小是1.8*12pt,能正常显示。

简单总结:继承的样式优先级最低,只要元素被直接指定了某个属性,继承值就会被忽略。你用*给所有元素直接设了font-size:0,子元素自然不会用:root继承来的12pt,除非你给子元素重新指定font-size。

内容的提问来源于stack exchange,提问作者Ben Aston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:22:34