编写更好的CSS
编写好的CSS代码能提升页面的渲染速度。本质上,一条规则都没有引擎解析的最快。MDN上将CSS选择符归拆分成四个主要类别,如下所示,性能依次降低。
- ID 规则
- Class 规则
- 标签规则
- 通用规则
对效率普遍认识是从Steve Souders在2009年出版的《高性能网站建设进阶指南》开始的,虽然Souders的书中罗列的非常详细,你可以在这里查看完整列表引用。你也可以在谷歌的高效的CSS选择器的最佳实践中查看更多的细节。
本文我想分享一些我在编写高性能CSS中用到的简单的例子和指导方针。受MDN的编写高效的CSS指南的启发,并遵循类似的格式。
避免过度约束
作为一般规则,不添加不必要的约束。
// 糟糕
ul#someid {..}
.menu#otherid{..} // 好的
#someid {..}
#otherid {..}
后代选择符最烂
不仅性能低下而且代码很脆弱,html代码和css代码严重耦合,html代码结构发生变化时,CSS也得修改,这是多么糟糕,特别是在大公司里,写html和css的往往不是同一个人。
// 烂透了
html div tr td {..}
避免链式(交集)选择符
这和过度约束的情况类似,更明智的做法是简单的创建一个新的CSS类选择符。
// 糟糕
.menu.left.icon {..} // 好的
.menu-left-icon {..}
坚持KISS原则
想象我们有如下的DOM:
<ul id="navigator">
<li><a href="#" class="twitter">Twitter</a></li>
<li><a href="#" class="facebook">Facebook</a></li>
<li><a href="#" class="dribble">Dribbble</a></li>
</ul>
下面是对应的规则……
// 糟糕
#navigator li a {..} // 好的
#navigator {..}
使用复合语法
尽可能使用符合语法。
// 糟糕
.someclass {
padding-top: 20px;
padding-bottom: 20px;
padding-left: 10px;
padding-right: 10px;
background: #000;
background-image: url(../imgs/carrot.png);
background-position: bottom;
background-repeat: repeat-x;
} // 好的
.someclass {
padding: 20px 10px 20px 10px;
background: #000 url(../imgs/carrot.png) repeat-x bottom;
}
避免不必要的命名空间
// 糟糕
.someclass table tr.otherclass td.somerule {..} //好的
.someclass .otherclass td.somerule {..}
避免不必要的重复
尽可能组合重复的规则。
// 糟糕
.someclass {
color: red;
background: blue;
font-size: 15px;
} .otherclass {
color: red;
background: blue;
font-size: 15px;
} // 好的
.someclass, .otherclass {
color: red;
background: blue;
font-size: 15px;
}
尽可能精简规则
在上面规则的基础上,你可以进一步合并不同类里的重复的规则。
// 糟糕
.someclass {
color: red;
background: blue;
height: 150px;
width: 150px;
font-size: 16px;
} .otherclass {
color: red;
background: blue;
height: 150px;
width: 150px;
font-size: 8px;
} // 好的
.someclass, .otherclass {
color: red;
background: blue;
height: 150px;
width: 150px;
} .someclass {
font-size: 16px;
} .otherclass {
font-size: 8px;
}
避免不明确的命名约定
最好使用表示语义的名字。一个好的CSS类名应描述它是什么而不是它像什么。
避免 !importants
其实你应该也可以使用其他优质的选择器。
遵循一个标准的声明顺序
虽然有一些排列CSS属性顺序常见的方式,下面是我遵循的一种流行方式。
.someclass {
/* Positioning */
/* Display & Box Model */
/* Background and typography styles */
/* Transitions */
/* Other */
}
组织好的代码格式
代码的易读性和易维护性成正比。下面是我遵循的格式化方法。
// 糟糕
.someclass-a, .someclass-b, .someclass-c, .someclass-d {
...
} // 好的
.someclass-a,
.someclass-b,
.someclass-c,
.someclass-d {
...
} // 好的做法
.someclass {
background-image:
linear-gradient(#000, #ccc),
linear-gradient(#ccc, #ddd);
box-shadow:
2px 2px 2px #000,
1px 4px 1px 1px #ddd inset;
}
显然,这些只是极少数的规则,是我在我自己的CSS中,本着更高效和更易维护性而尝试遵循的规则。如果你想阅读更多的知识,我建议阅读MDN上的编写高效的CSS和谷歌指南上的优化浏览器渲染。
译者注
本文为译文,原文为“Writing Better CSS”
支持我继续翻译吧。
编写更好的CSS的更多相关文章
- 【转】编写更好的CSS代码
原文转自:http://blog.jobbole.com/55067/ 编写好的CSS代码,有助提升页面的渲染速度.本质上,引擎需要解析的CSS规则越少,性能越好.MDN上将CSS选择符归类成四个主要 ...
- 编写可维护的CSS
在参与规模庞大.历时漫长且参与人数众多的项目时,所有开发者遵守如下规则极为重要: 保持 CSS 便于维护 保持代码清晰易懂 保持代码的可拓展性 为了实现这一目标,我们要采用诸多方法. 本文档第一部分将 ...
- 开始编写寄几的 CSS 基础库
前言 在现在的互联网业务中,前端开发人员往往需要支持比较多的项目数量.很多公司只有 1-2 名前端开发人员,这其中还不乏规模比较大的公司.这时前端同学就需要独挡一面支持整个公司上下的前端业务,项目如流 ...
- 更便捷的css处理方式-postcss
更便捷的css处理方式-PostCSS 一般来说介绍一个东西都是要从是什么,怎么用的顺序来讲.我感觉这样很容易让大家失去兴趣,先看一下postcss能做点什么,有兴趣的话再往下看,否则可能没有耐心看下 ...
- 使用 Promises 编写更优雅的 JavaScript 代码
你可能已经无意中听说过 Promises,很多人都在讨论它,使用它,但你不知道为什么它们如此特别.难道你不能使用回调么?有什么了特别的?在本文中,我们一起来看看 Promises 是什么以及如何使用它 ...
- 编写更少bug的程序的六条准则
如何编写更少bug的程序? 尽可能避免常见的程序错误. 沟通设计先行 + 编写可复用代码 + 做得更多 + 做的更少 + 创造“编程心流”+ 严格的程序测试 ...
- 如何编写更好的SQL查询:终极指南-第一部分
结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的.对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的.这 ...
- 如何编写更好的SQL查询:终极指南-第二部分
上一篇文章中,我们学习了 SQL 查询是如何执行的以及在编写 SQL 查询语句时需要注意的地方. 下面,我进一步学习查询方法以及查询优化. 基于集合和程序的方法进行查询 反向模型中隐含的事实是,建立查 ...
- 如何编写更好的SQL查询:终极指南-第三部分
本次我们学习<如何编写更好的SQL查询>系列的最后一篇文章. 时间复杂度和大O符号 通过前两篇文章,我们已经对查询计划有了一定了解.接下来,我们还可以借助计算复杂度理论,来进一步深入地挖掘 ...
随机推荐
- python 校招信息爬虫程序
发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python
- C 实现一个简易的Http服务器
引言 做一个老实人挺好的,至少还觉得自己挺老实的. 再分享一首 自己喜欢的诗人的一首 情景诗. 每个人总会有问题,至少喜欢就好, 本文 参照 http 协议 http://www.cnblogs. ...
- C 封装一个简单二叉树基库
引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而 没有遭受到冷 ...
- VC下的人人对弈五子棋(dos)
#include"stdio.h"#include"stdlib.h"#include"string.h"#include "io ...
- JavaScript高级程序设计之寄生组合式继承
在继承中常会出现两个问题: 父类的属性变成了子类的原型 构造器指向混乱 寄生组合式继承解决了这样的问题: 属性继承到属性 原型继承到原型 构造器指向明确 // 父类 var Super = funct ...
- JavaScript AJAX stream 流式显示
当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传 ...
- iOS学习之UI可视化编程-XIB
一.Interface Builder可视化编程 1.Interface Builder简介: GUI:图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是 ...
- .NET基础:修饰符
访问修饰符 软道语录定义: 访问修饰符就是类,属性和方法的电影分级制度 . public:访问不受限制. protected:访问仅限于包含类或从包含类派生的类型.只有包含该成员的类以及继承的类可以存 ...
- [转]论window和Linux之长短
论window和Linux之长短 王垠 http://www.kerneltravel.net/jiqiao/whyLinux.htm — 摈弃 Windows 低效率的工作方式,发掘 Linux 身 ...
- asp.net web.config 经典模式和集成模式相关配置
<?xml version="1.0"?> <configuration> <!--IIS经典模式下使用--> <system.web&g ...
更多文章请访问的我的博客
关注我的微博吧