CSS样式覆盖由选择器特异性(specificity)和加载顺序共同决定,而非简单“后写生效”;特异性值如0,1,1,1越大优先级越高,行内样式权重最高,!important慎用,推荐通过更精准选择器提升权重。
样式被覆盖,核心是CSS优先级(specificity)和加载顺序在起作用。不是简单“谁写在后面谁生效”,而是浏览器按规则逐条比对选择器权重后决定最终样式。
CSS不是按文件先后,而是按选择器“有多具体”来判断谁赢。比如:
.header .nav a(类+类+标签)比 a(纯标签)权重大得多#menu li.active(ID+标签+类)通常压倒 .nav-list li(类+标签)style="color: red" 权重最高,外部CSS很难覆盖它(除非用 !important)可用浏览器开发者工具(F12 → Elements → 右侧Styles)查看每条样式是否被划掉,以及旁边显示的“specificity值”(如 0,1,1,1),数值越大越优先。
引入的是外部CSS文件, 是页面内的样式块。它们都属于“常规样式表”,优先级由以下因素共同决定:
写在 末尾,通常比早
引入的 更晚解析,因此更容易“胜出”注意:把 放在 底部或用 defer 加载JS时动态插入,可能导致样式闪烁或失效,不推荐。
避免滥用 !important,优先用更精准的选择器提升权重:
.page-main .btn 替代单独的 .btn
button[type="submit"].primary
#user-form .input-field
!important 规则)干扰快速定位覆盖源:
标签(右键 → “Disable”),观察样式是否恢复不复杂但容易忽略