BEM样式失效首要排查类名是否100%匹配DOM结构,浏览器只认实际输出的字符串,需确认无空格、大小写混用、下划线或短横线缺失;其次检查CSS解析错误、权重覆盖及构建缓存干扰。
BEM样式失效的第一反应不是优先级,而是类名根本没挂上。浏览器不会“猜”你本意想写 card__header--large,它只认你实际输出的字符串。
block__element--modifier 格式,没有多空格、大小写混用(Card__header ≠ card__header)、漏掉双下划线或短横线echo 'card__body' . ($active ? '--active' : '') 少了个空格,结果变成 card__body--active → 实际是 card__body--active(合法),但CSS里写的是 .card__body--active(正确),而你误写成 .card__body --active(带空格,完全无效):class="{ 'card__footer': show }" 有效,但 :class="{ card__footer: show }"(未加引号)在某些版本会报错或忽略BEM本意是降低嵌套、提升可预测性,但一旦混用后代选择器或ID,权重就失控了。别信“我只写了 .btn--primary,不可能被覆盖”——#modal .btn--primary 权重就是碾压级。
background-color),看哪条规则被划掉、哪条胜出;点击带小箭头的样式行,直接跳转源码定位冲突来源.card__body p 这种后代选择器——它破坏BEM原子性,且权重比 .card__body-text 高,还让调试时无法直击归属/deep/ 或 ::v-deep,但目标选择器仍需严格BEM命名:.my-comp /deep/ .btn--danger,而不是 .my-comp /deep/ .btn-danger
Network面板显示 style.css 状态码200,不代表里面每条BEM规则都生效。一个括号没闭合、一个分号漏写,就会让其后所有规则静默失效。
.nav__link--active)。如果整个规则块完全不出现,大概率是前面某条规则语法错误导致后续解析中断; 是否为英文分号、: 是否为英文冒号、{} 是否成对、媒体查询是否闭合(@media (max-width: 768px) { ... } 少了 } 会让后面全部失效)color: var(--text-primary); 但定义写成 --text-primeary(拼错),该声明值为 invalid,整条规则不报错但不生效开发时改了 .modal__close--hover,页面却没变——可能不是代码问题,而是构建产物或缓存卡住了真实输出。
link href是否指向最新hash文件;若用 import './index.module.css',确保文件名含 .module.css 后缀触发CSS ModulesDisable cache,再刷新;或者临时把CSS链接加时间戳:href="/css/app.css?v=1.0.5"
include 或 file_get_contents 直接输出CSS内容?这是致命错误——服务器返回的是 text/html MIME类型,浏览器当HTML解析,样式表完全不生效