【发布时间】:2019-02-07 16:04:43
【问题描述】:
我是 CSS 的老手,但最近决定冒险开始使用 BEM。在大多数情况下,我理解使用这种扁平系统的价值,避免过于具体的选择器等......
我的问题是,以下方法是否正确。从技术上讲,它有效,但似乎也很脆弱:
.badge {
/* additional declarations */
background: rgba(0, 0, 0, 0.2);
}
.badge--error {
background: red;
}
.badge--success {
background: green;
}
这很好用,因为 CSS 的级联特性。所以默认背景被修饰符成功覆盖了。但是如果我把修饰符放在初始声明之前,修饰符就会被忽略(因为相同的特异性)。
这样写 BEM 有什么问题吗?如果要使用修饰符覆盖,在块中声明 background 之类的默认值是否被认为是不好的做法?在这种情况下,默认的 background 是否应该存在于 .badge--default 修饰符中?或者我是否以真正的 BEM 方式编写了这个,而 BEM 实际上依赖 CSS 的级联来保持平坦?
【问题讨论】:
-
没错,你不应该在之前主Block使用扩展、修饰符。没有什么脆弱的。这是 CSS 特异性的工作方式。全局变量位于 CSS 之上,覆盖位于底部。在当今世界,如果您使用 CSS 预处理器,它可以帮助您更好地构建模型。请参阅stackoverflow.com/a/20811902/383904中的 SCSS 部分
-
感谢@RokoC.Buljan,此评论(以及提供的链接)回答了我的问题。
-
不客气