think-of-css
css风格
OOCSS:Object Oriented Css
- Separate structure and skin
- Separate container and content
- Avoid the descendent selector (i.e. don't use .sidebar h3)
- Avoid IDs as styling hooks
- Avoid attaching classes to elements in your stylesheet (i.e. don't do div.header or h1.title)
SMACSS:Scalable and Modular Architecture for Css
- Base (element only selector)
- Layout (id selector + layout class)
- Module (class only selector + descendant selector)
- State (class selector)
- Theme (override below rules)
- Avoid tag selectors for common elements
- Use class names as the right-most selector
ACSS:Atomic CSS
- use atomic style
- don't use concrete classname
BEM:Block Element Modifier
- use
blockname-modulename - no abstract classname
会不会有更好的风格呢?
期望:
- 便于移植
- css文件尽量精简
- 可以应对频繁改动,而不致使复杂度增高
- 和html,js解耦
- 表示状态更清晰
组件化css
听起来很像BEM?是有些相似,但Block和Components的概念还是有所不同。举个例子:
// BEM
.user-block-hd {
border:1px solid #333;
}
.user-block-button {
background-color:#ccc;
}
.user-block-button-success {
background-color:#eee;
}
// 组件化
.user-block .hd {
border:1px solid #333;
}
.user-block .button {
background-color:#ccc;
}
.user-block .button[data-status="success"] {
background-color:#eee;
}
简单的来说:
- 将每个组件进行抽象化,在需要改动的项目中,覆盖样式
- 将交互状态放在形如
[data-status]这样的选择器中 - 每个组件对应一个默认的基础可用样式,可用直接
import使用 - 页面布局与组件分开,组件更关注细节
组件化css面临的问题:
- 容易被覆盖(不知道已经存在该组件,所以覆盖)
- 生成的css文件并不精简(因为有
[data-status]这样的选择器) - js挂载事件容易重复(组件的交互逻辑封装在组件js内时)
- 暂时想到这么多...
解决方案:
- 容易被覆盖:组件平台化,推广通用组件
- css文件不精简:暂时没有解决方案 囧
- js挂载事件容易重复:使用
react最佳
写于 2015.01.27继续阅读 ↗