CSS选择器优先级疑问:为何body选择器未覆盖通配符选择器?
问题原因解析
你遇到的核心问题是样式继承的优先级规则,而非选择器本身的优先级:
- 通配符
*选择器会直接匹配页面中所有元素(包括<h2>、<a>这些<body>的子元素),给这些元素直接设置了color样式; body选择器的color样式是作用在<body>标签本身的,<h2>、<a>只能通过继承获取这个颜色值。而CSS中,继承的样式优先级远低于直接作用在元素上的样式——哪怕是优先级最低的通配符选择器,只要是直接选中元素,就会覆盖继承来的样式。
你可以做个直观验证:给body选择器添加border: 1px solid red;,会发现<body>的边框正常显示,说明body选择器本身是生效的,只是它的color被子元素的直接样式(通配符设置的)覆盖了。
当你改用body h2,a选择器时,是直接选中<h2>和<a>元素,这类选择器的优先级高于通配符*,所以它们的color样式会正常生效。
内容的提问来源于stack exchange,提问作者Hamed Fathi
相关产品推荐
相关产品推荐

