过去几天,我一直在尝试使用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>
我不是在要求帮助的第二个程序段添加代码,但是请相信我,我尝试过,每次它最终成为意大利面时,都会造成混乱和浪费,我最终删除了所有内容。如果您能提供帮助,将不胜感激
答案 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
)的嵌套。