提高CSS文件可维护性的五种方法

     当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节。然而代码并不是马上就能完全定型,在余下的时间里还有不断的维护工作,而这些工作也许不会是你自己完成。所以,结构优良的代码能很大程度上优化它的可维护性。下面列出五种提高CSS文件可维护性的方法,也就是一种较好的CSS样式指南。

1.分解你的样式
对于小项目,在写代码之前,按页面结构或页面内容将代码分为几块并给予注释。例如,可以分别将 全局样式、布局、字体样式、表单、评论和其他分为几个不同的块来继续工作。
而对于较大的工程,这样显然不会有什么效果。此时,就需要将样式分解到几个不同的样式表文件。下面的master stylesheet 就是这一方法的例子,它的工作主要是导入其他样式文件。使用这一方法不仅能优化样式结构,而且有利于减少一些不必要的服务器请求。而分解文件的方法就有许多种,master stylesheet 使用了最常见的一种。
/*------------------------------------------------------------------
[Master Stylesheet]
Project: Smashing Magazine
Version: 1.1
Last change: 05/02/08 [fixed Float bug, vf]
Assigned to: Vitaly Friedman (vf), Sven Lennartz (sl)
Primary use: Magazine
-------------------------------------------------------------------*/
@import "reset.css";
@import "layout.css";
@import "colors.css";
@import "typography.css";
@import "flash.css";
/* @import "debugging.css"; */
同时对于大型项目,你也可以加上CSS文件的升级标志或者一些诊断措施,这里不再详述。

2.建立CSS文件索引
为了能够迅速的了解整个CSS文件的结构,在文件开头建立文件索引是一个不错的选择。一种可行的方法是建立树形的索引:结构上的id 和 class 都可以成为该树的一个分支。如下:
/*------------------------------------------------------------------
[Layout]
* body
Header / #header
Content / #content
- Left column / #leftcolumn
- Right column / #rightcolumn
- Sidebar / #sidebar
- RSS / #rss
- Search / #search
- Boxes / .box
- Sideblog / #sideblog
Footer / #footer
Navigation #navbar
Advertisements .ads
Content header h2
——————————————————————-*/
或者也可以这样:
/*------------------------------------------------------------------
[Table of contents]
1. Body
2. Header / #header
2.1. Navigation / #navbar
3. Content / #content
3.1. Left column / #leftcolumn
3.2. Right column / #rightcolumn
3.3. Sidebar / #sidebar
3.3.1. RSS / #rss
3.3.2. Search / #search
3.3.3. Boxes / .box
3.3.4. Sideblog / #sideblog
3.3.5. Advertisements / .ads
4. Footer / #footer
-------------------------------------------------------------------*/
另一种方式可以只是先简单的将内容列举出来,也不需要缩进。下面的一个例子中,如果你需要跳至RSS部分你只需要简单的搜索 8.RSS。
/*------------------------------------------------------------------
[Table of contents]
1. Body
2. Header / #header
3. Navigation / #navbar
4. Content / #content
5. Left column / #leftcolumn
6. Right column / #rightcolumn
7. Sidebar / #sidebar

3.定义你的颜色和版式
CSS 中我们无法使用常量,但是在编写颜色和版式方面的代码是我们会经常遇到可以使用很多次的类,在这里可以将之视为CSS 的常量。

一种可以减小CSS无常量定义确定的方法是在CSS文件顶部的注释中下一些定义,也就是定义常量。一种最简单的应用就是创建一个颜色表。这样你就可以快速的了解整个页面的色彩,从而避免一些反复修改过程中的错误。如果你需要对颜色进行修改,你也可以很快找到它。
/*------------------------------------------------------------------
# [Color codes]
# Dark grey (text): #333333
# Dark Blue (headings, links) #000066
# Mid Blue (header) #333399
# Light blue (top navigation) #CCCCFF
# Mid grey: #666666
# */
或者,你也可以选择描述你布局当中使用的颜色。对于一个给定的颜色,你可以将用到该颜色的块罗列出来。当然,你也可以选择按页面元素来罗列颜色。
/*------------------------------------------------------------------
[Color codes]
Background: #ffffff (white)
Content: #1e1e1e (light black)
Header h1: #9caa3b (green)
Header h2: #ee4117 (red)
Footer: #b5cede (dark black)
a (standard): #0040b6 (dark blue)
a (visited): #5999de (light blue)
a (active): #cc0000 (pink)
-------------------------------------------------------------------*/
对于版式有同样的例子。
/*------------------------------------------------------------------
[Typography]
Body copy: 1.2em/1.6em Verdana, Helvetica, Arial, Geneva, sans-serif;
Headers: 2.7em/1.3em Helvetica, Arial, "Lucida Sans Unicode", Verdana, sans-serif;
Input, textarea: 1.1em Helvetica, Verdana, Geneva, Arial, sans-serif;
Sidebar heading: 1.5em Helvetica, Trebuchet MS, Arial, sans-serif;
Notes: decreasing heading by 0.4em with every subsequent heading level
-------------------------------------------------------------------*/

4.格式化CSS属性
当我们编写代码的时候,使用一些特殊的编码风格会对提高CSS代码的可读性有很大帮助。许多人都有各自不同的编码风格。一部分人习惯于将颜色和字体的代码放在前面,另外一部分则更喜欢将类似浮动和定位的更“重要”的属性放在前面。类似的,也可以将页面元素按照它在布局中的结构进行排序:
body,
h1, h2, h3,
p, ul, li,
form {
border: 0;
margin: 0;
padding: 0;
}
一些开发者用一种更为有意思的方法:他们将属性按首字母的顺序排列。值得注意的是,这样一种方法可能对某些浏览器会产生问题。
不管自己的格式如何,你要确保你已经清晰的定义了这些格式方法。这样,你的同事在阅读你的代码的时候将会感谢你的努力。

5.缩进会是你的朋友!
为了让你的代码给人感觉更为直观,你可以使用一行来定义大纲元素的样式。当指定的选择器里的属性超过三个的时候,这种方式将带来混乱。但是,适度的使用这种方式,你可以很清楚的区分相同类的不同点。
#main-column { display: inline; float: left; width: 30em; }
#main-column h1 { font-family: Georgia, "Times New Roman", Times, serif; margin-bottom: 20px; }
#main-column p { color: #333; }
同时,样式修改的维护也是个比较麻烦的问题。很多人修改样式之后就忘记了,结果后来又发现修改的样式导致了页面出错,不得不苦苦寻找。因此,为修改的样式构建一个特殊的格式就很必要了。一种很简单的方式是,给修改过的样式缩进,同时,也可以使用一些注释(比如"@new")来做一个标识。
#sidebar ul li a {
display: block;
background-color: #ccc;
border-bottom: 1px solid #999; /* @new */
margin: 3px 0 3px 0;
padding: 3px; /* @new */
}
总的来说,只有建立一个合适的样式指南才会对样式表的可读性有所帮助。记住,移去每一个对你理解文件没有帮助的样式指南,避免对过多的元素使用过多的样式指南。然后,为了一个可读性可维护性良好的CSS文件而努力吧。
8. RSS / #rss
9. Search / #search
10. Boxes / .box
11. Sideblog / #sideblog
12. Advertisements / .ads
13. Footer / #footer
-------------------------------------------------------------------*/
<!-- some CSS-code -->
/*------------------------------------------------------------------
[8. RSS / #rss]
*/
#rss { ... }
#rss img { ... }
定义这样一个样式检索可以很有效的使其他人阅读学习你的代码变得容易。在制作大项目的时候,你也可以将检索打印出来从而在你阅读代码的时候方便查阅。


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是spring(转载)

spring是一个开源的java框架&#xff0c;集成了各种主流的技术包括web mvc&#xff0c;orm&#xff0c;ejb&#xff0c;rmi&#xff0c;javamail等 &#xff0c;他就象一个粘合济&#xff0c;在实际项目中&#xff0c;将前后台程序粘合在一起&#xff0c;构建出一个完整的系统。…

小程序小知识备忘

setData和React的setState一样是异步的吗&#xff1f; setData不是异步的&#xff0c;但是setData之后UI更新是异步的。因为逻辑层&#xff08;App Service&#xff09;和 视图层&#xff08;View&#xff09;是分开的。setData的第二个参数是UI更新后的回调。 组件中this.da…

记录您的里程和社区运行情况:Java EE 7真实体验

miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标&#xff0c;并使多个跑步者参与并跟踪他们朝着该目标的活动。 您也可以找出本地跑步者并与他们联系。 该项目已开始&#xff0c;以帮助跟踪#Jav…

poj 1308 Is It A Tree?

// 题意: 给出一些边&#xff0c;由所给出的边能否构成一棵树.&#xff08;节点数<100&#xff09;// 思路: n个顶点的树具有3个特点:连通,不含环,恰好包含n-1条边.只要有任意两个,就能推导出第3个// 所以我们可以通过是否连通和不含环来判断可以构成树.// 不含环: 通过并查…

oracle在group by时某列有多个值的拼接

最近编码过程中出现了group by后&#xff0c;某些列会有多个值&#xff0c;而我需要把这些多个值的列进行拼接的情况&#xff0c;和大家分享一下。 有如下表student&#xff1a; 我们希望以class分组&#xff0c;每组的信息平铺&#xff0c;效果如下 分组首先想到的肯定是group…

自求

最近在写代码的时候发现了一个问题&#xff0c;总是在完成一个复杂的逻辑后不自信&#xff0c;不自信逻辑没有问题或者说没有其他问题。仔细注意这种感觉是怎么来的就会发现&#xff0c;在梳理完逻辑写代码的时候总也会出现一些小问题&#xff0c;这些小问题的出现和处理就是问…

在Spring中使用Asciidoctor:使用Spring MVC渲染Asciidoc文档

Asciidoc是一种基于文本的文档格式&#xff0c;因此如果要将文档提交到版本控制系统中并跟踪不同版本之间的更改&#xff0c;它非常有用。 这使Asciidoc成为编写书籍&#xff0c;技术文档&#xff0c;常见问题解答或用户手册的理想工具。 创建Asciidoc文档后&#xff0c;很可能…

移动端meta整理

<!doctype html><html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1" /><!-- 默认使用最新浏览器 --><meta http-equiv"Cache-Control" content&qu…

字符数组和字符串的小细节

目录 1. 背景知识2. 指向字符串的指针2.1 代码A2.2 代码B2.3 结论3. 字符数组3.1 代码C3.2 总结4. 拓展1. 背景知识 1、字符串就是一个地址。 2. 指向字符串的指针 2.1 代码A const char *a "unix"; char *b "hello";pritnf("%s \n", a); a b…

POJ1459-Power Network

转载请注明出处&#xff1a;優YoU http://user.qzone.qq.com/289065406/blog/1299339754 提示&#xff1a;BFS找增广链 压入重标法 解题思路&#xff1a;多源多汇最大流问题题目给出很多都是废话&#xff0c;特别是符号s(u)&#xff0c;d(u)&#xff0c;Con还有那条公式都别管…

http强缓存在firefox和chrome之间的差异

最近回顾HTTP缓存知识的时候发现了一个问题&#xff0c;设置了强缓存和协商缓存的文件&#xff0c;点击浏览器的刷新按钮的时候在chrome和firefox中的表现不一样。具体表现为chrome走强缓存没有再次发起请求。firefox却在强缓存没有失效的情况下发了请求&#xff0c;返回了304走…

垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)

4个Java垃圾收集器–错误的选择如何严重影响性能 在2014年&#xff0c;对于大多数开发人员来说&#xff0c;还有两件事仍然是个谜&#xff1a;垃圾收集和了解异性。 由于我对后者知之甚少&#xff0c;所以我认为我会对前者大吃一惊&#xff0c;特别是因为在该领域中&#xff0c…

基于webpack的react脚手架

一、前言&#xff1a;react的cli开发模式太过于简单&#xff0c;好多东西都要自己配置 二、这里有个简单的配置&#xff0c;可以直接上手开发(不熟悉webpack和npm的绕路)&#xff0c;已经完成的配置如下 1&#xff1a;默认ejs模板 2&#xff1a;编译less、scss 3&#xff1…

从数学到密码学(八)

数学基础&#xff08;三&#xff09; 从本节起&#xff0c;我们开始进入大学数学的领域&#xff0d;&#xff0d;近世代数&#xff08;也称抽象代数&#xff09;。 先给出几个基本概念/定义。 [代数运算]&#xff1a;对于集合A的任意元素a、b&#xff0c;如果按某一运算法则&am…

Oracle.ManagedDataAccess 连接数据库用户名密码错误

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “Enabled” dword&#xff1a;00000000 转载于:https://www.cnblogs.com/Elcser/p/11134100.html

IE9下apply的使用方式

起初看到这段代码的时候先不管在干啥&#xff0c;仅仅是尝试理解就发现很绕&#xff0c;现记下以便回顾。 Function.prototype.apply.call(console.error, console, args);其实主要做的事情就是console.error(array)&#xff0c;使用数组作为参数调用console.error。 分解&am…

不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery &#xff0c;我们将Java 8用于jOOQ集成测试&#xff0c;因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是&#xff0c; 我们并不认为JDK提供了尽可…

Redis---概述

1.概述 Redis是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串&#xff0c;列表&#xff0c;集合&#xff0c;散列表&#xf…

AJAX Control Toolkit——DropShadow(阴影和圆角框)

该控件的效果就是可以使相应的Panel产生阴影和圆角框的效果&#xff0c;要说的是该控件在CSS3来临之际并不存在多大的意义了&#xff0c;因为在CSS3中同样可以实现而且更加理想的效果。 但是要说明的是不要为目标Panel添加过多的CSS属性&#xff0c;不然会出现预料之外的效果&a…

node实现简单的群体聊天工具

一、使用的node模块 1、express当做服务器 2、socket.io 前后通信的桥梁 3、opn默认打开浏览器的模块(本质上用不到) 难点&#xff1a;前后通信 源码地址&#xff1a;https://github.com/wjf444128852/SimpleChat 欢迎clone并运行、扩展改进、issues 二、基础样子&#…