Scalable and Modular Architecture for CSS 小结

Scalable and Modula Architecture for CSS 确实是一本很好的书。明白的说明了很多我一直以来的疑问,把写css过程中遇到的问题做了清晰的解构。很有收获。

这里总结一下要点,方便以后在自己的项目中查看和运用。

CSS的结构:

1. Base:对所有html element通用的样式,比如reset.css或者a等element的默认样式。

2. Layout:和页面整体结构有关的样式。比如.header .footer .sidebar等等。

3. Module:页面中的内容模块。比如.post .article等等。

4. State:状态信息。比如.is-hidden .is-expanded .is-active等等

5. Theme:主题。如果页面同时支持多个主题,那么其他主题的module和state模块显示在这里。

命名规则:

1. Base:只包含html element,不要class或者id。

2. Layout:以layout-开头,比如.layout-header .layout-grid

3. Module:没有指定开头,就以模块本身命名。但是模块的子class要包含模块名。比如.module, .module-title, .module-text

4. State:以is-开头。

5. Theme:主题。前面几个部分的不同主题。以.theme-开头。

注意事项:

1. Base:

  • 最default最general的设定,不要包含!important。
  • 最好指定body的background。
  • 在所有项目中使用基本相同的base。
  • 尽量只用base做reset。不要牵扯太多module的东西。比如table button等属于module,不要把大块代码写到base里。

2. Layout:

  • 只包含和布局相关的element以及attribute。尽量简洁抽象。

3. Module:

  • 不要包含layout中的class。要用自己的class来表达同一个模块各种不同的布局。比如.pod, .pod-constrained, .pod-callout
  • 可以把icon做成一个单独的module,这样会为编码的灵活性带来诸多好处。比如.ico .ico-inbox .ico-drafts。(和css sprites一起用)

4. State:

  • 表示layout或者module的状态。
  • javascript通过调整state的class,来控制页面显示。
  • 可以包含!important。
  • media query也算是state的一种。
  • 状态命名的时候,尽量和module独立,比如.btn .is-pressed要好于.btn .btn-pressed。

5. Theme:nothing special

6. 其他注意事项:

  • 为了效率,除了在base里,尽量不要用element selector。尤其不要放在selector的最右侧。
  • 为了效率,一个selector的元素个数应该尽可能的少。
  • 为了效率,尽可能的用 > 的css selector来缩小和指定选择的范围


Preprocessors

有节制的使用sass一类的preprocessor可以让编码的逻辑变的更清晰,让编码速度更快。

要注意,使用的时候,不要让生成的代码违背上面的基本原则。

文件组织:

+-layout/

| +-grid.scss

| +-alternate.scss

+-module/

| +-callout.scss

| +-bookmarks.scss

| +-btn.scss

| +-btn-compose.scss

+-base.scss

+-states.scss

+-site-settings.scss

+-mixins.scss

master file:
@import
"site-settings",
"mixins",
"base",
"states",
"layout/grid",
"module/btn",
"module/bookmarks",
"module/callout";