[关闭]
@brizer 2016-02-17T20:12:06.000000Z 字数 6701 阅读 1278

NEC编程规范之CSS


前言

工作需要,学习编程规范。


css的分类

先谈谈编写css的排列顺序:

  1. 重置(reset)和默认(base)(tags):消除默认样式和浏览器差异,并设置部分标签的初始样式,以减少后面的重复劳动!你可以根据你的网站需求设置!

  2. 统一处理:建议在这个位置统一调用背景图(这里指多个布局或模块或元件共用的图)和清除浮动(这里指通用性较高的布局、模块、元件内的清除)等统一设置处理的样式!

  3. 布局(grid)(.g-):将页面分割为几个大块,通常有头部、主体、主栏、侧栏、尾部等!

  4. 模块(module)(.m-):通常是一个语义化的可以重复使用的较大的整体!比如导航、登录、注册、各种列表、评论、搜索等!

  5. 元件(unit)(.u-):通常是一个不可再分的较为小巧的个体,通常被重复用于各种模块中!比如按钮、输入框、loading、图标等!

  6. 功能(function)(.f-):为方便一些常用样式的使用,我们将这些使用率较高的样式剥离出来,按需使用,通常这些选择器具有固定样式表现,比如清除浮动等!不可滥用!

  7. 皮肤(skin)(.s-):如果你需要把皮肤型的样式抽离出来,通常为文字色、背景色(图)、边框色等,非换肤型网站通常只提取文字色!非换肤型网站不可滥用此类!

  8. 状态(.z-):为状态类样式加入前缀,统一标识,方便识别,她只能组合使用或作为后代出现(.u-ipt.z-dis{},.m-list li.z-sel{}),具体详见命名规则的扩展相关项。

看看demo:

  1. /* 重置 */
  2. div,p,ul,ol,li{margin:0;padding:0;}
  3. /* 默认 */
  4. strong,em{font-style:normal;font-weight:bold;}
  5. /* 统一调用背景图 */
  6. .m-logo a,.m-nav a,.m-nav em{background:url(images/sprite.png) no-repeat 9999px 9999px;}
  7. /* 统一清除浮动 */
  8. .g-bdc:after,.m-dimg ul:after,.u-tab:after{display:block;visibility:hidden;clear:both;height:0;overflow:hidden;content:'.';}
  9. .g-bdc,.m-dimg ul,.u-tab{zoom:1;}
  10. /* 布局 */
  11. .g-sd{float:left;width:300px;}
  12. /* 模块 */
  13. .m-logo{width:200px;height:50px;}
  14. /* 元件 */
  15. .u-btn{height:20px;border:1px solid #333;}
  16. /* 功能 */
  17. .f-tac{text-align:center;}
  18. /* 皮肤 */
  19. .s-fc,a.s-fc:hover{color:#fff;}

这里需要注意一下分类:

布局(grid)(.g-);
模块(module)(.m-);
元件(unit)(.u-);
功能(function)(.f-);
皮肤(skin)(.s-);
状态(.z-)。

在你样式中的选择器总是要以上面前五类开头,然后在里面使用后代选择器。

如果这五类不能满足你的需求,你可以另外定义一个或多个大类,但必须符合单个字母+"-"为前缀的命名规则,即 .x- 的格式。

特殊:.j-将被专用于JS获取节点,请勿使用.j-定义样式


css命名

命名需要简约但是又不能失去语义:

  1. /* 反对:表现化的或没有语义的命名 */
  2. .m-abc .green2{}
  3. .g-left2{}
  4. /* 推荐:使用有语义的简短的命名 */
  5. .m-list .wrap2{}
  6. .g-side2{}

可以通过添加数字和字母来区分相同语义的不同类命名:

.m-list、.m-list2、.m-list3等,都是列表模块,但是是完全不一样的模块)。

其他举例:.f-fw0、.f-fw1、.s-fc0、.s-fc1、.m-logo2、.m-logo3、u-btn、u-btn2等等。

有时候两个同类型的模块很相似,可以通过合并选择器来设置共性的样式:

  1. /* 两个元件共性的样式 */
  2. .u-tip1,.u-tip2{}
  3. .u-tip1 .itm,.u-tip2 .itm{}
  4. /* 在分别是两个元件各自的样式 */
  5. /* tip1 */
  6. .u-tip1{}
  7. .u-tip1 .itm{}
  8. /* tip2 */
  9. .u-tip2{}
  10. .u-tip2 .itm{}

代码格式

小写

在xhtml标准中规定了所有标签、属性和值都小写,CSS也是如此。

单行写完一个选择器定义

便于选择器的寻找和阅读,也便于插入新选择器和编辑,便于模块等的识别。去除多余空格,使代码紧凑减少换行。

如果有嵌套定义,可以采取内部单行的形式。

  1. /* 单行定义一个选择器 */
  2. .m-list li,.m-list h3{width:100px;padding:10px;border:1px solid #ddd;}
  3. /* 这是一个有嵌套定义的选择器 */
  4. @media all and (max-width:600px){
  5. .m-class1 .itm{height:17px;line-height:17px;font-size:12px;}
  6. .m-class2 .itm{width:100px;overflow:hidden;}
  7. }
  8. @-webkit-keyframes showitm{
  9. 0%{height:0;opacity:0;}
  10. 100%{height:100px;opacity:1;}
  11. }

省略值为0时的单位
为节省不必要的字节同时也使阅读方便,我们将0px、0em、0%等值缩写为0。

  1. .m-box{margin:0 10px;background-position:50% 0;}

使用单引号
省略url引用中的引号,其他需要引号的地方使用单引号。

  1. .m-box{background:url(bg.png);}
  2. .m-box:after{content:'.';}

使用16进制表示颜色值
除非你需要透明度而使用rgba,否则都使用#f0f0f0这样的表示方法,并尽量缩写。

  1. .m-box{color:#f00;background:rgba(0,0,0,0.5);}

根据属性的重要性按顺序书写

只遵循横向顺序即可,先显示定位布局类属性,后盒模型等自身属性,最后是文本类修饰类属性。

显示属性 自身属性 文本属性和其他修饰
display width font
visibility height text-align
position margin text-decoration
float padding vertical-align
clear border white-space
list-style overflow color
top min-width background

举例子:

  1. .m-box{position:relative;width:600px;margin:0 auto 10px;text-align:center;color:#000;}

如果属性间存在关联性,则不要隔开写。

  1. /* 这里的height和line-height有关联性 */
  2. .m-box{position:relative;height:20px;line-height:20px;padding:5px;color:#000;}

私有在前,标准在后

先写带有浏览器私有标志的,后写W3C标准的。

  1. .m-box{-webkit-box-shadow:0 0 0 #000;-moz-box-shadow:0 0 0 #000;box-shadow:0 0 0 #000;}

注释

  1. /* 块状注释文字
  2. * 块状注释文字
  3. * 块状注释文字
  4. */
  5. .m-list{width:500px;}
  6. .m-list li{height:20px;line-height:20px;/* 这里是对line-height的一个注释 */overflow:hidden;}
  7. .m-list li a{color:#333;}
  8. /* 单行注释文字 */
  9. .m-list li em{color:#666;}

hack
统一使用“*”和“_”分别对IE7和6进行Hack。如下代码所示:

  1. /* IE7会显示灰色#888,IE6会显示白色#fff,其他浏览器显示黑色#000 */
  2. .m-list{color:#000;*color:#888;_color:#fff;}

选择器顺序
从大到小,从低到高,从先到后,从父到子。
从大到小说的是选择器的范围;从低到高说的是等级,从先到后说的是结构,从父到子说的是嵌套。

  1. /* 从大到小 */
  2. .m-list p{margin:0;padding:0;}
  3. .m-list p.part{margin:1px;padding:1px;}
  4. /* 从低到高 */
  5. .m-logo a{color:#f00;}
  6. .m-logo a:hover{color:#fff;}
  7. /* 从先到后 */
  8. .g-hd{height:60px;}
  9. .g-bd{height:60px;}
  10. .g-ft{height:60px;}
  11. /* 从父到子 */
  12. .m-list{width:300px;}
  13. .m-list .itm{float:left;}

这里把等级单独提出了回顾:

选择器等级(a,b,c,d)
style=”” 1,0,0,0
#wrapper #content {}0,2,0,0
#content .dateposted {}0,1,1,0
div#content {}0,1,0,1
#content p {}0,1,0,1
#content {}0,1,0,0
p.comment .dateposted {}0,0,2,1
div.comment p {}0,0,1,2
.comment p {}0,0,1,1
p.comment {}0,0,1,1
.comment {}0,0,1,0
div p {}0,0,0,2
p {}0,0,0,1

图片优化方案

图片本身

对于图片本身而言针对不同使用场景使用不同类型的图片,争取用较小的图片文件呈现较好的图像质量。

当图片色彩过于丰富且无透明要求时,建议采用jpg格式并保存为较高质量。
当图片色彩过于丰富又有透明或半透明要求或阴影效果时,建议采用png24格式,并对IE6进行png8退化(或在不得已情况下使用滤镜)。
当图片色彩不太丰富时无论有无透明要求,请采用png8格式,大多数情况下建议采用这种格式。
当图片有动画时,只能使用gif格式
你可以使用工具对图片进行再次压缩,但前提是不会影响色彩和透明。

多图片合并

对于多图片合并,也就是css精灵,也有以下几点需要注意的地方:

单个图标之间必须保留空隙,空隙大小由容器大小及显示方式决定。这样做的好处是既考虑了“容错性”又提高了图片的可维护性。

图标的排列方式,也由容器大小及显示方式决定。排列方式分为以下几种:横向排列(容器宽度有限)、纵向排列(容器高度有限)、斜线排列(容器宽高不限),靠左排列(容器背景居左)、靠右排列(容器背景居右)、水平居中排列(容器背景水平居中)、垂直居中排列(容器背景垂直居中)。

合并后图片大小不宜超过50K,建议大小在20K-50K之间。

为保证多次修改后的图片质量,请保留一份PSD原始图,修改和添加都在PSD中进行,最后导出png

合并注意事项

并不是把所有的图标都合并在一张图片里就是最好的,除了要控制图片大小之外还要注意以下方法。

按照图片排列方式,把排列方式一样的图片进行合并,便于样式控制。

按照模块或元件,把同属于一个模块或元件的图片进行合并,方便模块或元件的维护

按照图片大小,把大小一致或差不多的图片进行合并,可充分利用图片空间。

按照图片色彩,把色彩一致或差不多的图片进行合并,保证合并后图片的色彩不过于丰富,可防止色彩失真。

综合以上方法进行合并。


最佳实践

选择器最佳写法

  1. /* 这是某个模块 */
  2. .m-nav{}/* 模块容器 */
  3. .m-nav li,.m-nav a{}/* 先共性 优化组合 */
  4. .m-nav li{}/* 后个性 语义化标签选择器 */
  5. .m-nav a{}/* 后个性中的共性 按结构顺序 */
  6. .m-nav a.a1{}/* 后个性中的个性 */
  7. .m-nav a.a2{}/* 后个性中的个性 */
  8. .m-nav .z-crt a{}/* 交互状态变化 */
  9. .m-nav .z-crt a.a1{}
  10. .m-nav .z-crt a.a2{}
  11. .m-nav .btn{}/* 典型后代选择器 */
  12. .m-nav .btn-1{}/* 典型后代选择器扩展 */
  13. .m-nav .btn-dis{}/* 典型后代选择器扩展(状态) */
  14. .m-nav .btn.z-dis{}/* 作用同上,请二选一(如果可以不兼容IE6时使用) */
  15. .m-nav .m-sch{}/* 控制内部其他模块位置 */
  16. .m-nav .u-sel{}/* 控制内部其他元件位置 */
  17. .m-nav-1{}/* 模块扩展 */
  18. .m-nav-1 li{}
  19. .m-nav-dis{}/* 模块扩展(状态) */
  20. .m-nav.z-dis{}/* 作用同上,请二选一(如果可以不兼容IE6时使用) */

统一语义理解和命名

布局(.g-)
语义命名简写
文档docdoc
头部headhd
主体bodybd
尾部footft
主栏mainmn
主栏子容器maincmnc
侧栏sidesd
侧栏子容器sidecsdc
盒容器wrap/boxwrap/box
模块(.m-)、元件(.u-)
语义命名简写
导航navnav
子导航subnavsnav
面包屑crumbcrm
菜单menumenu
选项卡tabtab
标题区head/titlehd/tt
内容区body/contentbd/ct
列表listlst
表格tabletb
表单formfm
热点hothot
排行toptop
登录loginlog
标志logologo
广告advertisead
搜索searchsch
幻灯slidesld
提示tipstips
帮助helphelp
新闻newsnews
下载downloaddld
注册registreg
投票votevote
版权copyrightcprt
结果resultrst
标题titlett
按钮buttonbtn
输入inputipt
功能(.f-)
语义命名简写
浮动清除clearbothcb
向左浮动floatleftfl
向右浮动floatrightfr
内联块级inlineblockib
文本居中textaligncentertac
文本居右textalignrighttar
文本居左textalignlefttal
垂直居中verticalalignmiddlevam
溢出隐藏overflowhiddenoh
完全消失displaynonedn
字体大小fontsizefs
字体粗细fontweightfw
皮肤(.s-)
语义命名简写
字体颜色fontcolorfc
背景backgroundbg
背景颜色backgroundcolorbgc
背景图片backgroundimagebgi
背景定位backgroundpositionbgp
边框颜色bordercolorbdc
状态(.z-)
语义命名简写
选中selectedsel
当前currentcrt
显示showshow
隐藏hidehide
打开openopen
关闭closeclose
出错errorerr
不可用disableddis

典型错误

要避免以下典型错误:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注