应使用 > 选择器精准匹配直接子元素,如 .container > div;:scope 可在 JS 中限定查找范围;避免通配符和无约束属性选择器;注意继承属性与 Shadow DOM 隔离机制。
用
代替空格,精准匹配直接子元素
很多人写
本意是只选
下一级的
,结果却把所有嵌套层级的
都选中了。这是因为空格是「后代选择器」,不是「子元素选择器」。
真正只选直接子元素,必须用大于号
:
。它只匹配父元素下**紧挨着的子元素**,不穿透到孙辈及更深层。
错误写法:
→ 会命中任意深度的
(比如
里套了 5 层
也中招)
正确写法:
→ 每一级都强制“直接子级”,路径明确、可控
注意:
两边要有空格,
在多数浏览器中虽能解析,但不符合规范,易被 lint 工具报错
是现代方案,但兼容性要查清
如果你在 JavaScript 中动态创建 DOM 片段,再用
查找,
能帮你避免污染全局上下文。
例如:
确保只在
的直系子元素里找
,不会误触
内部更深层结构。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
支持情况:Chrome 29+、Firefox 32+、Safari 15.4+、Edge 79+;IE 完全不支持
别把它当 CSS 选择器单独用——
在纯 CSS 文件里无意义,只在 JS 的
/
等 API 中生效
替代方案(兼容老浏览器):
配合
,比用
再遍历判断
更轻量
慎用通配符和模糊类名,它们会放大选择范围
你以为
很方便?它可能把
、
、甚至
(只要含 icon 字串)全选中——这本质上是在扩大匹配面,跟“避免选所有子元素”的目标背道而驰。
优先用精确类名:
、
,而不是靠属性包含匹配
避免
或
这类无约束属性选择器,它们默认作用于整个文档树
如果必须用属性选择,加上标签或父容器限定:
,而非
检查是否意外触发了继承或全局样式穿透
有时候你没写错选择器,但子元素还是被影响了——大概率是父元素设了
、
、
这类可继承属性,或者用了
/
这种强力重置。
用浏览器 DevTools 的「Computed」面板看具体值来源,别只盯「Styles」里的规则
和
行为不同:
对继承属性等价于
,对非继承属性等价于
,容易误判
组件化开发中,Shadow DOM 的
和
才是真正隔离子元素样式的手段,普通 CSS 无法突破 DOM 树层级限制
最常被忽略的一点:选择器看似“安全”,但一旦父容器本身是动态插入或由第三方库控制(比如 React 的
、Vue 的
),它的实际 DOM 位置可能脱离你预期的层级结构——这时候光靠 CSS 选择器逻辑已经不够,得配合 JS 判断
或监听真实挂载节点。
>.container div.containerdivdiv>.container > div.card ul li aa.cardul.card > ul > li > a>.card>ul:scopequerySelector:scopeel.querySelector(':scope > .btn')el.btnel:scopequerySelectormatches()el.childrenArray.from().filter()querySelectorAll('*')parentElement === el[class*="icon"]icon-wrapperprimary-icon-largenot-an-icon-at-all.icon.icon--close*[attr][attr]button[data-action] > span[data-action] spancolorfont-sizeline-heightall: unsetall: revertinheritunsetunsetinheritinitial:host::slottedPortalteleportelement.closest()