Web前端开发最佳实践(8):还没有给CSS样式排序?其实你可以更专业一些
前言
CSS样式排序是指按照一定的规则排列CSS样式属性的定义,排序并不会影响CSS样式的功能和性能,只是让代码看起来更加整洁。CSS代码的逻辑性并不强,一般的开发者写CSS样式也很随意,所以如果不借助工具,不太容易按照既定的顺序来定义CSS属性,这是前端程序员很少给CSS样式属性排序的最主要原因。
尽管给CSS样式属性排序需要花费一些精力,但从代码的可读性和可维护性角度来考虑,这些付出还是值得的。如果CSS属性按照一定的规则排序,在开发过程中可以防止属性的重复定义,代码的检查者也能很清晰地查看CSS样式定义,更关键的是后续维护过程中能快速定位特定的样式属性。国外有人做过一个调查,该调查显示有超过60%的开发者会给CSS样式排序。可见业内大部分的开发者对CSS样式属性排序持有肯定的态度,只是在排序的方式上会有一定的分歧:大约有45%的人是按照类型分组排序,有14%的人是按照字母序排列,还有2%的人按照定义的长度排序。下面分别介绍这几种排序的方式以及其优缺点。
常见的CSS定义排序方式
1. 按类型分组排序
这种排序方式最复杂,却也是最合理的方式。国外著名的Web前端专家Andy Ford推荐过一种按照类型分组排序的方式,他把CSS属性分为7大类:显示与浮动(Diplay&Flow
)、定位(Positioning
)、尺寸(Dimensions
)、边框相关属性(Margins
、Padding
、Borders
、Outline
)、字体样式(Typographic Styles
)、背景(Backgrounds
)、其他样式(Opacity
、Cursors
、Generated Content
)。以此规则,Andy Ford给出了一个例子,基本包含了CSS2.1中所有的样式属性。可以通过浏览他的文章查看完整的例子代码。
随着CSS3的普及,CSS样式中也添加了很多新的属性,这些新的属性也可以按照如上的规则归类到不同的类别中,如:text- shadow
可以归类到字体样式中;border-radius
可以归类为边框相关属性等。
2. 按字母序排列
按字母序排列的方式也是CSS排序中使用较多的一种方式。相比较于前一种方式,这种方式的优点是排列规则简单。按字母序排列的规则是按照属性的首字母从A到Z排列,忽略浏览器前缀(如:-webkit-
、-moz-
、-o-
以及-ms-
)。如下是一个按照字母序排列的例子:
#element {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
color: #FFF;
font-family: "Times New Roman", serif;
font-weight: bold;
height: 300px;
line-height: 20px;
top: 10px;
width: 100px;
}
3. 按定义长度排序
这种排序方式是使用较少的一种方式。和按照字母序排列的方式类似,这种方式是按照样式定义的字符长度排列。排列的方式可以从长到短,也可以是从短到长。如下的例子将按照定义由长到短排列:
#element {
font-family: "Times New Roman", serif;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
font-weight: bold;
line-height: 20px;
height: 300px;
width: 100px;
color: #FFF;
top: 10px;
}
以上三种常见的CSS排序方式中,第一种最为合理,代码的可读性和可维护性也是最好的,但是规则相对复杂。其余两种方式规则简单,但仅仅是让代码看起来更整洁,并没有提高多少代码的可维护性。在实际的应用中,推荐使用第一种排列方式。
借助工具
当然,如果纯粹是靠前端工程师在编写代码过程中按照一定的规则来排列CSS样式肯定是有难度的,并且也不方便频繁地修改代码。最佳的方式是在编写代码过程中按照最有效率的方式来编写,在编写完成并提交代码时使用工具给CSS排序。这样即提高了开发效率又方便了后续代码的阅读和维护。推荐一款免费的CSS排序工具:CSScomb 。CSScomb提供了在线工具及主流代码编辑器的插件。
CSScomb的排序方式类似如上的第一种方式,但是默认规则稍有不同,当然CSScomb容许开发者自定义排序方式。下面以WebStorm为例,演示CSScomb的使用方法以及效果对比。
下载的CSScomb工具包,根据教程安装插件到WebStorm,然后就可以直接使用CSScomb了。使用的方式也很简单,在CSS样式文件上点击右键选择CSScomb工具,如下图所示。
图 WebStorm编辑器中使用CSScomb插件
看看排序的实际效果。如下是排序前的代码片段:
图 示例样式代码片段
下图是排序后的代码片段。
图 示例样式代码经过CSScomb排序后的效果
可以看到,排序后,不只是样式定义的顺序改变,每个分组之间还用了一个空行分割。提高了CSS代码的可读性和可维护性。
CSScomb提供了大量的其他工具的集成解决方案,如grunt对应的有grunt-csscomb,sublime编辑器有对应的sublime-csscomb插件,等等。
总结
总结以上介绍的CSS样式规则排序的实践,可以归纳为如下四点:
- 给CSS样式排序
- 推荐按样式属性功能分组排序
- 推荐在CSS样式代码编写完成并准备签入的时候排序
- 使用如CSScomb等工具排序
附录
- Web前端开发最佳实践(1):前端开发概述
- Web前端开发最佳实践(2):前端代码重构
- Web前端开发最佳实践(3):前端代码和资源的压缩与合并
- Web前端开发最佳实践(4):在页面中添加必要的meta信息
- Web前端开发最佳实践(5):正确闭合HTML标签,停止使用不标准的标签和属性
- Web前端开发最佳实践(6):过时的块状元素和行内元素
- Web前端开发最佳实践(7):使用合理的技术方案来构建小图标
- Web前端开发最佳实践(8):还没有给CSS样式排序?其实你可以更专业一些
Web前端开发最佳实践(8):还没有给CSS样式排序?其实你可以更专业一些的更多相关文章
- Web前端开发最佳实践(9):CSS代码太太乱,重复代码太多?你需要精简CSS代码
前言 提高网站整体加载速度的一个重要手段就是提高代码文件的网络传输速度.之前提到过,所有的代码文件都应该是经过压缩了的,这可提高网络传输速度,提高性能.除了压缩代码之外,精简代码也是一种减小代码文件大 ...
- Web前端开发最佳实践系列文章汇总
Web前端开发最佳实践(1):前端开发概述 Web前端开发最佳实践(2):前端代码重构 Web前端开发最佳实践(3):前端代码和资源的压缩与合并 Web前端开发最佳实践(4):在页面中添加必要的met ...
- web前端开发最佳实践笔记
一.文章开篇 由于最近也比较忙,一方面是忙着公司的事情,另外一方面也是忙着看书和学习,所以没有时间来和大家一起分享知识,现在好了,终于回归博客园的大家庭了,今天我打算来分享一下关于<web前端开 ...
- Web前端开发最佳实践(7):使用合理的技术方案来构建小图标
大家都对网站上使用的小图标肯定都不陌生,这些小图标作为网站内容的点缀,增加了网站的美观度,提高了用户体验,可是你有没有看过在这些网站中使用的图标都是用什么技术实现的?虽然大部分网站还是使用普通的图片实 ...
- Web前端开发最佳实践(1):前端开发概述
引言 我从07年开始进入博客园,从最开始阅读别人的文章到自己开始尝试表达一些自己对技术的看法.可以说,博客园是我参与技术讨论的一个主要的平台.在这其间,随着接触技术的广度和深度的增加,也写了一些得到了 ...
- Web前端开发最佳实践(4):在页面中添加必要的meta信息
meta标签放置在HTML页面的head中,主要用于标识网站.其中基本上包含了网站的一些描述信息,例如,简介.作者等.这些信息有助于搜索引擎更准确地识别网页的内容,也有助于第三方工具抓取网站基本信息. ...
- Web前端开发最佳实践(6):过时的块状元素和行内元素
前言 前端程序员在学习HTML的过程中,肯定接触过页面元素的两个基本类型:块状元素和行内元素,也有大量的技术文章或者教程在介绍这两个概念.但这两个HTML元素相关的概念从字面上却和CSS样式有着很深的 ...
- Web前端开发最佳实践(3):前端代码和资源的压缩与合并
一般在网站发布时,会压缩前端HTML.CSS.JavaScript代码及用到的资源文件(主要是图片文件),目的是加快文件在网络中的传输,让网页更快的展现.当然,CDN分发.缓存等方式也是加快代码或资源 ...
- 【社区公益】送《Web前端开发最佳实践》给需要的人
算起来至今,我进入软件开发行业已经有11年之久.从最初的研究人工智能,到后来的Web开发,控件开发,直到现在纯粹的Web前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...
随机推荐
- P2158 [SDOI2008]仪仗队 && 欧拉函数
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- 在VMware安装Ubuntu后一直停留在VMware Easy Install
在VMware安装Ubuntu完成后,一直停留在VMware Easy Install,可以登录但是没有窗口界面,如图: 在此登录后依次运行以下命令: sudo mv /etc/issue.backu ...
- hbase系列之:独立模式部署hbase
一.概述 在上一篇博文中,我简要介绍了hbase的部分基础概念,如果想初步了解hbase的理论,可以参看上一篇博文 hbase系列之:初识hbase .本博文主要介绍独立模式下部署hbase及hbas ...
- Sparse Filtering简介
当前很多的特征学习(feature learning)算法需要很多的超参数(hyper-parameter)调节, Sparse Filtering则只需要一个超参数--需要学习的特征的个数, 所以非 ...
- 2017中国大学生程序设计竞赛 - 网络选拔赛 1004 HDU 6153 A Secret (字符串处理 KMP)
题目链接 Problem Description Today is the birthday of SF,so VS gives two strings S1,S2 to SF as a presen ...
- json字符串与json对象转换
从网上找的几种常用的转换方法,测试结果如下: 1.json字符串——>json对象 /* test 1 */ var str = '{"a":1,"b": ...
- vi的复制粘贴命令 -- (转)
vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握这三种模式十分重要: 1.命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[E ...
- 手动刷入Android 4.4.1 KOT49E OTA更新包
一.Android 4.4 KitKat Google前段时间发布了Android新版本Android 4.4 KitKat,由于我的Nexus 4也是托朋友从US带回来的,所以很快就收到了Googl ...
- solr4.10.3部署到tomcat——(十)
0. 准备环境:
- WCF REST 工作总结
首先引用System.ServiceModel;System.ServiceModel;System.ServiceModel.Activation;命名空间 [ServiceContract] pu ...