一周一章前端书·第22周:《HTML与CSS进阶教程》S02E09

第12章:性能优化

  • 高质量的CSS代码主要体现在2个方面:可维护性和高性能。
  • 有研究表明,Amazon每增加10毫秒的页面加载时间会导致销售额下降1%,而谷歌加载时间每增加500毫秒将导致收入减少20%。可见性能的提高对于大型网站是至关重要的。

12.1 属性缩写

  • CSS很多属性是可以缩写的。通过缩写属性可以减少字符数,使得CSS代码量更少。

盒模型缩写

/*
 * border属性缩写
 */
border-width:1px;
border-style:solid;
border-color:gray;
//等同于
border:1px solid gray;
/* 
 * padding属性缩写的三种方式
 */
padding: 1px;   
/*padding-top + padding-left + padding-bottom + padding-right都为1px*/
padding: 1px 2px;   
/*padding-top和padding-bottom都为1px,padding-left和padding-right为2px*/
padding: 1px 2px 3px 4px;  
/*顺时针方向设置padding-top、padding-right、padding-bottom、padding-left*/
/* 
 * margin属性缩写的三种方式
 */
margin: 1px;   
/*margin-top + margin-left + margin-bottom + margin-right都为1px*/
margin: 1px 2px;   
/*margin-margin-bottom都为1px,margin-margin-right为2px*/
margin: 1px 2px 3px 4px;  
/*margin-top、padding-right、margin-bottom、margin-left*/

背景缩写

/*
 * background属性缩写
 */
background-image: url(../img/weibo.png);
background-repeat: no-repeat;
background-position: 0px 10px;
//等同于
background: url(../img/weibo.png) no-repeat 0px 10px;

字体缩写

  • font 简写属性在一个声明中设置所有字体属性
/*
 * 字体及文本属性缩写
 */
font-style: italic;
font-variant:small-caps;
font-weight: bold;
font-size: 12px;
line-height: 1.5em;
font-family: "微软雅黑";
//等同于
font:italic small-caps bold 12px/1.5em "微软雅黑";

12.2 语法压缩

  • 通过对CSS语法进行精简压缩,减少CSS文件体积大小,从而减少页面数据传输量。

空格和回车

  • 网站发布的时候,可以通过工具进行压缩,去除CSS代码中的空格和回车。

结尾分号

  • 最后的样式属性的结尾分号可以忽略。
.wrapper{
    padding:10px;
    border:1px solid gray;
}
//可以简写成
.wrapper{
    padding:10px;
    border:1px solid gray
}

url的引号

  • background-imagecursor等属性的url()中的路径的引号可以忽略。
background-image:url('logo.jpg');
//可以简写成
background-image:url(logo.jpg);

属性值为0

  • 当属性值是以0开头的小数时,可以把开头的0去掉。
font-size:0.5em;
//可以简写成
font-size:.5em;

合并相同的样式

  • 可以通过群组选择器抽取相同的样式来合并代码,达到代码重用和精简代码的目的。

利用继进行合并

  • 利用CSS属性可继承的特性,可以把相同的属性定义在父元素上,从而精简代码。

12.3 压缩工具

12.4 图片压缩

12.4.1 JPEG、PNG、GIF的区别

  • JPEG体积较大,可以存储色调丰富的图像,如照片、高清图片等。但不支持透明;PNG是一种无损格式图片,可以无损压缩进行传输。PNG支持透明;GIF格式图像效果较差,但可以制作动画。
  • 总的来说,要展示高品质图片可以用JPEG格式,一般图片使用PNG格式,动图使用GIF格式。

12.4.2 图片压缩

12.5 高性能的选择器

  • 采用不同的CSS选择器,浏览器的解析速度也不一样。

12.5.1 选择器的解析原理

#column .conent div{border:1px solid gray;}
  • 我们书写CSS选择器是从左到右,但浏览器对选择器的规则是从右到左来解析的。如上述代码,浏览器会先查询所有的div元素,再筛选这些div元素中,有没有存在父元素为.content类的,最后从筛选条件中找出祖先元素id为column的。
  • 可见,最右侧的选择器是决定执行效率的关键,它也称为“关键选择器”。

12.5.2 CSS选择器的匹配效率

//由高到低的排序
id选择器 > class选择器 > 元素选择器 > 相邻选择器 > 子选择器 > 后代选择器 > 通配符选择器 > 属性选择器 >  伪类选择器

12.5.3 开发注意事项

  1. 避免使用低效率的选择器 :比如通配符选择、子选择器、后代选择等匹配的量非常大,效率较低,应该尽量少使用。但也不要因为追求性能,而增加过多的id、class来替代使用,以致泛滥成灾;
  2. 不要在id/class选择器前加元素名:在选择器前添加元素名会增加匹配量;
  3. 选择器的嵌套不要超过三层,关键选择器尽可能精准:选择器的层次越多,匹配的次数就越多,性能也就越慢;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,790评论 25 707
  • 10.恒温箱婴儿展览Incubated Babies Fairs 在20世纪之前,早产儿的存活率特别低。当Mart...
    留学咖啡馆阅读 1,189评论 0 2
  • 在C/C++中,左值(lvalue)和右值(rvalue)是用于规定表达式(expression)的性质。C++中...
    程序熊大阅读 2,321评论 1 6
  • 上周六是我们薛航计财部小聚的日子,一个难得放假又能相聚在一起不谈工作尽情享受假期的日子! 我们是一个团结又有爱的小...
    223了凡阅读 251评论 1 1