讲师中心 微信公众号
AI工具推荐 视频效率加速

CSS如何处理BEM中Block嵌套Block的情况_明确组件边界与包含关系

轻浩酱_8417

轻浩酱_8417

发布时间:2026-05-05 20:13:59

|

515人浏览过

|

来源于php中文网

原创

BEM中Block嵌套时类名不带父级前缀,因Block间是平级复用关系而非父子继承;如header内search-form应写为<header class="header"><form class="search-form">,而非header__search-form。

css如何处理bem中block嵌套block的情况_明确组件边界与包含关系

Block嵌套Block时,类名要不要带父级前缀

不用。BEM中Block之间是平级复用关系,不是父子样式继承关系。比如header里放search-form,正确写法是<header class="header"><form class="search-form">,而不是header__search-form。

常见错误现象:dashboard__user-card__avatar——这其实是三个独立Block:dashboard、user-card、avatar,强行加前缀只会让类名膨胀、复用失效。

  • 判断依据:这个子结构是否在别处(如弹窗、侧边栏)也单独出现过?是 → 它就是独立Block
  • 它有没有自己的状态(如is-loading)、事件(如onSubmit)、或需要独立动画控制?有 → 不该被父Block“吞掉”
  • 它的样式是否依赖父Block的具体实现?比如user-card在dashboard里左对齐,在profile页里居中?那说明它本就不该被dashboard定义

多个Block共存一个DOM节点时怎么写class

用BEM官方支持的mix(混合)语法:一个元素可以同时携带多个Block或Element的类名。这是合法且推荐的做法,不是hack。

例如卡片内有个状态徽标,既属于card的视觉流,又需在别处复用:

立即学习“前端免费学习笔记(深入)”;

<div class="card status-badge status-badge--online">

这里card和status-badge都是Block,各自维护样式与逻辑,不耦合。

CSS婚礼策划服务机构宣传网站模板
CSS婚礼策划服务机构宣传网站模板

CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载
  • 避免写成card__status-badge——这会让status-badge失去跨上下文复用能力
  • 如果status-badge在card里有特殊尺寸或边距,应通过card--compact .status-badge这类组合选择器微调,而非改命名
  • mix不等于无序堆砌:只混真正语义相关的Block,比如button button--primary user-action-button就容易混乱,应收敛为user-action-button user-action-button--primary

嵌套太深但又不想拆出新Block怎么办

优先重构HTML结构,而不是妥协命名。BEM允许Block嵌套任意层级,但不鼓励靠DOM深度表达逻辑关系。

真实场景中,后台权限菜单常出现nav nav__item nav__item__link nav__item__link__icon这种链式结构——这不是BEM,是选择器失控。

  • 把nav__item__link__icon改为nav__item-icon:Element名只描述自身角色,不体现路径
  • 若图标行为差异大(比如在nav里是折叠箭头,在table-row里是操作按钮),那就该拆成collapse-icon和action-icon两个Block
  • SCSS里禁用&__item &__link &__icon这种多层嵌套写法,它会编译出后代选择器,破坏BEM作用域隔离

React组件里怎么安全实现Block嵌套

每个组件只声明自己的Block名,不拼接父级。用常量统一管理,避免字符串散落。

错误写法:className={`header__${subComponent}`}——subComponent值一变,CSS文件里就得同步加新类,不可维护。

正确做法:

const BLOCK = 'user-profile';<br>return <div className={BLOCK}><br>  <Avatar className={`${BLOCK}__avatar`} /><br>  <Bio className={`${BLOCK}__bio`} /><br></div>;
  • Avatar和Bio组件内部各自定义const BLOCK = 'avatar',不感知外层user-profile
  • JSX里只用${BLOCK}__avatar这类Element引用,Modifier由子组件自己控制(如avatar--loading)
  • 禁止在父组件里给子组件加user-profile__avatar--large这种跨Block Modifier,状态归属必须清晰
BEM中Block嵌套最易被忽略的一点:不是“能不能嵌”,而是“要不要让它承担样式责任”。一旦你开始为某个子结构写.parent .child .grandchild,就已经在用DOM结构代替设计决策了。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

3229

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2328

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

1260

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1218

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

1356

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2198

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

3520

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

16115

2023.09.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6万人学习

CSS教程
CSS教程

共754课时 | 97.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn