You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// ListingCard.jsxfunctionListingCard(){return(<articleclass="ListingCard ListingCard--featured"><h1class="ListingCard__title">Adorable 2BR in the sunny Mission</h1><divclass="ListingCard__content"><p>Vestibulum id ligula porta felis euismod semper.</p></div></article>);}
Airbnb CSS / Sass编码规范
这可能是最合理的编写CSS和Sass代码的方式了
译自:https://github.com/airbnb/css
目录
术语
规则声明
“规则声明”指的是赋予某个选择器(或一组选择器)一组属性。例如:
选择器
在规则声明里,“选择器”决定了其定下的属性会用来设置DOM树中的哪一个(或多个)元素。选择器可以匹配HTML元素、元素的
class
、ID以及元素的其它属性,下面是选择器示例:属性
属性是用来给被选中的元素定义样式规则的,它是键-值对,一个规则声明可以包含一个或多个属性声明,例如:
⬆ 返回目录
CSS
格式化
-
而不是驼峰方式{
前空格:
之后空格,而不是之前}
单独占一行糟糕的
良好的
注释
//
),而不是块注释z-index
OOCSS和BEM
我们推荐组合OOCSS和BEM,理由如下:
OOCSS,是“Object Oriented CSS”(面向对象CSS),是一种编写CSS的方式,它鼓励你将样式想象成一个“对象”的集合,这种可复用的、可重复的代码片段就可以在整个网站中独立使用。
参考:
BEM,“Block-Element-Modifier”(块元素修饰器)的缩写,是HTML和CSS中类的 命名约定。最初由Yandex发明,考虑了大型代码和扩展性问题,可以作为实施OOCSS的指导方案。
参考:
我们推荐一个使用PascalCased“块”的BEM变体,当与组件(如:React)一起使用时很有用。下划线和短划线仍然用于修饰符和子元素。
示例
.ListingCard
是“块”,代表更高级别的组件。.ListingCard__title
是“元素”,代表.ListingCard
的后代,它组成了块。.ListingCard--featured
是“修饰器”,代表块.ListingCard
的不同状态或变化。ID选择器
尽管在CSS里可以使用ID来选中一个元素,但是它很反模式。ID选择器会给你的规则声明引入不必要的高级别特殊性(specificity),而且它们是无法复用的。
想了解更多这个主题,可以阅读CSS Wizardry's article中关于特殊性(specificity)的处理。
JavaScript钩子
避免把同一个类绑定在CSS和JS代码中,如果这么做了,那开发者在重构代码时,除了要浪费时间去交叉寻找每一个要修改的类,甚至可能会因为担心影响功能而不敢轻易做修改。
我们推荐创建专为JS绑定而使用的类,以
.js-
作为前缀:边框
使用
0
而不是none
来指明某个样式没有边框。糟糕的
良好的
⬆返回目录
Sass
语法
.scss
语法,而不是原生的.sass
语法@include
声明属性声明顺序
属性声明
列出非
@include
或嵌套选择器的所有标准属性声明@include
声明@include
放在最后读起来会比较容易。嵌套选择器
嵌套选择器,如果必要的话,放在最后面,规则声明和嵌套选择器之间空行,相邻的嵌套选择器之间也是。将上述规则也用在嵌套的选择器上。
变量
使用短划线分割(比如
$my-variable
),而不是驼峰或snake_cased(译者注:下划线)。如果变量是只用于一个文件内,那么变量名里加一个下划线前缀(比如$_my-variable
)是可以接受的。Mixins
Mixins可以用来让你的代码遵循DRY原则(Don't Repeat Yourself),可以让代码更清晰、抽象复杂度(类似于封装良好命名的函数)。Mixins可以不接受参数,但是需要注意,如果你不压缩payload(比如gzip,译者注:这里可能说的是打包编译时的配置),最终的样式文件可能会有不必要的重复代码。
扩展指令
@extend
应该被避免,它不够直观而且还有潜在风险,尤其当与嵌套选择器一起使用时。及时扩展最顶层的选择器也可能引入问题,如果选择器的顺序可以改变的话(比如在不同的文件中,而且加载顺序有变化)。@extend
的优点,gzip都可以覆盖到,而且你可以配合使用minxins来DRY你的代码。嵌套选择器
选择器嵌套不要超过三层!
如果你的选择器嵌套的很深,那么你很可能在这样编写CSS代码:
再次强调:不要嵌套ID选择器!
如果你一定要使用ID选择器(当然还是建议你最好不要用),它们都不应该被嵌套。如果你此时正在这样做,那么你可能需要重新审视一下你的代码,或者搞清楚为什么需要这么高优先级(的选择器)。如果你编写了架构良好的HTML和CSS,你可能从来都不需要使用ID选择器甚至嵌套它。
⬆返回目录
The text was updated successfully, but these errors were encountered: