精简CSS代码,提高代码的可读性和加载速度

更新日期: 2017-11-20阅读量: 1854标签: css作者: 转载

前言

提高网站整体加载速度的一个重要手段就是提高代码文件的网络传输速度。之前提到过,所有的代码文件都应该是经过压缩了的,这可提高网络传输速度,提高性能。除了压缩代码之外,精简代码也是一种减小代码文件大小的手段。以下将讨论css代码相关的代码精简方案。


定义简洁的css规则

CSS的每条规则中都包含了规则的属性及属性值。定义简洁的CSS规则主要是指合并相关规则和定义简洁的属性值。

1. 合并相关CSS规则

CSS中的某些样式是由多个规则组成的,比如字体样式,就包含:font-family、font-style、font-size、font-variant、font-weight及line-height。如下是使用这些规则定义一个元素的字体样式:

p.reader-title {
font-family: Georgia, serif;
    font-size: 12px;
    font-style: italic;
    font-weight: bold;
    line-height: 30px;
}    

其实,这些字体相关的样式规则可以合并为一个样式规则,即font样式。如下是合并后的样式:

p.reader-title {
    font:italic bold 12px/30px Georgia, serif;
}

合并后的样式更简洁,代码量缩减了很多。类似的样式还有:background、border、margin、padding、text、list-style、transform、transition、animation等。可以在CSS规范中查看各样式对应的子规则。

2. 定义简洁的属性值

在CSS样式中,有些属性值可以使用更简洁的方式来展示,比如颜色和尺寸:

p.reader-title {
    color: #FFFFFF;
    font-size: 0.8em;
    padding: 0em;
}

颜色值#FF33EE可以简化为#F3E,尺寸值0.8em可以省略小数点之前的0,即简化为.8em。如果尺寸值为0,则可以省略单位。经过简化后,上面的样式定义即为:

p.reader-title {
    color: #F3E;
    font-size: .8em;
    padding: 0;
}


合并相同的定义

很多时候在CSS代码中,定义的规则会有相同的部分。可以合并这些相同的样式定义,达到代码重用和缩减代码的目的。比如如下的CSS代码:

.library-title {
    text-align: center;
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #FFF;
    font-size: 1.2em;
    line-height: 2em;
}
.search-title {
    text-align: center;
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #FFF;
    font-size: 1.4em;
    line-height: 2.5em;
}

以上的代码中,定义了两个CSS规则,这两个规则中大部分的定义是相同的,在这种情况下,即可合并定义这些相同部分,优化后的代码如下:

.library-title,.search-title {
    text-align: center;
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #FFF;
}
.library-title {
    font-size: 1.2em;
    line-height: 2em;
}
.search-title {
    font-size: 1.4em;
    line-height: 2.5em;
}

在CSS中,有些属性是可以继承的,比如color、font、line-height、list-style、text-align、text-indent、text-transform 等。如果某个父元素的多个子元素上设置了相同的可继承属性定义,则可以把相同的定义合并,且设置在父元素上。在网页设计中常见的问题是在CSS代码中字体设置混乱,并且会重复设置相同的字体。一般情况下,同一个网页中会有一个主要的字体,只需要把这个主字体设置在网页的body标签上即可。个别子元素的字体和主字体不同,则单独定义即可覆盖主字体。


删除无效的定义

CSS代码中的无效定义,并不会影响页面的功能展示,但会影响页面展示的性能。无效的定义在增加代码量的同时,也增加了浏览器对样式的解析时间,浏览器会根据CSS样式构建样式树,样式树中当然也包括了无效的样式。

无效的定义包括无效的规则及无效的样式属性。无效的规则一般是在开发过程中引入的,比如,在开发过程中,失效的CSS规则并没有得到及时的删除,而从直观上无法判断某个CSS规则是否已经失效,这应该也是CSS规则没有被删除的原因之一。对于这种情况,可以使用工具来进行查找,比如,用Chrome浏览器自带的开发工具就可以查找CSS代码中的无效样式,如下图所示。


图 使用Chrome浏览器自带的开发工具查找无效样式规则的结果图

当然,查找的结果只能作为参考,因为很多时候CSS规则对应的模块并没有加载,或者有些元素上的CSS类是通过JavaScript代码动态设置的,这需要在删除规则时仔细考虑。

无效的样式属性指的是设置的样式并没有起作用。比如设置内边距为负值等,以及一些因手误引起的属性值拼写错误等。如下是一些常见的无效样式属性:

.invalid-css {
    padding-top:-20px;/* 无效的属性值 */
    border: 1px soild #DDD;/* 拼写错误 */
}

同样,使用Chrome自带的开发工具可以检测无效的属性定义,下图是使用此工具的一个检测结果。


图 使用Chrome浏览器自带的开发工具查找无效样式属性及属性值的结果图

使用此工具需要注意的是,工具检测时列出了Chrome无法识别的CSS属性或者选择器,某些属性或者选择器是为其他浏览器添加的,并不是真正的无效定义,比如以上图中的选择器input:-ms-input-placeholder等。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/126

css加载会造成阻塞吗?

js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?所以,接下来我就来对css加载对DOM树的解析和渲染做一个测试。为了完成本次测试,先来科普一下,如何利用chrome来设置下载速度

CSS 技术技巧_提高你CSS技术的法则

CSS技术技巧法则:不要让你的代码脱离你的掌控,尽量简洁、掌握基础、保持代码的可复用性、面向对象的css、Css3了解他能做的以及你可以使用的部分、渐进增强与优雅降级、Css预处理工具...

CSS中可以和不可以继承的属性

这篇文章整理css中无继承性的属性、继承性的属性、所有元素可以继承的属性、内联元素可以继承的属性、块级元素可以继承的属性

CSS运算 calc()是怎么实现计算

CSS3 的 calc() 函数允许我们在属性值中执行数学计算操作。例如,我们可以使用 calc() 指定一个元素宽的固定像素值为多个数值的和。

不为人知的七个CSS知识点

如果你在日常工作中使用CSS,那么你的主要目标很可能集中在使事情看起来是正确的。最终得到的正确结果远比如何实现更重要。这意味着相比正确的语法和视觉效果我们更少关注CSS的实现原理。

用 CSS background 实现刻度线的呈现

简单的实现方式,大致有两种:一是用图片做背景,横向平铺线条图片;二是给每一块刻度区域平铺一个元素,然后用边线实现。身为一个“环保主义者”,这两种方式都不能让我满意。在看了 Lea Verou 的 CSS SECRETS 后,我受到了启发——可以用渐变背景的方式去实现。

如何写出一套可维护的CSS库?

如何写出一套可维护的CSS库?不妨谈谈CSS的设计模式/架构吧。接下来将为你讲述三个主流的CSS设计思想和一个最近通用的CSS设计思想:OOCSS、SMACSS、BEMCSS、METACSS。

Js如何动态修改css样式

使用obj.className来修改样式表的类名,使用obj.style.cssTest来修改嵌入式的css,使用obj.className来修改样式表的类名,使用更改外联的css文件,从而改变元素的css

工作中常用且容易遗忘的css样式整理,建议收藏

单行文本的溢出显示省略号(一定要有宽度),中英文自动换行,设置placeholder的字体样式,不固定高宽 div 垂直居中的方法,IOS 页面滑动卡顿,设置滚动条样式

前端利用css一行代码实现头像与国旗的融合

今天是国庆节,大家都在为庆祝祖国的生日而着急。每年这个时候,微信朋友圈都会流行用旗子装饰头像,那么,如何通过将国旗图片与我们的头像结合来快速得到想要的头像,如何简单的用CSS实现呢?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!