我认为你的情况不适合使用 BEM,因为没有 Block 就不能使用 Element:
<div class="col-sm-6 header__login">
<div class="pull-right">
<div class="login__email pull-left">
<input type="text" id="email" placeholder="EMAIL ADDRESS">
</div>
...
</div>
</div>
您必须拥有.login 块。我会做这样的事情:
<div class="col-sm-6 header__login">
<div class="login pull-right">
<div class="login__email pull-left">
<input type="text" id="email" placeholder="EMAIL ADDRESS">
</div>
...
</div>
</div>
您对修饰符(.header__login--email 等)的假设也不正确,因为您不能在没有 Block/Element 的情况下使用 Modifier strong> 并且不能在另一个相同的 Element 中使用 Element:
<header class="header clearfix">
<div class="col-sm-6 col-xs-12">
<a href="/" class="header__logo"></a>
</div>
<div class="col-sm-6 header__login">
<div class="pull-right">
<div class="header__login header__login_email pull-left">
<input type="text" id="email" placeholder="EMAIL ADDRESS">
</div>
<div class="header__login header__login_password pull-left">
<input type="password" id="password" placeholder="PASSWORD">
</div>
<div class="header__login header__login_submit pull-left">
<button class="uppercase">Login</button>
</div>
</div>
</div>
</header>
所以,我的建议是添加.login 块,BEM 就可以了:
<header class="header clearfix">
<div class="col-sm-6 col-xs-12">
<a href="/" class="header__logo"></a>
</div>
<div class="col-sm-6 header__login">
<div class="login pull-right">
<div class="login__email pull-left">
<input type="text" id="email" placeholder="EMAIL ADDRESS">
</div>
<div class="login__password pull-left">
<input type="password" id="password" placeholder="PASSWORD">
</div>
<div class="login__submit pull-left">
<button class="uppercase">Login</button>
</div>
</div>
</div>
</header>
你也可以使用单独的块,也可以:
<header class="header clearfix">
<div class="col-sm-6 col-xs-12">
<a href="/" class="header__logo"></a>
</div>
<div class="col-sm-6 header__login">
<div class="pull-right">
<div class="login-email pull-left">
<input type="text" id="email" placeholder="EMAIL ADDRESS">
</div>
<div class="login-password pull-left">
<input type="password" id="password" placeholder="PASSWORD">
</div>
<div class="login-submit pull-left">
<button class="uppercase">Login</button>
</div>
</div>
</div>
</header>
P.S.我更喜欢original BEM name convention:
.block__element--modifier
vs
.block__element_modifier(或.block__element_modifier_value)。