如果你写过许多 JavaScript 代码的话,那么使用驼峰式来写变量就是家常便饭了:
var redBox = document.getElementById('...')
很不错,对不?
问题是这种形式的命名不是很适合 CSS。
所以不要这样做:
.redBox { border: 1px solid red; }
相反,你要这样做:
.red-box { border: 1px solid red }
这是一个非常标准的 CSS 命名约定。可以说这样写更加可读一些。
这样也能和 CSS 属性的名称保持和谐。
// Correct .some-class { font-weight: 10em }// Wrong .some-class { fontWeight: 10em }
如果我们有不同头部大小的火柴人,又该如何呢?
这一次是元素被修改了。要记住,元素是整个块中包含的一个子组件。
.stick-man 表示的是整个块 , 而 .stick-man__head 就是元素了。
就跟你在上面看到的示例一样,两个分隔符或许也可以像下面这样使用:
.stick-man__head--small { } .stick-man__head--big { }
再次注意上述示例中双分割符是如何使用的。这里是被用来表示一个修饰符了。
现在你已经掌握了吧。
这些就是 BEM 命名约定如何使用的基础知识了。
我个人倾向于在简单的项目中只使用分隔符,而更加复杂的用户界面再去使用 BEM。
你可以从这里更多地去了解 BEM。
今天是 John 第一天上班。
他接手了如下一段 HTML 代码:
<div class="siteNavigation"> </div>
John 已经阅读了本文,所以意识到这可能并非在 CSS 命名的最佳方式。所以他立马就对代码库进行了重构,像下面这样:
<div class="site-navigation"> </div>
瞧着挺好,对不?
John 还不知道,他把代码库搞乱了。
怎么回事?
在 JavaScript 代码的某些地方是跟之前的类名 siteNavigation 存在关系的:
//the Javasript code const nav = document.querySelector('.siteNavigation')
所以一旦修改了类名, nav 变量就会变成 undefined 的。
好可恶啊。
为了能防止像这样的情况发生,开发者想出了各种策略。
一种缓解这类问题的办法就是用像 js-* 这样的类名,来表明其与问题 DOM 元素的关系。
例如:
<div class="site-navigation js-site-navigation"> </div>
而在 JavaScript 代码中则是这样写:
//the Javasript code const nav = document.querySelector('.js-site-navigation')
作为一项约定,任何看到 js-site-navigation 这个类名的人都应该明白它跟 JavaScript 代码中的 DOM 元素是有关系的。
评论删除后,数据将无法恢复
评论(0)