在BEM规范中,h1块内的span属于元素还是修饰符?哪种写法正确?
结论
- 你的初步判断正确:将h1定义为BEM块(Block)
heading时,内部嵌套的span属于该块的元素(Element) - 符合BEM规范的是代码片段1,双下划线
__是块与元素的专用连接符,双连字符--是修饰符(Modifier)的专用连接符。
BEM命名规则对应说明
BEM三类核心实体的命名规则有明确区分:
- 块(Block):独立可复用的功能单元,命名为纯语义字符,无特殊连接符,例:
heading - 元素(Element):块的内部组成部分,无法脱离块独立使用,命名规则为
块名__元素名,使用双下划线连接。你示例中的主标题、副标题是heading块不可拆分的组成部分,因此heading__main、heading__sub的写法完全符合规范。 - 修饰符(Modifier):用于描述块/元素的状态、外观、行为变体,命名规则为
块名/元素名--修饰符名,使用双连字符连接。例如heading--center(居中的heading块)、heading__main--bold(加粗的main元素)这类场景才适用双连字符。
代码片段2的问题
代码片段2使用双连字符的写法,相当于将main、sub定义为heading块的修饰符,不符合实际业务逻辑:修饰符是对块本身属性的修改,而两个span是块内部的独立组成部分,不是对heading块的样式变体定义,因此该写法不符合BEM规范。
内容的提问来源于stack exchange,提问作者Mostafizur Rahman
相关产品推荐
相关产品推荐

