高效编写CSS代码的建议汇总

所属分类: 网页制作 / CSS 阅读数: 1575
收藏 0 赞 0 分享

1. 基本原则

  1.1 把CSS放在HTML页面头部

  由于浏览器需要在所有的样式表加载完成后才能开始渲染页面,样式表加载完成之前页面会一直显示空白,因此需要将样式表放在头部。

  @import 相当于把 标签放在页面的底部,因此从优化性能的角度考虑,应避免使用 @import。

  1.2 避免使用 CSS Expressions

  Expression 只有 IE 支持,而且他的执行比大多数人想象的要频繁的多。不仅页面渲染和改变大小 (resize) 时会执行,页面滚动 (scroll) 时也会执行,甚至连鼠标在页面上滑动时都会执行。在 expression 里面加上一个计数器就会知道,expression 的执行上相当频繁的。鼠标的滚动很容易就会使 expression 的执行次数超过 10000。

  1.3 CSS简写

  1.3.1 16进制颜色值简写

CSS Code复制内容到剪贴板
  1. /* Not recommended */  
  2. color#eebbcc;   
  3.   
  4. /* Recommended */  
  5. color#ebc;     

  1.3.2 属性值简写

 

CSS Code复制内容到剪贴板
  1. margin-top2px;   
  2.  margin-right5px;   
  3.  margin-bottom: 2em;   
  4.  margin-left15px;     ----->>     margin2px 5px 2em 15px;    
  5.   
  6.  border-width1px;   
  7.  border-stylesolid;   
  8.  border-color#000     ----->>     border1px solid #000    
  9.   
  10.  font-styleitalic;   
  11.  font-variantsmall-caps;   
  12.  font-weightbold;   
  13.  font-size: 1em;   
  14.  line-height: 140%;   
  15.  font-familysans-serif;  ----->>  fontitalic small-caps bold 1em 140% sans-serief    
  16.   
  17.  background-color#f00;   
  18.  background-imageurl(background.gif);   
  19.  background-repeatno-repeat;   
  20.  background-attachmentfixed;   
  21.  background-position: 0 0;   ----->>background#f00 url(background.gif) no-repeat fixed 0 0    
  22.   
  23.  list-style-typesquare;   
  24.  list-style-positioninside;   
  25.  list-style-imageurl(image.gif)  ----->> list-stylesquare inside url(image.gif)   

  1.4 尽量抽取相似部分

CSS Code复制内容到剪贴板
  1. .class1{positionabsoluteleft20pxtop30px;}   
  2. .class2{positionabsoluteleft20pxtop30px;}   
  3. .class3{positionabsoluteleft20pxtop30px;}   
  4. .class4{positionabsoluteleft20pxtop30px;}   
  5. .class5{positionabsoluteleft20pxtop30px;}   
  6. .class6{positionabsoluteleft20pxtop30px;}    
  7.   
  8.  -------------------->>>>>>>    
  9.   
  10.  .class1 .class2 .class3 .class4 .class5 .class6{   
  11.         Position: absoluteleft20pxtop20px;   
  12.  }  

  2. 关键要点

  2.1 只使用小写

CSS Code复制内容到剪贴板
  1. <!-- Not recommended -->   
  2. <A HREF="/">Home</A>   
  3.   
  4. <!-- Recommended -->   
  5. <img src="google.png" alt="Google">  

  2.2 不要有多余的空格(划线处)

CSS Code复制内容到剪贴板
  1. <!-- Not recommended -->   
  2. <p>What?_   
  3.   
  4. <!-- Recommended -->   
  5. <p>Yes please.  

  2.3 使用utf8编码

html中:

XML/HTML Code复制内容到剪贴板
  1. <meta charset="utf-8">   

css中:

CSS Code复制内容到剪贴板
  1. @charset "utf-8";  

  2.4 使用html5文档类型

  

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  

  2.5 验证HTML与CSS文档

  验证HTML

  验证CSS

  2.6 使文档语义化

  2.7 多媒体(多终端)兼容

CSS Code复制内容到剪贴板
  1. <!-- Not recommended -->   
  2. <img src="spreadsheet.png">   
  3.   
  4. <!-- Recommended -->   
  5. <img src="spreadsheet.png" alt="Spreadsheet screenshot.">  

  2.8 不要使用实体引用

CSS Code复制内容到剪贴板
  1. <!-- Not recommended -->   
  2. The currency symbol for the Euro is “&eur;”.   
  3.   
  4. <!-- Recommended -->   
  5. The currency symbol for the Euro is “€”.  

  2.9 使用带有语义的id和class

CSS Code复制内容到剪贴板
  1. /* Not recommended: meaningless */  
  2. #yee-1901 {}   
  3.   
  4. /* Not recommended: presentational */  
  5. .button-green {}   
  6. .clear {}   
  7.   
  8. /* Recommended: specific */  
  9. #gallery {}   
  10. #login {}   
  11. .video {}   
  12.   
  13. /* Recommended: generic */  
  14. .aux {}   
  15. .alt {}  

  2.10 省略零值的单位

CSS Code复制内容到剪贴板
  1. margin: 0;   
  2. padding: 0;  

  2.11 省略起始的零

CSS Code复制内容到剪贴板
  1. font-size: .8em;  

  2.12 尽量避免CSS hacks

  尝试换种解决方案

  2.13 为末尾的声明添加分号

  尽管省略末尾分号可以省略一个字节,但是非常不利于团队维护,得不偿失

CSS Code复制内容到剪贴板
  1. /* Not recommended */  
  2. .test {   
  3.   displayblock;   
  4.   height100px  
  5. }   
  6.   
  7. /* Recommended */  
  8. .test {   
  9.   displayblock;   
  10.   height100px;   
  11. }  

  2.14 选择器的效率

  浏览器是“从右往左”来分析 class 的,对于下面的规则

CSS Code复制内容到剪贴板
  1. #god > li {font-weightbold}  

  浏览器会先查找页面上所有的“li”节点,然后再去做进一步的判断:如果它的父节点的 id 为“god”,则匹配成功。由此可知,CSS 选择器的匹配远比我们想象的要慢的多,CSS 的性能问题不容忽视。

  2.15 后代选择器

CSS Code复制内容到剪贴板
  1. #toc li {font-weightbold}   

  这个效率比之前的“child selector”效率更慢,而且要慢很多。浏览器先便利所有的“li”节点,然后步步上溯其父节点,直到 DOM 结构的根节点(document),如果有某个节点的 id 为“toc”,则匹配成功,否则继续查找下一个“li”节点。

  2.16 尽量避免全局选择器

CSS Code复制内容到剪贴板
  1. [hidden="true"] { ... } /* A universal rule */    

  这里的匹配规则很明显:查找页面上的所有节点,如果有节点存在“hidden”属性,并且其属性值为“true”,则匹配成功。这是最耗时耗力的匹配,页面上的所有节点都需要进行匹配运算,这种规则应尽量避免。

  是用星号也一样

CSS Code复制内容到剪贴板
  1. #god li *  

  先找到页面上的所有元素,再匹配祖先中包含li的元素,然后在这些元素中再查找父元素的id为god的元素。

  因此,对于全局选择器,只建议一种用法:

CSS Code复制内容到剪贴板
  1. * { margin: 0; padding: 0; /* etc. */ }  

  2.17 避免tag+id或者class+id

CSS Code复制内容到剪贴板
  1. button#goButton {...};----->>#goButton   
  2. .fundation#testIcon {...};----->>#testIcon   

  2.18 关于tag+class

CSS Code复制内容到剪贴板
  1. button.indented {...}----->>.button-indented {...}   

  程序员们经常会给某个 Class 前面加上标签名称(Tag Name),以更精确且快速的定位该节点,但是这样往往效率更差。因为页面上的 class 在全局范围内来讲应该是唯一的,用唯一的 Class 名称来定位一个节点往往比组合定位更加快捷。事实上,这种做法也可以避免由于开发修改页面元素的类型(Tag)而导致的样式失效的情况,做到样式与元素的分离,两者独立维护。

  2.19 尽量减少规则数量

  可以考虑将层级关系写到一个class中,不过在层级变动时就比较麻烦了

CSS Code复制内容到剪贴板
  1. Span[mailfolder="true"] > table > tr > td.columnClass {...}    
  2.   
  3. ------------------->>>>>>>    
  4.   
  5. .span-mailfolder-tbl-tdCol {...}   

  2.20 避免过长的class命名

  可以考虑缩写

CSS Code复制内容到剪贴板
  1. ocHeroImage   
  2. ocEmailAddress  

  如果觉得难以理解,可以加入连字符或注释

CSS Code复制内容到剪贴板
  1. oc-HeroImage   
  2. oc-EmailAddress  

  尽管有语义化方面的考虑,但命名还是尽量短一些,只要易于辨认即可

CSS Code复制内容到剪贴板
  1. heroImg   
  2. emailAddr  

  2.21 文件名中不应有空格

  a) 有空格的文件名会被Google当成两个关键字,可能带来更多的搜索结果,引来更多流量,是好事

  b) 有空格意味着不能省略引号,多了两个字节

  c) 空格会被浏览器自动转换为%20,老的浏览器可能不支持,如果将%20硬编码到URL中则每个实例中都多了两个字符

CSS Code复制内容到剪贴板
  1. input {backgroundurl("/images/shadow background.gif");}  

  2.22 省略URI的引号

CSS Code复制内容到剪贴板
  1. @import url(//www.google.com/css/go.css);  

  2.23 尽量避免后代选择器

CSS Code复制内容到剪贴板
  1. treehead treerow treecell {...} ----->> treehead > treerow > treecell {...}   

  Descendant 选择器是耗时相对高的选择器,通常来讲,它在 CSS 里的使用应该是尽量避免的,如果能用 child 选择器替代就应该尽量这样去做。

  2.24 充分利用继承机制

 Color
 font
 letter-spacing
 line-height
 list-style
 text-align
 text-indent
 text-transform
 white-space
 word-spacing

CSS Code复制内容到剪贴板
  1. #bookmark  > .menu-left {list-style-imageurl(blah)}    
  2.   
  3. ------------>>>>>>>>    
  4.   
  5. #bookmark  {list-style-imageurl(blah)}   

  2.25 发布之前一定要进行压缩

  可使用YUI Compressor或类似软件进行压缩后再发布。

  3. 高级技巧

  3.1 省略嵌入资源的协议

  即可避免混合内容问题(mixed content issues)也可以缩减文件大小

CSS Code复制内容到剪贴板
  1. <!-- Not recommended -->   
  2. <script src="http://www.google.com/js/gweb/analytics/autotrack.js"></script>   
  3.   
  4. <!-- Recommended -->   
  5.   
  6. <script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>   
  7. /* Not recommended */  
  8. .example {   
  9.   backgroundurl(http://www.google.com/images/example);   
  10. }   
  11.   
  12. /* Recommended */  
  13. .example {   
  14.   backgroundurl(//www.google.com/images/example);   
  15. }  

  3.2 省略可选的标签

  HTML5规范中指定了一些可以省略的标签,可以缩减文件大小

XML/HTML Code复制内容到剪贴板
  1. <!-- Not recommended -->  
  2. <!DOCTYPE html>  
  3. <html>  
  4.   <head>  
  5.     <title>Spending money, spending bytes</title>  
  6.   </head>  
  7.   <body>  
  8.     <p>Sic.</p>  
  9.   </body>  
  10. </html>  
  11.   
  12. <!-- Recommended -->  
  13. <!DOCTYPE html>  
  14. <title>Saving money, saving bytes</title>  
  15. <p>Qed.  

  3.3 文件结构

  由于图像等资源一般只有CSS文件使用,故可将图像文件夹放到CSS文件同级目录,这样就可使用相对路径,节省字节数

CSS Code复制内容到剪贴板
  1. input {backgroundurl("images/shadow background.gif");}  

  3.4 文件夹命名

  通常文件夹会被命名为其所代表的资源的复数形式

images
assets
fonts

  其实大可不必,使用单数形式可以节省许多字节,尤其是当每个项目的结构都类似时

img
asset
font

  对于下面一段包含58字节的代码:

CSS Code复制内容到剪贴板
  1. input {backgroundurl("/images/shadow background.gif");}  

  优化后变为52字节,即10%的压缩:

CSS Code复制内容到剪贴板
  1. input {backgroundurl(img/shadow-background.gif);}  

  如果在使用缩写,则可进一步缩减:

input {background: url(img/shadow-bg.gif);}

  如果一个项目有几百行这样的代码,那么就会节省几百字节了。如果站点访问量超大,则可节省数目客观的带宽资源。

  3.5 末尾声明的分号

  前面提过,去掉末尾声明的分号可以节省字节,但不利于维护。可以考虑在压缩发布阶段去掉。

CSS Code复制内容到剪贴板
  1. .clear {clear:both;}   
  2.   
  3. .clear {clear:both}  

  3.6 背景色简写

  背景色简写也可节省字节,但要慎用,因为省略掉的默认属性会覆盖前面的属性。

  3.7 滤镜简写

CSS Code复制内容到剪贴板
  1. selector {   
  2.         -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=65)";   
  3.         filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=65);   
  4. }  

  filter的版本是IE8以下的,–ms-filter的版本是IE9以上的,YUI会将其压缩为:

CSS Code复制内容到剪贴板
  1. selector {   
  2.         -ms-filter:"alpha(opacity=65)";   
  3.         filter:alpha(opacity=65);   
  4. }   

  由于YUI的广泛使用极其社区开发着的强大力量,说明这种写法已经是经过深度测试的写法,可以放心使用。

  3.8 Gzip压缩与CSS书写

  Goolge建议按照字母顺序书写CSS规则,方便维护。其他公司也有自己的规范。从Gzip压缩角度,只要整个文档中的书写顺序保持一致即可,可以提高Gzip压缩比率。

background: fuchsia;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
text-indent: 2em;

  3.9 更少的请求比更小的尺寸重要

  文件可以适当的合并,只保留基本的层级即可

XML/HTML Code复制内容到剪贴板
  1. <link rel="stylesheet" href="http://css.somedomain.com/reset.css" type="text/css" />  
  2. <link rel="stylesheet" href="http://css.somedomain.com/global.css" type="text/css" />  
  3. <link rel="stylesheet" href="http://css.somedomain.com/home.css" type="text/css" />  

 

更多精彩内容其他人还在看

CSS配合JavaScript做酷的动态页面效果

  利用CSS配合JavaScript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下CSS配合JS的应用。首先,要搞清楚事件和动作的概念。在客户端脚本中,JavaScript 通过对事件进行响应来获得与用户的交互。例如,当用户单击一个按钮或者在某段文字上移动鼠标
收藏 0 赞 0 分享

WEB标准,Web前端开发工程师必备技术列表

  想要打造并拥有一流的Web产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的"网页套接"是完全不够的。我结合自己的团队配备,特此罗列了Web前端产品工程师所涉及的技能列表如下:   通过许多实际项目,
收藏 0 赞 0 分享

用CSS制作Alpha滤镜测试板

alpha滤镜给制作网页特效提供了较大的创作空间,但由于它控制参数较多,在实际应用时,为了确定一组合适的参数值,不得不反复调整修改,在编辑窗口和预览窗口来回倒腾,甚是麻烦,本文介绍了一种简单的方法。制作一个“Alpha滤镜参数测试板”,在测试板上输入参数
收藏 0 赞 0 分享

非常流行的所谓的气泡窗口

普通的Alt无法自定义风格,而Sweet Titles通过JS脚本与CSS的集合.自定义了这种伪Alt风格. 前一段时间非常流行的,就所谓的气泡窗口(鼠标移到链接处出现的). 我们这里实现的用的是Sweet Titles的插件.显示效果完全由CSS控制.. 先下载Sweet Ti
收藏 0 赞 0 分享

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/
收藏 0 赞 0 分享

CSS教程:CSS中的定位(position)

  使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。   其实,要想控制好层的绝对定位,只要理解CSS中关于定位
收藏 0 赞 0 分享

CSS教程:盒模型(BOX Model)

  如果想熟练掌握DIV和CSS的布局方法,首先要对盒模型有足够的了解。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin),如图1所示。
收藏 0 赞 0 分享

无延迟翻滚的图形与CSS混合风格按钮

  在一个具有图形背景的按钮中添加CSS风格的文本,这种建立按钮的方法结合了具有CSS翻滚(CSS rollover)标记的开发速度和效率,从而有效地提高按钮外表图像的三维效果。   相比于常规的图形按钮,这些图形/CSS混合按钮可易于建立和载入,因为你只需要为空白按钮外面
收藏 0 赞 0 分享

css里expression实现界面对象的批量控制

用过css样式我们就知道, 可以定义一批对象的class属性来指定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的src变成是**_over.jpg?
收藏 0 赞 0 分享

CSS教程:水平对齐(text-align)

  水平对齐(text-align),用以设定元素内文本的水平对齐方式。   1.语法   text-align具体参数如下: 语法:text-align:left|right|center|justify 说明:设定元素内文本的水平对齐方式。 参数:left:左
收藏 0 赞 0 分享
查看更多