【问题标题】:BEM: adding modifier to already existed modifierBEM:将修饰符添加到已存在的修饰符
【发布时间】:2019-07-11 20:04:50
【问题描述】:

当我使用 BEM 时,我被简单的场景弄糊涂了。 示例中有一个基本按钮:

.button {
    // styles for button
}

及其具有更具体样式的修饰符:

.button.button_run {
    // additional styles for this type of button
    // i.e. custom width and height
}

有一刻我意识到我需要button_run 的修饰符,让我们将其命名为button_run_pressed:

.button_run_pressed {
    // more styles, i.e. darker background color
}

问题在于,根据 BEM 约定,像我在上面 button_run_pressed 所做的那样命名最后一个元素是不正确的。但我只需要为“运行”按钮添加“按下”样式,而不是通过编写 button_pressed 之类的类和混合修饰符 button button_run button_pressed 来添加所有按钮。

我应该如何重构我的代码以匹配 BEM 约定?

【问题讨论】:

    标签: css less bem


    【解决方案1】:

    首先,名称应为.block--modifier 或.button--run

    如果您希望它仅适用于修饰符 run 和 press,则应将其命名为

    .button.button--run.button--pressed

    希望有帮助

    【讨论】:

    • Khm...为什么必须用双连字符来命名修饰符?正如我在官方 BEM 网站 (en.bem.info/methodology/quick-start) 上看到的,他们使用单下划线作为修饰符?
    • 哦,真的,有不同的名称样式。好的,很清楚:)
    【解决方案2】:

    根据http://getbem.com/naming/,修饰符类以两个连字符 (--) 开头。所以.button 的修饰符应该是这样的

    .button--modifier { /* ... */ }
    

    在您的情况下,我建议选择以下名称:

    .button {}
    .button--run {}
    .button--run-pressed {}
    

    请注意,我还将修饰符类与块类解耦,这更符合 BEM 规则。您希望避免创建依赖他人工作的类。

    由于您在帖子中添加了less 作为标签,这就是它在less 或scss 中的外观:

    .button {
        // button styles
    
        &--run {
            // modified styles
        }
    
        &--run-pressed {
            // more modifiers
        }
    }
    

    这将导致我在上面写的类名

    【讨论】:

    • 好的,谢谢。这样的区别真的很有意义。我也想过这种方式……但是您可能知道为什么修饰符应该与双连字符一起使用吗?当我回复@Nguyen Phong Thien 时,我在en.bem.info/methodology/css 上看到了另一个“规则”。它可能已经过时了吗?
    • 这只是一个不同的命名约定,真的,没有别的。 BEM 只是一个概念,而不是关于如何命名类的绝对规则。因此,我只能推测为什么在getbem.com/naming 上你会找到双连字符版本。也许更好的可读性?只需查看下划线和连字符,即可轻松区分 block、block__element、block--modifier 和 block__element--modifier。
    猜你喜欢
    • 2018-10-19
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2017-10-04
    • 2015-11-10
    • 2021-11-18
    • 2015-10-09
    相关资源
    最近更新 更多