【问题标题】:BEM concept in CSSCSS中的BEM概念
【发布时间】:2015-11-16 21:54:40
【问题描述】:

我最近玩过 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

【问题讨论】:

    标签: html css twitter-bootstrap bem


    【解决方案1】:

    我认为你的情况不适合使用 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)。

    【讨论】:

      【解决方案2】:

      对于此约定的新手,块、元素、修饰符方法通常称为 BEM)是一种流行的命名约定用于HTMLCSS 中的类。其主要目标是帮助开发人员更好地理解给定项目中 HTMLCSS 之间的关系。

      你在正确的轨道上......

      对于我们使用的依赖项 __

      /* Element that depends upon the block */ 
      .btn__price {}
      

      对于我们使用的修饰符 --

      /* Modifier that changes the style of the block */
      .btn--orange {} 
      .btn--big {}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-07
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 2016-09-21
        相关资源
        最近更新 更多