CSS学习笔记(十六) CSS最佳实践之可维护性篇_html/css_WEB
前言CSS代码难维护众所皆知。
CSS样式定义上的灵活性带来的是CSS代码的多样性,如果毫无章节地使用这些定义样式的方式,势必会导致CSS代码的混乱和难以维护。本文将抛砖引玉,总结出几个方面来讨论如何编写可维护性的CSS代码。
1.代码规范
命名规范和格式规范是代码规范中最基本的规范,任何代码的混乱都是从命令和格式的混乱开始,而意义明确的命名和规整的代码格式则提高了代码的可读性与可维护性,给阅读者和维护者留下来良好的第一印象。每个开发团队都应该有一套自己的规范。
.page-content-title { ...}
/* 父元素的样式声明 */.page-content { ...}/* 子元素的样式声明 */.page-content-body { ...}
/* 不推荐 */.page-content-title{ border-left:1px solid #fff;} /* 不推荐 */.page-content-title{border-left:1px solid #fff;}/* 推荐 */.page-content-title { border-left: 1px solid #fff;}
/* 不推荐 */h1, h2, h3 { font-weight: bold; line-height: 1.5;}/* 推荐 */h1,h2,h3 { font-weight: bold; line-height: 1.5;}
/* 注释规范说明:文件头部的文件信息注释 *//*! * page content v1.0 * * Copyright 2015 * Dual licensed under the MIT or GPL Version 2 licenses. * * Designed and built by dopppler * //* 注释规范说明:模块样式定义的开始和结束 *//* page container start */.page-content { ...}.page-content-title { ...}.../* page container end */
2.结构组织规范的 CSS 代码首先应该具有结构清晰和模块分明的特点。想象一下,如果在平时的开发中,拿到效果图就切,切完写,没有先从页面整体来规划样式,那么在开发的过程中就会出现某些代码块难以重用的情况,这样就只能从原来的代码中复制部分内容组合成新的样式定义。随着站点功能越来越多,CSS 代码中重复的代码就会越来越多,最终一发不可收拾。那么,该如何做才能组织CSS代码呢? 首先,组织CSS代码文件。所有的CSS都可以分为两大类:通用类和业务类。代码的组织应该把通用类和业务类的代码放置于不同的目录中。 css |-[业务类文件夹] |-[通用类-样式重置].css |-[通用类-公用组件].css |-[通用类-ie兼容].css
3.元素单位em、px 还是 % ?亦或是 rem ?页面元素的尺寸(长度、宽度、内外边距等)以及页面字体的大小时和页面整体布局息息相关的,而页面布局的方式又是多种多样的。因此,如果没有合理地设置页面元素尺寸以及字体的大小,就会增加页面布局的复杂性,也会使得页面布局维护变得困难,还会使页面的扩展性和使用平台受到限制。那么该如何设置元素的尺寸和字体大小,从而达到最佳的可维护性呢?可参考以下三个建议: 尽量设置相对尺寸。页面应该是自适应呢,还是固定尺寸呢?这个取决于页面的设计。这里关注的是局部元素的尺寸要求使用相对大小,即局部自适应。这样当整体模块的尺寸更改时就不需要更改模块内部子模块的尺寸了。 只有在可预知元素尺寸的情况下使用绝对尺寸。编写的代码一定要先遵循设计要求,在某些场合可能必须使用绝对尺寸,例如网页整体的宽度固定、侧边栏宽度固定、页头和页尾的高度固定等。 使用 rem 设置字体大小。rem是个低调的单位,但在近一两年中开始火了起来。国内各大公司都已经投入使用,在一些常见的网站,如淘宝、腾讯、小米等移动站点,随处可见其踪影。详细用法可参见以下三篇文章或自行搜索了解。
4.样式重置上文已提及,这里推荐阅读 @alsiso 同学写的 CSS Reset 专题文章。
5.样式排序为什么要给样式排序?因为,如果CSS属性按照一定的规则排序,那么在开发过程中可以防止属性的重复定义,代码的检查者也能很清晰地查看CSS样式定义,更关键的是在后续维护过程中能快速定义特定的样式属性。尽管对CSS样式属性进行排序需要花费一些精力,但从代码的可读性和可维护性角度来考虑,这些付出将会是值得的。更何况,我们可以借助一些工具来完成。: ) 一种较为合理的排序方式是 按类型分组排序。著名的 Web 前端专家 Andy Ford 推荐过一种按照类型分组排序的方式,他把CSS属性分为7大类:
这种按照样式类型分组排列的方式不仅把功能相似的属性归类到一起,并且按照样式功能的重要性从上到下进行了排序。可以把影响元素页面布局的样式(如 float、margin、padding、height、width等)排到前面,而把不影响布局的样式(如background、color、font等)放到后面。这种主次分明的排列方式,极大地提高了代码的可维护性。
当然,如果在编写代码的时候直接按照这种方式写肯定有难度,而且不方便频繁地修改。最佳方式是编写代码的时候按照自己最有效率的方式来写,编写完成并提交的时候使用工具对其进行排序。推荐工具:CSScomb,一款免费高效并提供在线和主流代码编辑器插件的CSS排序工具。
6.权重制衡什么是权重?如果前端工程师没有深刻理解这个概念,将会很难写出高质量的CSS代码。在讨论权重之前,我们先来讨论一下一些基础知识。 CSS样式有 6 种基础选择器:
所有在CSS样式中定义的选择符都是由这 6 种基础选择器组合而成的,组合的方式分为三种:
CSS权重指的是这些选择器的优先级,优先级高的CSS样式会覆盖优先级的样式。优先级越高说明权重越高。根据 W3C 制定的CSS规范,CSS权重是通过如下规则计算的: 计算选择符中的ID选择器的数量(=a) 计算选择符中的类选择器、属性选择器以及伪类选择器的数量(=b) 计算标签类型选择器的伪对象选择器的数量(=c) 忽略全局选择器 按照规则,基础选择器具有这样的优先级: 分别计算 a、b、c 的值后,按顺序连接 a、b、c 三个数字组成一个新数值,此数值即为所计算的选择符的权重。另外,如果两个选择符的权重相同,则依照“就近原则”,最后定义的被采用。
明白权重的计算规则后,我们可以制定一些相关原则来提高样式代码的重用性和可维护性。 CSS样式中尽量不要使用ID选择器。一个页面中不允许有两个相同的ID,如果使用了ID选择器就意味着此此样式只能作用于一个元素,不能复用于其他元素。 减少子选择器的层级。降低选择符整体的权重,减少对HTML结构的依赖。 使用组合的CSS类选择器。面向对象编程一条原则:“多组合,少继承”。 7.兼容分离上文已提及。
以下是兼容 IE 浏览器的一些实践:
在 IE 浏览器中可以使用条件注释,让不同浏览器加载不同的样式文件以达到兼容代码和正常代码分离的目的。 另外,为了提高兼容样式的优先级,可以在根元素(或者 元素)上针对不同的浏览器添加不同的样式类。<-- 参考
以上,欢迎拍砖斧正。 |