前端性能优化(1)----CSS优化

1.慎重选择高消耗的样式

高消耗的属性在浏览器进行绘制时需要进行大量的计算,特别消耗性能,因此在使用时要特别注意,主要包括:

  • border-radius
  • border-shadows
  • transforms
  • transparency
  • CSS filters (性能杀手)

2.避免过分重排

当元素重排的时候,浏览器需要重新计算布局的位置和大小,常见使元素重排的属性有:

  • width / height
  • padding / margin
  • position / top / bottom / right / left
  • border-width
  • font-size / font-weight
  • display
  • float
  • text-align / vertical-align
  • overflow / clear
  • line-height / min-height

3.正确使用Display属性

Display属性会影响页面的渲染,在使用的时候一定更要注意:

  • display:inline后面不应该再使用width、height、margin、padding以及float等;
  • display:inline-block后不应该再使用float;
  • display:block后不应该再使用vertical-align;
  • display:table-**后不应该再使用margin或者float;

4.不滥用Float

Float会改变文档流,在渲染的时候计算量比较大。尽量减少使用。

5.提升CSS选择器性能

CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是尽量避免使用消耗更多匹配时间的选择器。我们可以先了解下CSS选择器的匹配机制,以下以子选择器为例:

#header > a{font-weight:bold;}

大多数人的阅读习惯都是从左到右,在编写代码的时候也是习惯从左往右,而浏览器中CSS匹配方式则是恰恰相反,CSS选择器是按照从右往左的的规则进行匹配的,上述的子选择器看起来很高效,实则匹配开销很高,浏览器必须遍历完页面中的所有a元素,并且确定其父元素的id是否为header.
上述的例子中要是将子选择器改为后代选择器,则开销会更多,再遍历页面中所有a元素后还需要向其上级遍历直到根节点。

#header a{fongt-weigth:bold;}

在理解了CSS选择器从右到左的机制后,我们就会知道只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,知道找到和规则匹配的选择符。或者因此不匹配而退出。

(1)避免使用通用选择器
/* 不推荐 */
.content * {color: red;}

浏览器匹配文档中所有的元素后分别向上逐级匹配 class 为 content 的元素,直到文档的根节点。因此其匹配开销是非常大的,所以应避免使用关键选择器是通配选择器的情况。

(2)避免使用标签或class选择器限制id选择器
/* 不推荐 */
button #backButton {…}
/* 推荐 */
#newMenuIcon {…}
(3)避免使用标签限制class选择器
/* 不推荐 */
treecell.indented {…}
/* 推荐 */
.treecell-indented {…}
(4)避免使用多层标签选择器。使用class选择器替换,减少CSS查找
/* 不推荐 */
treeitem[mailfolder="true"] > treerow > treecell {…}
/* 推荐 */
.treecell-mailfolder {…}
(5)避免使用后代选择器
/* 不推荐 */
treehead treerow treecell {…}
/* 推荐 */
treehead > treerow > treecell {…}
/* 或者 */
.treecell-header {…}
(6)推荐使用继承
CSS中常见的可继承属性有:
  1. 字体系列属性
    font / font-family / font-weight / font-size / font-style / font-stretch ....
  2. 文本系列属性
    text-indent / text-align / line-height / word-spacing / letter-spacing / color / direction ...
  3. 表格布局属性
    caption-side / border-collapse / border-spacing / empty-cells / table-layout
  4. 列表布局属性
    list-style-type / list-style-image / list-style-position / list-style
CSS中常见的不可继承属性有:
  1. 文本属性
    vertical-align / text-decoration / text-shadow / white-space
  2. display属性
  3. 背景属性
    background / background-color / background-image / background-repeat / background-position
  4. 定位属性
    float / clear / position / top / right / bottom / left / overflow / clip / z-index
  5. 元素模型属性
    元素常见的带单位的属性(如:width / height / border / margin / padding等)

注:内联元素不能继承text-indent和text-align这两个文本属性

/* 不推荐*/
#bookmarkMenuItem > .menu-left { list-style-image: url(blah) }
/* 推荐 */
#bookmarkMenuItem { list-style-image: url(blah) }
参考文档:

前端开发规范
CSS中可以继承和不可以继承的属性

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,828评论 0 0
  • CSS 是什么 css(Cascading Style Sheets),层叠样式表,选择器{属性:值;属性:值}h...
    崔敏嫣阅读 1,469评论 0 5
  • 一、CSS入门 1、css选择器 选择器的作用是“用于确定(选定)要进行样式设定的标签(元素)”。 有若干种形式的...
    宠辱不惊丶岁月静好阅读 1,583评论 0 6
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,023评论 0 1
  • 本课来自http://www.imooc.com/learn/9请不要用作商业用途。 HTML5 HTML介绍 H...
    PYLON阅读 3,192评论 0 5