良好的css架构:
- 预测 :predictable
- 复用:reusable
- 维护:maintainable
- 延展: scalable
CSS Methodology
OOCSS
Object Oriented CSS
- 两大原则:结构与外观分离,容器与内容分离
SMACSS:
Scalable & Modular Architecture for css
rule:
- 将结构分类,命名规则,css与html分离
- Base,Layout,Module,State,Theme
BASE
- css Reset,css Normalize ,no need to use !important
Layout
- Header,sidebar,content
Module
- 页面上可单独存在并且可重复使用的原件
- 定义模块时应避免使用id或标记名称做选择器
- 子模块以原模块名加dash(-)作为名称:.module-title,.module-header,.module-body
state
- 与layout,module搭配
- 表示layout或module的状态变化
- 由class定义
-
命名规则是。is-*开头
.is-hidden{ display: none; }
.is-error{ font-weight: 700; color: #f00; }
Theme
- 定义网站主视觉
- 类似Layout,但影响的是网站整体视觉的变化
- class名称通常以.theme-*做开头
BEM
Block,Element,Modifier
.{block}__{element}
.{block}__{element}--{modifier}
.{block}--{modifier}
Block
- 在页面上独立存在并可重复使用的元件
- 如同SMACSS的Module,Layout
- 每个Block都是独立存在的
Element
- 为Block的一部分
- 无法独立于Block之外
- 有些Block可能没有Element
Modifier
- 用来定义Block或Element的状态或属性
- 类似SMACSS的state
- 同一个Block或Element可以允许多组modifier同时存在