默认继承的CSS属性包括color、font-family、font-size、line-height、text-align、visibility;width、height、margin、padding、border、background等不继承;inherit可强制继承任意属性,取父元素计算后的值。

哪些 CSS 属性默认会继承?
不是所有属性都会继承,只有明确被设计为可继承的才会向下传递。比如 color、font-family、font-size、line-height、text-align、visibility 这些会自动传给子元素;而 width、height、margin、padding、border、background 等则完全不继承。
一个快速验证方法:在父元素上设 color: red,再在子元素里不写 color,看文字是否变红——如果变了,说明它继承了;如果没变(比如保持浏览器默认黑),那它就不继承。
inherit 关键字能强制继承任何属性吗?
可以,但得手动写。比如父容器有 border: 2px solid #333,子元素默认不会拿到这个边框,但你可以显式写 border: inherit,它就会取父元素计算后的值(注意不是声明值,是最终生效值)。
-
inherit适用于所有属性,包括本不继承的 - 它继承的是父元素「计算后」的值,比如父元素
font-size: 1.2em,子元素用font-size: inherit,拿到的是实际像素值,不是表达式 - 慎用于
margin或padding,因为父元素若为0或auto,继承后可能破坏布局
为什么子元素没继承 font-size 却看起来一样?
这是常见误解。font-size 确实继承,但它的相对单位(如 em、rem)会在每一层重新计算。父元素设 font-size: 16px,子元素写 font-size: 1.2em,得到的是 19.2px;但如果子元素只写 font-size: inherit,才是严格继承 16px。
立即学习“前端免费学习笔记(深入)”;
更隐蔽的情况是:父元素用了 rem,而根元素(:root)的 font-size 被 JS 动态改过,此时子元素即使没写 font-size,也会跟着变——这不是继承出问题,而是 rem 的计算机制导致的。
inherit / unset / initial 容易混淆的点
这三个关键字行为差异明显,用错会导致样式意外重置:
-
inherit:取父元素该属性的计算值 -
unset:对可继承属性等价于inherit,对不可继承属性等价于initial -
initial:总是取该属性的规范初始值,比如color: initial是black,display: initial是inline
例如,想让某个按钮恢复默认文字颜色,写 color: initial 比 color: inherit 更安全——尤其当它嵌套在深色主题容器里时,后者会继承深色而非还原成黑色。
继承不是万能的简化手段,关键在理解“谁传谁”和“怎么传”。最常被忽略的是:继承值不等于声明值,也不等于视觉表现值;调试时别只看 DevTools 里写的那行 CSS,得点开 computed 面板看实际生效值。










