可扩展、模块化CSS--样式的分类和规则(翻译文)

SMACSS is becoming one of the most useful contributions to front-end discussions in years

每一个项目代码都需要一定的组织性。如果每次都在文件末尾直接添加一个新的css样式无疑会让检索样式变得困难,并且让其他开发人员对这些文件代码功能感到困惑。所以,我们都会尽可能地让我们写出来的代码能有组织性。我希望通过阅读接下来的文章,你会在已经正在进行的工作能力中特别的关注这个问题,如果幸运的话,也许能提高你的工作能力。

你是如何进行选择使用ID选择器,class选择器,或者其他类型的选择器的?你是如何进行决定来让哪个element获得需要的样式的?又如何让你的样式代码或者说你的网站能够让人容易理解它是有组织性的?

SMACSS的核心就是分类化。通过分类css规则,在此基础上进行更好的实践。有五种种类:
1.基础
2.布局
3.模块
4.状态
5.主题

我们发现我们经常把这五种种类的样式混合写在一起。如果你想要让自己写的样式能够更好理解,无疑在这五种种类的划分规则上写是个很好的选择。
每种种类都有指导规则并且能够运用上这种规则,那么我们该如何按照这种思想去敲代码呢?

对样式进行分类,其中主要的目的是为了制造一种编程模式,这个模式能够在我们的设计中进行不断实践复制。用越少的代码进行复制,那么就越容易维护这些代码,也更一致性,当然模式必须是有利于这些实践的。

1.基础样式:是默认的,他们几乎完全单一元素选择器,但可能包括属性选择器,伪类选择器、子选择器或兄弟姐妹选择器。很多开发人员都是会有一个base.css用来修正默认的不需要样式就是一个例子,这些样式它们看起来如下所示:

html, body, form { margin: 0; padding: 0; }
input[type=text] { border: 1px solid #999; }
a { color: #039; }
a:hover { color: #03C; }

2.布局样式:把页面分成几块,布局样式一般由1个或者多个模块组成。
3.模块样式:是可复用的,就是我们设计中的一个模块的概念,可以是侧边栏,弹出框,列表栏等等
4.状态样式:是指模块和布局处在什么状态,比如侧边栏的黑色状态,按钮的被点击状态等等,状态规则要描述的是模块在不同状态下的样式是如何的。
5.主题样式:一般情况下网页都有一个主色调,就像一个会议由个主题,围绕这个主题来进行其他的讨论。(以前qq空间有更换主题的功能,就是这个概念)。

命名规则

通过以上的分类呢,命名上的约定就会有利于我们快速的理解我们写的样式是属于哪个分类,并且能够理解它在整个页面的作用。在一个大型的项目中,很可能出现样式分别放在不同的文件里头,即使如此,我们依然能通过命名约定快速找到目标样式,知道样式属于哪个文件。
我很喜欢用前缀的方式去区分布局样式,状态样式和模块样式。比如说布局样式(Layout),我会用l-来做前缀。或者使用grid-也同样可以清楚的知道这是布局样式。对应状态,就使用is-,比如说is-hiddenis-collpased。所有的这些都将使得样式代码更加易读。
模块是在项目大量用到的,在模块前面加上前缀可能就会变得没必要的冗长。所以,模块样式我们直接用模块本身名字就行。比如以下代码显示:

/* Example Module */
.example { }

/* Callout Module */
.callout { }

/* Callout Module with State */
.callout.is-collapsed { }

/* Form field module */
.field { }

/* Inline layout  */
.l-inline { }

以模块为基础的元素往往会把基础的模块缩写作为前缀,比如代码例子(example)这个模块
它的题注(caption)就用(.exm-caption)。我们一看到这个名词,就能知道这个题注是和例子这个模块有关的,也能很快找到这个元素的样式。
如果一个模块是另一个模块的变种,那么前者模块应该以后者模块作为前缀,关于子元素样式的内容将会在模块样式这章细说。
命名规则将会贯彻整篇文档内容,不要认为这些规则像教条一样必须严厉去执行,你只要像平时其他一样生活规律自然而然的去执行它。
原文地址:https://smacss.com/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • 原文地址:8 simple rules for a robust, scalable CSS architectu...
    llp要变身阅读 1,773评论 0 9
  • 姓名:张汉超 公司:东莞耀升机电有限公司 组别:4月25-27日六项精进245期学员 【日精进打卡第86天】 【知...
    张汉超阅读 154评论 0 0
  • 我去过的乌镇 文/潇璞 其实,我去乌镇并不像去别的地方那么有计划有预谋的。去乌镇,就是一时兴起,说走就走的旅行。 ...
    潇璞阅读 368评论 0 1