css 为什么BEM经常使用两个下划线而不是一个修饰符?

zlhcx6iw  于 2023-08-09  发布在  其他
关注(0)|答案(6)|浏览(113)

在边界元法中,我知道对于修饰符,两个破折号是有意义的,这样你就可以区分my-block-my-modifiermy-block--my-modifier中的修饰符。
但是为什么使用block__element而不是block_element

nbnkbykc

nbnkbykc1#

双下划线用于定义块的子元素。
即:

<nav class="main-nav">
    <a class="main-nav__item" href="#">Text</a>
</nav>

字符串
其中main-nav是一个块,main-nav__item是一个子元素。
这样做是因为有些人可能会像这样命名他们的块main_nav,这将与像这样的单下划线产生混淆:main_nav_item
因此,双下划线将澄清这样的内容:main_nav__item的值。

dxxyhpgq

dxxyhpgq2#

我要去第二@Imran Bughio的答案,但我正试图进一步澄清这个问题。
standard BEM style中,单个下划线被保留用于 * 修饰符 *。此外,它们通常表示键/值对的组合。例如:

.block_align_vertical
.block_align_horizontal
.block__element_size_big
.block__element_size_small

字符串
这与inuit.css支持的 modified BEM语法形成对比,后者是布尔型的。

.block--vertical
.block--horizontal
.block__element--big
.block__element--small


根据我的经验,在使用修改后的语法时,您很快就会遇到表达式限制。例如:If you would write

.block--align-vertical
.block--align-horizontal
.block__element--size-big
.block__element--size-small


键/值关系将不是唯一的,如果您试图描述一个键,如background-attachment,这将导致

.block__element--background-attachment-fixed


另一个额外的好处是,您可以使用基于 * 标准 * 命名约定的库,以提高工作流程中的生产力:

mi7gmzs6

mi7gmzs63#

另外值得一提的是,BEM语法并不是强加给我们的,如果您发现另一种语法更具可读性,那么无论如何都要使用它。重要的是一致性,确保其他开发人员使用相同的语法。
Nicolas Gallagher在SUIT CSS中使用了另一种语法。它使用以下语法。

ComponentName
ComponentName--modifierName
ComponentName-elementName
ComponentName.is-stateOfComponent

字符串
你可以在这里阅读更多SUIT CSS naming conventions

vbkedwbf

vbkedwbf4#

因为其块可以用连字符或下划线分隔,例如:

.site-search {} /* Block */
.site-search__field {} /* Element */
.site-search--full {} /* Modifier */

字符串
或者是

.site_search {} /* Block */
.site_search__field {} /* Element */
.site_search--full {} /* Modifier */

drnojrws

drnojrws5#

根据BEM命名约定,单下划线有两种其他用法,
1.修改器名称与块或元素名称之间用一个下划线()分隔。
1.修饰符值与修饰符名称用一个下划线(
)分隔。
因此,将元素名称与块名称分开是通过双下划线完成的。
元素名称与块名称之间用双下划线(__)分隔。

ipakzgxi

ipakzgxi6#

**基本概念:**block-name__element-name_modifier-name
详细信息:BEM (Block, Element, Modifier)

相关问题