*通配符拖慢渲染因强制匹配所有节点且无法缓存,深层嵌套选择器开销在于从右往左回溯匹配,BEM和data属性可显著提升性能。
* 通配符会拖慢渲染速度浏览器解析 CSS 时,* 会强制匹配**所有元素**,包括那些根本不会被样式影响的节点(比如 script、meta、注释节点等)。更关键的是,它无法被浏览器的样式计算缓存有效利用——每次重排或新增节点,都要重新遍历整个 DOM 树做匹配。:not() 或伪类组合中尤其危险,例如 *:not(.btn),实际触发的是“先取全部再过滤”,而非“跳过 .btn”* 还可能干扰选择器优先级计算逻辑html、body、div 等具体标签,或直接用 all: unset 控制继承行为(注意兼容性).a .b .c .d .e)的实际开销在哪CSS 选择器是从右往左匹配的。写成 .a .b .c .d .e,浏览器会先找所有 .e 元素,再逐个向上检查父级是否满足 .d → .c → .b → .a。嵌套越深,回溯路径越长,失败匹配的代价越高。.card .header .title)就应警惕;4 层以上在移动端低端机型上已有明显可测延迟card__header-title)能直接降为单层匹配,比嵌套快 2–5 倍(实测 Chromium DevTools 的 Layout 阶段耗时)data- 属性选择器(如 [data-role="title"])也比多层 class 嵌套更轻量,前提是属性值不频繁变更[class^="icon-"]:属性前缀匹配无法利用 class 索引,退化为字符串扫描:nth-child(2n) 在大列表中(>100 项)会阻塞样式计算,改用 :nth-of-type() 或显式加 class 更稳.container > <em></em>:虽然用了子选择器,但 仍在右侧,仍需遍历所有子节点@import 引入的外部 CSS 文件中的选择器,会打断浏览器的并行解析,导致样式表整体加载变慢(应改用 <link rel="stylesheet">)Highlight paint regions 和 Paint flashing,再配合 **Coverage** 面板(Cmd+Shift+P → “Coverage”)查看未使用的选择器。Force element state → 模拟 :hover 等状态,观察样式计算是否突然变慢performance.mark() + performance.measure() 包裹关键渲染流程,对比耗时差异!important 不影响匹配性能,但它会破坏层叠逻辑,间接导致更多选择器被重复声明和解析真正卡住渲染的往往不是某一行代码,而是多个“差不多可以接受”的选择器叠加后,在特定 DOM 规模和设备条件下突然击穿临界点。优化要从最常复用、层级最深、匹配范围最广的那几个开始。