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前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...
随机推荐
- google analysis教程
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- hive架构原理简析-mapreduce部分
整个处理流程包括主要包括,语法解析(抽象语法树,AST,采用antlr),语义分析(sematic Analyzer生成查询块),逻辑计划生成(OP tree),逻辑计划优化,物理计划生成(Task ...
- js生成接口请求参数签名加密
js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...
- 对 jQuery 中 data 方法的误解
一直以来都认为新版本中 data 是调用 dataset 实现的,对于低版本IE则采用 getAttribute其实一直是我误解了,也不知道最初这个想法是怎么来的.难道我被盗梦了? 今天 谢亮 兄弟和 ...
- Web开发中的18个关键性错误
前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...
- centos6.4下配置nginx服务器更改根目录
安装完nginx服务器后发现nginx的根目录在/usr/share/nginx/html/下,但是对于部署文件来说,在该目录下是不太习惯的,我就尝试着更改nginx访问的根目录 # vi /etc ...
- PHP返回Json数据函数封装
/** * 返回Json数据 * @param int $code * @param string $message * @param array $data * @return string */ ...
- UNIX网络编程 第3章 套接字编程简介
套接字结构类型和相关的格式转换函数
- IE的双边距Bug以及解决办法
display:inline和display:block区别 一.什么是双边距Bug? 先来看图: 我们要让绿色盒模型在蓝色盒模型之内向左浮动,并且距蓝色盒模型左侧100像素.这个例子很常见,比如在网 ...