BEM的核心是让类名自带语义边界,不依赖DOM层级,每个类名只描述单一职责,严格遵循block__element--modifier三段式结构,确保组件自治与可复用性。为什么改HTML就崩样式?BEM不是加前缀那么简单根本原因是传统CSS选择器过度依赖DOM层级,比如 .sidebar .item a:hover 这种写法,一旦把 a 换成 button,或者把 .item 提到 .sidebar 外层,样式立刻失效。BEM要解决的不是"怎么起名",而是让每个类名自带语义边界,不靠父容器、不靠兄弟关系、不靠标签类型。block__element--modifier 这套命名到底怎么落地关键在「每个类名只描述一个职责」,且三段式结构必须严格对应组件层级。常见错误是把状态(如 is-active)和视觉变体(如 --large)混在同一层,或者给 __element 套嵌套选择器。block 必须是独立可复用的组件,比如 header、card、form-field__element 只能是 block 的直属子内容,不能跨级,例如 card__title 合法,card__title__icon 违规(应拆成 card__title-icon 或新 block)--modifier 只改变当前 block 或 __element 的表现,不触发布局重排,比如 button--primary、nav-item--disabled绝对不用 div.card__title 这类标签+类组合,所有样式只绑定类名遇到嵌套组件时,BEM怎么避免类名爆炸真实页面里常有 card 里套 list 再套 avatar,如果硬套三层BEM,类名会变成 card__content-list__item-avatar ------ 这已经违背BEM初衷。正确做法是承认「组件自治」:每个子组件保持自己完整的BEM结构。card 内部用 <div class="list"></div>,而不是 <div class="card__list"></div>子组件的样式完全独立,list 的CSS文件不引用 card 的任何变量或选择器若需微调(如 card 里 list 的间距),用 modifier 控制: <div class="list list--in-card"></div>,而非加深选择器工具链上可用 PostCSS 插件(如 postcss-bem)自动补全,但别依赖它生成嵌套类名CSS-in-JS 或 Tailwind 下,BEM还有没有意义有,但作用点变了。BEM在传统CSS里防样式污染,在现代方案里更多是统一团队对「什么算一个UI单元」的认知。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
Omics Pro16 小时前
3种蛋白结构输入方式!已申报欧洲发明专利KobeSacre16 小时前
JVM ZGCPsycho_MrZhang17 小时前
Codex 高效开发协作手册HappyAcmen17 小时前
1.pdfplumber安装,PDF文字提取弹简特17 小时前
【零基础学Python-收尾】10-Python第三方库的安装介绍itfallrain17 小时前
Spring 构造器循环依赖排查:@RequiredArgsConstructor + @Lazy 到底有没有生效Database_Cool_17 小时前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案小草cys17 小时前
NVIDIA 驱动(550版本)成功安装后安装支持 GPU 加速的 PyTorchSilentSamsara17 小时前
Python 微服务全链路:gRPC + 链路追踪 + 服务网格接入Omics Pro18 小时前
「自兹以往」动物肠道微生物组