css也要模块化?
css命名对html的模块化,标准化与网站维护成本起到决定性的作用,特别对于很多大型复杂站点来说,在经过大量的后期需求变更与维护后,css已然变得面目全非。没有前期合理的架构,导致后期无法灵活的适应需求变更,让维护工作成为“打补丁”、“填漏洞”。还在为 box_right
,color_yellow
这种命名方式头疼吗? html模块化,从css模块化开始!
css模块化优点
- 减少页面样式与通用或外部插件样式冲突的几率
- 分组管理,解放命名局限性
- 提高多人协作时代码可阅读性
- 仅通过css结构即可大致了解html结构与模块划分
- 降低后期维护成本
- 解放html,用css掌控一切!
命名分隔符
首先,严格规范分隔符用法,可以用-或_作为命名分隔符,以下以-为例:
.[分组]-[类型]-[描述]
在turboCSS中,分隔符不再随意的用来做单词分隔,而是赋予了关键性作用。例如:
.f-search-md
[f]
表示该样式所处的分组(后面会详细介绍),[search]
表示该样式的类型,[md]
则为该类型的描述。在同一个类型出现第一次时,我们一般只需使用 f-search
即可。而中间的 [类型]
尽量避免使用一些具体的业务命名,如
.g-newslist //错误写法,如果同样的样式用在攻略,排行榜等,则与news新闻意义不符
尽量使用描述该类型最本质的单词
.g-textlist //文字列表
第二个-后的 [描述]
也尽量不要用到具体的业务命名,如
.f-search-hot //错误写法,当前搜索模块用于热门搜索,可同样的样式后期可能用于任何地方
使用数字或字母区分多种不同的search类型,摆脱业务限制,如
.f-search-2
或者
.f-search-a
当你十分确定一个样式只可能用于一个具体业务时,才可使用 f-search-hot
这样的命名(不推荐)
如何进行模块化
首先,将页面样式以通用性为指标进行分组,根据页面复杂程度,适当调整分组细分力度,以下详细介绍各分组作用(通用性由高到低排列)
[f-]
frame(跨页面级通用框架样式)
以[f-]为前缀的样式,代表该结构为页面级别框架结构,例:
1 | .f-topbar{ |
[w-]
widget(页面级通用组件样式)
以[w-]为前缀的样式,代表该结构为页面通用组件或小挂件,通常绑定JS交互操作,例:
1 | .w-slide{ |
[g-]
global(页面级通用内容样式)
以[g-]为前缀的样式,代表该结构为页面级通用 内容
模块,多数为数据通过 后台输出
的模块,常用于循环输出的ul列表上,如:
1 | .g-textlist{ |
[m-]
module(业务级模块样式)
上诉[f-]
、[w-]
、[g-]
均不能受具体业务影响命名,而以[m-]为前缀的样式,代表该结构为普通 业务
模块,可以使用具体的业务命名来划分网站模块,[m-]
作为一个灵活的模块载体,可以包容组件模块,内容模块,也可与其他小模块组建成大模块,常见的命名:
1 | .m-search{ |
[l-]
layout(页面布局样式)
当一个页面的布局十分复杂时,如果你还在使用 main
、section
、aside
这样的命名来划分列,往往是不够用的,这时可引入 [l-]
布局分组,若与设计师协商参与,将页面按照栅格化标准设计,那么 [l-]
将升级为栅格化布局体系,例:
1 | .l-grid{ |
[c-]
control(脚本控制与状态样式)
以[c-]为前缀的样式,代表该样式为脚本交互控制的样式,例:
1 | .c-fluid{ |
[p-]
patch(补丁样式)
当页面需要大量不同类型的补丁样式时,可引入 [p-]
分组,例:
1 | .p-left{ |
未完待续…