BEM html命名约定

时间:2019-04-17 08:10:22

标签: html naming-conventions bem

过去几天,我一直在尝试使用BEM,但是对于如何遵循命名约定感到困惑。

我知道您先命名一个块,然后根据需要添加元素并带有双下划线。但是有时候这几乎没有道理。

让我们以此为例。

<form class="search-form">
    <!-- `input` element in the `search-form` block -->
    <input class="search-form__input">

    <!-- `button` element in the `search-form` block -->
    <button class="search-form__button">Search</button>
</form>

来源:https://en.bem.info/methodology/quick-start/

让我们假设,我已经有一些按BEM命名约定编码的按钮。像

<button class="btn btn--secondary">Search</button>

问题:如果我将表单中的search-form__button替换为第二个代码btn btn,那么这是否意味着我违反了规则?

第二,有人可以使用BEM约定在下面命名此块为您提供帮助吗?

<div class="profile-card">
    <div class="profile-card-header"></div>
    <div class="profile-pic"><img src="images/headshot.JPG"> </div>
    <div class="content">
        <div class="main"> <a class="header">Donald Trump</a>
            <div class="meta">President, USA</div>
            <div class="location">Somehwere in USA</div>
        </div>
        <p>I am the President of US of A and its huge</p>
    </div>
    <div class="footer">
        <div class="btn-group" role="group" aria-label="...">
         <button class="btn">hi</button>
    </div>
    </div>
</div>

我不是在要求帮助的第二个程序段添加代码,但是请相信我,我尝试过,每次它最终成为意大利面时,都会造成混乱和浪费,我最终删除了所有内容。如果您能提供帮助,将不胜感激

1 个答案:

答案 0 :(得分:3)

如果您嵌套BEM块,这并没有违反规则,这意味着要做到这一点,但是您必须仔细做。

最好的解决方案是创建一个欢迎子块的元素,我喜欢称其为“巢”。该嵌套应处理位置,边距和对齐方式。因此,您不必修改子块(btn)即可处理新的上下文。

<form class="search-form">
    <!-- `input` element in the `search-form` block -->
    <input class="search-form__input">

    <!-- `button` element in the `search-form` block, called nest -->
    <div class="search-form__button>

        <!-- new button block -->
        <button class="btn btn--secondary">Search</button>
    </div>
</form>

关于您的第二个问题,这是我的猜测:

<div class="profile-card">
    <div class="profile-card__header"></div>
    <div class="profile-card__pic">
      <img src="images/headshot.JPG">
    </div>
    <div class="profile-card__content">
        <div class="profile-card__main">
            <a class="profile-card__name">Donald Trump</a>
            <div class="profile-card__role">President, USA</div>
            <div class="profile-card__location">Somehwere in USA</div>
        </div>
        <p>I am the President of US of A and its huge</p>
    </div>
    <div class="profile-card__footer">
        <div class="btn-group" role="group" aria-label="...">
            <button class="btn">hi</button>
        </div>
    </div>
</div>

您看到profile-card__footer成为子块(.btn-group)的嵌套。