后代选择器(空格)匹配祖先元素内任意嵌套层级的指定后代元素,如.card p会匹配.card内部所有p元素;子选择器(>)仅匹配直接子元素,如.nav > a只匹配.nav的直接子a元素。
后代选择器用空格连接,比如 .card p,它不关心中间隔了几层——只要 p 在 .card 的 DOM 树内部(哪怕套了 section > article > div > span > p),就全中。
p 全被染色了.modal 内所有 a、ul、button 的基础间距和颜色.nav > a 这种写法极其严格:它只匹配 .nav 的**直接子元素** a,如果 a 被包在 div 或 li 里,哪怕只多一层,就彻底失效。
.menu > li 却发现下拉菜单项没生效——因为二级 li 实际是嵌套在另一个 ul 里,已不是 .menu 的直接子元素关键就看 HTML 结构里“中间能不能插人”:允许隔层就用空格,必须紧挨着就用 >。
border: 2px solid red,看哪些元素真被命中.container > ul li a 这类写法——> 和空格混搭容易误判层级,团队应约定统一风格(推荐全用 > 控制关键结构,空格用于内容区松散匹配)两者在所有现代浏览器中都 100% 支持,真正的问题不在兼容性,而在样式泄漏(style leakage)。
.card p 很可能意外覆盖子组件内的 p,而 .card > p 又太窄,漏掉合理嵌套的内容.card__content p,既语义清晰,又
层级选择的本质不是语法游戏,而是你对 HTML 结构稳定性的预判。空格是信任,> 是设防;用错一次,调试十分钟。