前端代码标准最佳实践:CSS篇

上一篇《前端代码标准最佳实践:javascript》发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高。这些最佳标准实践并不是那个权威组织发布的,而是由大量的前端工程师们在实践过程中的经验总结,目的在于提高代码的可读性,可维护性和性能。那么接着上一篇,我们再来谈谈CSS代码的一些标准实践。

1,命名

和其他语言规范一样,css的命名也讲究命名要有意义,命名要尽可能短但是要足够表达含义;命名的词用连字符连接。

不规范的命名:

#navigation{
}
.demoimage{
}
.error_status{
}

规范的命名:

#nav{
}
.demo-image{
}
.error-status{
}

2, css选择器

不同的标签类型尽可能不用相同的css类名;尽可能不用标签类型选择器,用css类名和ID足够定义css,因为ID是可以唯一确定Dom元素的,而css类是不推荐用于不同的标签的;另外应该少用ID选择器定义,因为ID的唯一性使得定义的css无法重用。

不规范定义:

ul#menus{
}
div.info{
}

规范定义:

 

.main-menus{
}
.info{
}

3,属性名称和值的定义精简

css的某些属性定义可以可以分拆为各个独立项,比如padding,border, margin, background, font等,虽然分拆定义的可读性会好一些,但是就目前的经验来看,前端工程师们对这些常用的css理解程度足够好,合并后的定义不会对可读性带来影响,反而代码更简洁;此外对属性值为0的单位可以省略,在0后面添加入px em cm等单位是毫无意义的;对小数值可以省略小数点前的0;url值两端的引号可以省略。

不规范的定义:

border-top-style: none;
font-family: palatino, georgia, serif;
font-size: 100%;
line-height: 1.6;
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
margin: 0.8em;
background: #00FF00 url('bgimage.gif') no-repeat fixed top;

规范定义:

 

border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
padding: 0 1em 2em;
margin: .8em;
background: #00FF00 url(bgimage.gif) no-repeat fixed top;

4,css代码的格式

漂亮统一的代码格式可以提高代码的可读性和可维护性,css的最佳代码格式主要有以下几点:定义顺序以字母序排列,不考虑浏览器前缀;定义以分号结束;属性名称定义的分号后添加一个空格;多个选择器定义时,每个定义单独占一行。

/*css定义顺序以字母序排列;结束用分号;属性名称与值之间添加空格*/
background: fuchsia;
border: 1px solid;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
color: black;
text-align: center;
text-indent: 2em;

/*多个选择器定义时,每个选择器单独占用一行*/
h1,
h2,
h3 {
    font-weight: normal;
    line-height: 1.2;
}

5,避免写兼容某个浏览器的css代码

避免写特定浏览器兼容代码,这里说的特定浏览器主要指的是万恶的IE系列浏览器,IE6,7尤为严重。碰到浏览器兼容问题,首先考虑的是能否换一种其它的解决方案,如果没有合适的解决方案,记得单独写一个css文件给这些特定的浏览器,不要把兼容代码和常规代码混合,这样方便代码的维护,如果后期不支持这些老旧浏览器,可以直接删除这些单独的css文件即可。

<!--[if IE 6]>
<link rel="stylesheet" type="text/css" href="css/ie6.css" />
<![endif]-->
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="css/ie7.css" />
<![endif]-->

6,记住块元素和行内元素的区别,避免写无用的css代码

块级元素显示会独占一行,而行内元素不会独占一行。常见的块级元素有:div p ul ol table h1~h6 等;行内元素有:a em label span strong 等。块级元素的display默认样式是block,而行内元素是inline,可以通过重新定义display来互转块级元素和行内元素。但是记住以下的css样式对行内元素是无效的:width height 和垂直方向设置的margin padding,所以避免给行内元素定义这些无用的样式。

7,记住css定义的权重

css的选择器是有权重的,当有多个样式时,权重高的样式会起作用。说一个插曲,前段时间面试了不少前端工程师,问得最多的一个问题就是css权重问题,很可惜的是知道css权重的不多。以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:

/*权重为1*/
div{
}
/*权重为10*/
.class1{
}
/*权重为100*/
#id1{
}
/*权重为100+1=101*/
#id1 div{
}
/*权重为10+1=11*/
.class1 div{
}
/*权重为10+10+1=21*/
.class1 .class2 div{
}

如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现,因为光是靠前后的样式定义来影响最终的样式是不靠谱的,也会给后期的维护埋下一个雷区;另外为了代码的重用性,应尽可能定义小的权重,这和不推荐使用id来定义样式是一样的道理。

8,使用css reset

各个浏览器对不同的标签有其不同的内置的样式,为了使得在不同的浏览器下标签的表现相同,可以定义一个单独的base.css文件,重新定义各种标签的默认样式。另外推荐的css文件组织是:定义一个base.css,用于css reset,定义一个common.css,用于定义各种公用css类。这里有一份base.css,其实是以上提到的base.css和common.css的合并,分享给大家:base.css

9,多组合少继承

这种设计方式越来越受到大家的欢迎,各种前端框架中也能看到大量这样的设计。设计的核心思想是:把css定义中的固定部分和可变部分分开定义,使得代码达到最大程度的重用,这样的结果是增加了元素上添加的css类个数,但是提高了代码的维护性和可读性。如下的例子代码来自bootstrap的按钮样式定义

按钮有一个固定的基础样式btn

.btn {
  display: inline-block;
  *display: inline;
  padding: 4px 10px 4px;
  margin-bottom: 0;
  *margin-left: .3em;
  font-size: 13px;
  line-height: 18px;
  *line-height: 20px;
  color: #333333;
  ...
  *zoom: 1;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

在此基础上定义各种按钮的特定样式

.btn.disabled,
.btn[disabled] {
  cursor: default;
  background-color: #e6e6e6;
  background-image: none;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
     -moz-box-shadow: none;
          box-shadow: none;
}

.btn-large {
  padding: 9px 14px;
  font-size: 15px;
  line-height: normal;
  -webkit-border-radius: 5px;
     -moz-border-radius: 5px;
          border-radius: 5px;
}

.btn-large [class^="icon-"] {
  margin-top: 1px;
}

.btn-small {
  padding: 5px 9px;
  font-size: 11px;
  line-height: 16px;
}

.btn-small [class^="icon-"] {
  margin-top: -1px;
}

.btn-mini {
  padding: 2px 6px;
  font-size: 11px;
  line-height: 14px;
}

另外再推荐一下bootstrap框架,在github中排名第一的前端框架,出自于twitter。

10,雪碧图(css sprite)

这项技术是将多张背景图合并为一张,然后通过设置不同的background-position属性来展示不同的背景。现在越来越多的网站采用这项技术,例如:亚马逊,苹果,Google, YouTube等,我们目前的项目MSB也部分使用了这些技术。其优点是减少http请求背景图的次数,降低服务器的压力,页面的背景图能同时出现,避免出现空白背景。缺点是不好维护,另外有试验的结果显示会稍微影响渲染的速度,因为要计算position,但是其优点大于缺点,尤其是网站的背景图多的时候。现在也有多个工具可以帮助我们自动合并背景图和生成相应的background-position。

http://spritegen.website-performance.org/

http://csssprites.com/

http://drupal.org/project/sprites

另外,如果你使用的是asp.net来开发网站,可以使用微软开源的一款工具,可以在运行时生成对应的css srite。

具体参考这里:GENERATE CSS SPRITES IN ASP.NET

 

以上就是我认为比较重要CSS标准实践,都是从整体来关注css的标准实践,其实css中细节的的一些最佳实践还有很多,需要具体问题需要具体讨论,目前各个工程师写的css代码多种多样,也比较混乱,也与css代码容易上手并且相同的效果实现方法有多种多样有关。不管语言的灵活性如何,养成一个良好的写代码习惯非常重要,这些需要在实践中不断总结和提高,希望这篇文章能给刚开始学习css的同行们提供一些帮助,在技术的提高过程中少走一些弯路。

时间: 2024-11-10 07:40:56

前端代码标准最佳实践:CSS篇的相关文章

前端代码标准最佳实践:HTML篇

Web前端代码中,HTML是根本,CSS和JavaScript也是围绕着既有的HTML结构来构建,所以良好的HTML代码结构,除了提高了HTML代码的可读性,可维护性和执行性能之外,也可以让相对应的CSS和JavaScript代码更好的构建.距前面两篇探讨JavaScript(前端代码标准最佳实践:JavaScript篇)和CSS(前端代码标准最佳实践:CSS篇)之后,我们今天来探讨Web前端HTML的一些最佳实践. (1)HTML代码的基本规范 1. HTML的命名和格式 任何代码的混乱都是从

前端代码标准最佳实践:javascript篇

前言 最近一直重构项目的前端代码,也参考了各种前端代码的最佳实践,目的是让前端的HTML,CSS,JavaScript代码更符合标准,有更好的性能,更好的可维护性,尝到了重构后的甜头,也萌生了写这个系列博客的念头.前端代码有其固有的灵活性,这就导致了目前前端代码非常混乱的局面,本系列文章希望能起到抛砖引玉的作用,让更多的人重视前端代码的质量,编写更标准的前端代码. 本系列文章共有三篇,分别讨论HTML,CSS,Javascript,本篇将讨论Javascript. 目前,Javascript已广

基于AngularJS前端云组件最佳实践_AngularJS

AngularJS是google设计和开发的一套前端开发框架,他能帮助开发人员更便捷地进行前端开发.AngularJS是为了克服HTML在构建应用上的不足而设计的,它非常全面且简单易学习,因此AngularJS快速的成为了javascript的主流框架. 一.Amazing的Angular AnguarJS的特性 方便的REST: RESTful逐渐成为了一种标准的服务器和客户端沟通的方式.你只需使用一行javascript代码,就可以快速的从服务器端得到数据.AugularJS将这些变成了JS

BAT及各大互联网公司2014前端笔试面试题--Html,Css篇

很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确,如有错误或有更好的解法,还请斧正. 前面几题是会很基础,越下越有深度. 附上第一篇:BAT及各大互联网公司2014前端笔试面试题--JavaScript篇   Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?  IE: trident内核   Firefox:geck

jQuery最佳实践完整篇_jquery

上周,我整理了<jQuery设计思想>. 那篇文章是一篇入门教程,从设计思想的角度,讲解"怎么使用jQuery".今天的文章则是更进一步,讲解"如何用好jQuery". 我主要参考了Addy Osmani的PPT<提高jQuery性能的诀窍>(jQuery Proven Performance Tips And Tricks).他是jQuery开发团队的成员,具有一定的权威性,提出的结论都有测试数据支持,非常有价值. ============

断篇-金融大数据最佳实践总结篇

一.数据挖掘的价值体现 任何数据分析或者挖掘的项目都不会直接产生经济价值和意义,分析出的数据结果既不能给企业直接带来一个客户,也不能帮助企业卖出一件产品.数据分析的价值体现在于业务部门根据分析结果制定相关的经营策略并贯彻执行. 二.大数据之困-通道 大数据之困-如何打通底层数据存储到上层数据服务的通道问题,讲成为制约大数据发展的关键因素.当越来越多的人意识到大数据的未来在应用的时候,这个问题也就越来越紧迫. 三.大数据金融-行业化运作 大数据金融行业化营销模式才是王道,单独的通过打项目的方式做项

《Web前端开发最佳实践》——导读

前 言 Web前端开发入门难度并不高,但是初学者如果没有一个很好的学习和编码习惯,则开发水平的提高速度会变得很慢.下面几点是影响Web前端开发者技术提高的主要因素. 其一是开发者缺乏良好的实践指导.Web前端兴起的时间不长,很多大学都还没有来得及开一门专门讲解Web前端的课程,因此,大部分的Web前端开发者都是通过自学的方式来了解Web前端相关的技术.开发者学习前端技术的渠道很多,其中很大一部分是通过查找网络资源的方式,而网络上充斥着大量的错误或者过时的实践方法,这些实践方法很容易误导初学者,使

OpenStack获最佳实践徽章 安全性、稳定性获肯定

OpenStack日前宣布其开源云软件项目荣获Linux基金会核心基础设施计划(简称CII)颁发的最佳实践徽章.CII由Linux基金会发起,计划将数百万美元的资金用于资助全球信息基础设施的一些关键项目. CII最佳实践徽章充分表明了OpenStack坚持安全开发的承诺.此次获得CII徽章的项目认证由OpenStack安全项目组主导,其中包括就职于IBM的高级安全架构师Travis McPeak.敬请访问CII OpenStack认证页查看通过具体测试的详情. McPeak表示:"随着开源迅速发

Hadoop MapReduce开发最佳实践

前言 本文是Hadoop最佳实践系列第二篇,上一篇为<Hadoop管理员的十个最佳实践>. MapRuduce开发对于大多数程序员都会觉得略显复杂,运行一个WordCount(Hadoop中hello word程序)不仅要熟悉MapRuduce模型,还要了解Linux命令(尽管有Cygwin,但在Windows下运行MapRuduce仍然很麻 烦),此外还要学习程序的打包.部署.提交job.调试等技能,这足以让很多学习者望而退步. 所以如何提高MapReduce开发效率便成了大家很关注的问题.