我最近玩过BEM语法,我对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="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__logo
和.header__login
并且.header__login
内部使用了单独的块.login__email
。
所以我的问题是我是否正确使用BEM概念,或者我的课程应该像:
.header__login--email
.header__login--passowrd
.header__login--submit
答案 0 :(得分:1)
对于那些刚接触此约定的人, 块,元素,修饰符方法 (通常称为BEM )是一种流行的命名约定对于HTML
和CSS
中的课程。其主要目标是帮助开发人员更好地理解 HTML 和 CSS 之间的关系给定项目。
你走在正确的轨道上......
对于我们使用的依赖项 __
/* Element that depends upon the block */
.btn__price {}
我们使用的修饰符 --
/* Modifier that changes the style of the block */
.btn--orange {}
.btn--big {}
答案 1 :(得分:1)
我认为您的案例不适合BEM使用,因为您不能使用元素而不使用阻止:
<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
等)的假设也不正确,因为您不能使用修饰符而不使用阻止 / 元素并且无法在另一个元素中使用元素:
<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
)。