└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | Douban CSS Code Guideline
2 | ===================
3 |
4 | 1. CSS浏览器支持标准
5 | -------------------
6 |
7 |
8 | | WinXP | Win7 | OS X
9 | |
IE9 | B | B |
10 | |
IE8 | A | A |
11 | |
IE7 | B | B |
12 | |
IE6 | B | B |
13 | |
Chrome16 | A | A | A
14 | |
Chrome14 | A | A | A
15 | |
Firefox10 | A | A | A
16 | |
Firefox9 | A | A | A
17 | |
Safari | B | B | B
18 | |
Opera | C | C | C
19 | |
20 |
21 | (注:根据2012年4月数据整理)
22 |
23 | * A级-交互和视觉完全符全设计的要求
24 | * B级-视觉上允许有所差异,但不破坏页面的整体效果
25 | * C级-可忽略设计上的细节,但不防碍使用
26 |
27 |
28 | 2. 重用已有的样式库
29 | ---------------------
30 | * 2-1. 主站全局CSS文件 - douban.css (注意:新项目中不推荐使用)
31 | * 2-2. 兼容主站的全局CSS文件 - /css/core/_init_.css
32 | * 2-3. 当前使用的CSS库(持续更新)
33 | * util-01 reset /css/core/reset.css
34 | * util-02 通用模块容器 /css/core/mod.css
35 | * ui-01. 喜欢按钮 /css/core/fav_btn.css
36 | * ui-02. 视频/相册列表项 /css/core/media_item.css
37 | * ui-03. 评星 /css/core/rating.css
38 | * ui-04. 通用按钮 /css/core/common_button.css
39 | * ui-05. 分页 /css/core/pagination.css
40 | * ui-06. 推荐按钮 /css/core/rec_btn.css
41 | * ui-07. 老版对话框 /css/core/old_dialog.css
42 | * ui-08. 老版Tab /css/core/old_tab.css
43 | * ui-09. 老版成员列表 /css/core/old_userlist.css
44 | * ui-10. 老版信息区 /css/core/notify.css
45 | * ui-11. 社区用户导航 /css/core/profile_nav.css
46 | * ui-12. 当前大社区导航 /css/core/site_nav.css
47 | * ui-13. 加载中 /css/lib/loading.css
48 |
49 | 3. CSS文件的目录管理
50 | ---------------------
51 | 所有的CSS分为两大类:通用类和业务类。
52 |
53 | * 3-1. 通用的CSS文件,放在如下目录中:
54 |
55 | 基本样式库 | /css/core
56 | |
通用UI元素样式库 | /css/lib
57 | |
JS组件相关样式库 | /css/ui
58 | |
59 |
60 | * 3-2. 业务类的CSS是指和具体产品(如音乐、读书等)相关的文件,放在如下目录中:
61 |
62 | 读书 | /css/book/
63 | |
电影 | /css/movie/
64 | |
音乐 | /css/music/
65 | |
社区 | /css/sns/
66 | |
小站 | /css/site/
67 | |
同城 | /css/location/
68 | |
电台 | /css/radio/
69 | |
九点 | /css/newnine/
70 | |
商务 | /css/biz/
71 | |
... | /css/产品名称
72 | |
73 |
74 | * 3-3. 外联CSS文件适用于全站级和产品级通用的大文件。
75 | * 3-4. 内联CSS文件适用于在一个或几个页面共用的CSS。利用模板系统支持的istatic方法引用。
76 | * 3-5. 模块依赖的CSS和模块放在一起。利用模板系统支持的collect_css过滤器实现。
77 |
78 | 4. CSS的模块化组织
79 | ---------------------
80 |
81 | 当前静态文件管理系统已支持SCSS和导入语法。开发中,应尽量按功能分解大文件,实现模块化的文件组织。
82 |
83 | * 使用和完善现有CSS库(见2-4)。
84 | * 单个CSS文件避免过大(建议少于300行)。
85 | * CSS文件嵌套不要超过一层
86 |
87 | 5. 不要轻易改动全站级CSS和通用CSS库。改动后,要经过全面测试
88 | ---------------------------------------------------------
89 |
90 | 6. 单条CSS规则的书写格式要求
91 | ---------------------
92 |
93 | * 6-1. 单行形式适用于直接写在页面中和长文件的情况。声明写在一行。需要在“{"和"}”前后加空格。
94 | (注:在很长的文件中,单行形式有利于检索选择器)
95 |
96 | ```css
97 | .selector { property:value;property:value; }
98 | ```
99 |
100 | 简短规则声明(1或2个)也适用单行形式。
101 |
102 | ```css
103 | .selector { property:value; }
104 | ```
105 |
106 | * 6-2. 格式化书写形式。适用于不是很长的模块文件或CSS3语法。冒号后加空格。
107 |
108 | ```css
109 | .selector {
110 | property: value;
111 | property: value;
112 | }
113 | ```
114 |
115 | CSS3兼容书写形式和对齐方式:
116 |
117 | ```css
118 | .selector {
119 | -webkit-box-shadow: 0 0 5px rgba(200, 200,200, 0.8);
120 | -moz-box-shadow: 0 0 5px rgba(200, 200,200, 0.8);
121 | box-shadow: 0 0 5px rgba(200, 200,200, 0.8);
122 | }
123 | ```
124 |
125 | CSS3中逗号分隔的长属性值:
126 |
127 | ```css
128 | .selector {
129 | box-shadow:
130 | 1px 1px 1px #000,
131 | 2px 2px 1px 1px #ccc inset;
132 | background-image:
133 | linear-gradient(#fff, #ccc),
134 | linear-gradient(#f3c, #4ec);
135 | }
136 | ```
137 |
138 | * 6-3. 多个(>2)selector每个占一行:
139 |
140 | ```css
141 | .selector1,
142 | .selector2,
143 | .selector3 { ... }
144 | ```
145 |
146 | * 6-4. 规则声明的顺序:定位、盒模型(width/height/padding/border/margin)、行高、字体/字号/颜色、背景、CSS3效果等
147 |
148 | * 6-5. 兼容多个浏览器时,将标准规则声明写在后面,如:
149 |
150 | ```css
151 | -webkit-border-radius: 4px;
152 | -moz-border-radius: 4px;
153 | border-radius: 4px;
154 | ```
155 |
156 |
157 | 7. 注释书写形式
158 | --------------
159 | * 7-1. 注释内容单行控制在40个中文或80个英文字符宽。注释的格式:
160 |
161 | ```css
162 | /*
163 | * mod: doulist
164 | * 描述内容
165 | */
166 | ```
167 |
168 | SCSS中支持单行注释
169 |
170 | ```css
171 | // mod: doulist
172 | ```
173 |
174 | * 7-2. 规则分类放在一起。通用规则在具体业务规则的前面。如:
175 |
176 | ```css
177 | /* layout */
178 | ...
179 | /* mod */
180 | ...
181 | /* nav */
182 | ...
183 | /* mod: events album */
184 | ...
185 | ```
186 |
187 | 8. ID和Class命名。命名不要用缩写(除一些公认的缩写,见8-4),单词间用"-"做为连接符
188 | -----------------------------------------------------------------------
189 | * 8-1. ID是用来标识具体模块,命名必须具体且唯一,由前缀和名字组成。不要滥用ID。如: #db-video-list、#group-member-list等。
190 | * 8-2. Class是用来标识某一类型的对象,命名简洁表意清楚。如:.list。
191 | * 8-3. 命名示例:
192 |
193 | 坏:
194 |
195 | ```css
196 | #rec
197 | .gray-link
198 | .broadsmr
199 | .pl
200 | ```
201 |
202 | 好:
203 |
204 | ```css
205 | #db-nav-main
206 | .infobox
207 | .item
208 | ```
209 |
210 | * 8-4. 推荐使用的class名:
211 |
212 | 表示状态 | .on, .active, .selected, .hili
213 | |
表示位置 | .first, .last, .main, .side
214 | |
表示结构 | .hd, .bd, .ft, .col, .section
215 | |
通用元素 | .tb, .frm, .nav, .list, .item, .tag, .pic, .info
216 | |
217 |
218 |
219 | 9. 避免滥用CSS Hack
220 | -----------------------
221 | 推荐使用下面的:
222 |
223 | 区别属性:
224 |
225 | IE6 | _property:value
226 | |
IE6/7 | *property:value
227 | |
IE6/7/8/9 | property:value\9
228 | |
229 | 区别规则:
230 |
231 | IE6 | * html selector { ... }
232 | |
IE7 | *:first-child+html selector { ... }
233 | |
非IE6 | html>body selector { ... }
234 | |
firefox only | @-moz-document url-prefix() { ... }
235 | |
saf3+/chrome1+ | @media all and (-webkit-min-device-pixel-ratio:0) { ... }
236 | |
opera only | @media all and (-webkit-min-device-pixel-ratio:10000),not all and (-webkit-min-device-pixel-ratio:0) { ... }
237 | |
iPhone/mobile webkit | @media screen and (max-device-width: 480px) { ... }
238 | |
239 | 注意:SCSS会自动转换一些不标准CSS写法,会破坏CSS Hack。
240 |
241 |
242 | 10. 使用after或overflow的方式清浮动,不要在html里增加多余的标签
243 | --------------------------------------------------------
244 |
245 | 11. CSS必须放在head里
246 | --------------------
247 |
248 | 12. 避免使用低效的选择器
249 | ---------------------
250 | 如:
251 |
252 | ```css
253 | body > * {...}
254 | ul > li > a {...}
255 | #footer > h3 {...}
256 | ul#top_blue_nav {...}
257 | #searbar span.submit a { ... }
258 | .target #target-node { ... }
259 | ```
260 |
261 | 13. 避免使用filter
262 | --------------------
263 |
264 | 14. 避免直接定义标签的样式。如: div { ... }
265 | ---------------------------
266 |
267 | 15. 避免在标签上直接写样式。如:
268 | -----------------------------------------------------------
269 |
270 | 16. 避免在CSS中使用expression
271 | ---------------------------
272 |
273 | 17. 避免在CSS中使用@import
274 | ---------------------------
275 |
276 | 18. 尽量不要在CSS中使用!important
277 | -----------------------------
278 |
279 | 19. 绝对不要在CSS中使用"*"选择符
280 | ----------------------------
281 |
--------------------------------------------------------------------------------