一、CSS选择符

CSS选择符由一些初始化参数组成,这些参数指明了要应用这个CSS规则的页面元素。

作为一个网站的前端开发工程师,应该避免编写一些常见的开销很大的CSS选择符模式,尽量编写高效的CSS选择符,从而加快页面的渲染速度,缩短页面呈现时间。

二、浏览器读取选择器

浏览器读取选择器,遵循的原则是从选择器的右边到左边读取。换句话说,浏览器读取选择器的顺序是由右到左进行的。

2.1 举例

浏览器读取选择器的顺序如下:

  1. 查找页面中所有 class=red 的 span 元素
  2. 查找 1. 结果的父元素中是否有 p 元素
  3. 查找 2. 结果的父元素中是否有 id=box 的 div 元素

2.2 从右到左的用处

  • 尽早的过滤掉无关的样式规则
  • 尽快的匹配到目标元素

2.3 关键选择器

选择器的最后一部分,也就是选择器的最右边部分被称为 关键选择器 (keyselector),它将决定 CSS 选择器的效率。

三、选择器的效率

3.1 从高到低

内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 元素(类型)选择器 = 伪元素选择器

3.2 总结

ID和类名用于关键选择器上效率是最高的,而CSS3的仿伪类和属性选择器,虽然使用方便,但其效率却是最低的

四、选择器性能优化

根据以上「浏览器读取选择器」与「选择器的效率」原则,我们可以通过避免不恰当的使用,提升 CSS 选择器的性能。

4.1 避免使用通用选择器

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

4.2 不要在编写id规则时用标签名或类名

4.3 不要在编写class规则时用标签名

4.4 把多层标签选择规则用class规则替换,减少css查找

4.5 避免使用子选择器

后代选择器在CSS中是最昂贵的选择器。贵得要命——尤其是把它和标签或通配符放在一起!

标签后面最好永远不要再增加子选择器

4.6 依靠继承

4.7 避免单规则的属性选择器

属性选择器根据元素的属性是否存在或其属性值进行匹配,如下例规则会把herf属性值等于 ”#index” 的链接元素设置为红色:

但其匹配开销是非常大的,浏览器先匹配所有的元素,检查其是否有href属性并且herf属性值等于”#index”, 然后分别向上逐级匹配class为selected的元素,直到文档的根节点。所以应避免使用关键选择器是单规则属性选择器的规则。

4.8 避免类正则的属性选择器

CSS3添加了复杂的属性选择器,可以通过类正则表达式的方式对元素的属性值进行匹配。当然这些类型的选择器定是会影响性能的,正则表达式匹配会比基于类别的匹配会慢很多。大部分情况下我们应尽量避免使用 *=, |=, ^=, $=, 和 ~=语法的属性选择器。

4.9 移除无匹配的样式

移除无匹配的样式,有两个好处:

  • 第一,删除无用的样式后可以缩减样式文件的体积,加快资源下载速度;
  • 第二,对于浏览器而言,所有的样式规则的都会被解析后索引起来,即使是当前页面无匹配的规则。移除无匹配的规则,减少索引项,加快浏览器查找速度;

五、总结

  1. 网站编写CSS时,应该优先考虑使用class选择器,避免使用通配符选择器(*)和属性选择器(a[rel=”external”]),后代选择器与标签选择器结合使用也应避免。
  2. 使用id选择器的性能最好,但是编写时要注意其唯一性,谨慎使用。
  3. CSS3选择器(例如::nth-child(n)第n个孩子)在帮助我们锁定我们想要的元素的同时保持标记的干净和语义化,但事实是,这些花哨的选择器让更多的浏览器资源被密集使用。如果你关心页面性能的话,他们真不该被使用!

扩展阅读
前端面试题-CSS选择器
前端面试题-CSS优先级

前端面试题-CSS选择器性能优化相关推荐

  1. web前端面试题-css方面

    web前端面试题-css 1. display: none; 与 visibility: hidden; 的区别 2 link 与 @import 的区别 3 display,float,positi ...

  2. 2018前端面试题 css 部分

    总结一些面试遇到的问题,答案是百度的, css部分 1/一个左中右布局占满屏幕,其中左右两块是固定宽度200 ,中间自适应宽,要求先加载中间块 (1)css优先级顺序:id>class>标 ...

  3. 2021前端面试题汇总——查漏补缺

    博主最近在持续面试(被虐)中,本片文章将持续更新 系列文章 大厂前端面试题总结(CSS篇) 大厂前端面试题总结(ES6篇) 大厂前端面试题总结(Vue篇) 大厂前端面试题总结(浏览器篇) 大厂前端面试 ...

  4. 大厂前端面试题总结(浏览器)

    本片文章如题主要讲解浏览器相关面试题,每道面试题都是从网上找的参考资料整理而来,侵删.部分未添加原文链接(如果想要了解面试题的更多信息,只需要点击每道面试后面的参考链接即可): 这一系列纯粹是为了个人 ...

  5. 前端面试题汇总CSS篇

    转载自:https://www.cnblogs.com/zhangshuda/p/8465043.html 前端面试题 ----css篇 1.css盒模型有哪些及区别content-box borde ...

  6. 重要前端面试题,来自一个2022年面试大牛(上)

    面经链接 2022高频前端面试题--CSS篇 - 掘金 精心整理HTML/CSS面试题(2022求职必看) - 掘金(今天正在看的) 一.css面试题 1.Dom事件模型(分为捕获和冒泡) 一个事件发 ...

  7. 前端面试题:不积跬步无以至千里;不积小流无以成江海;程序人生的精彩需要坚持不懈、脚踏实地的积累。

    前言 HTML面试题 CSS面试题 CSS的性能优化:–transform与position的区别.硬件加速工作原理及注意事项 JavaScript面试题 ES6面试题 var.let.const之间 ...

  8. 前端面试题全面整理-带解析 涵盖CSS、JS、浏览器、Vue、React、移动web、前端性能、算法、Node...

    来源 | https://www.html.cn/interview/13950.html 本篇文章整理总结了一些前端面试题,涵盖面很广,并且面的都是知名大厂,所以这些题还是很有代表性的,都掌握以后一 ...

  9. css、js、浏览器、vue、react、移动web、前端性能、算法、node前端面试题

    前端面试题全面整理-带解析 涵盖(css.js.浏览器.vue.react.移动web.前端性能.算法.node) 前言 上期整理了一些vue面试题,本期整理总结这些前端面试题,涵盖面很广,并且面的都 ...

最新文章

  1. erlang web socket参考。
  2. Windows中现在有独立的Linux文件夹系统
  3. 并发编程协程(Coroutine)之Gevent
  4. 四则运算3(二柱子同学的第三炼狱)
  5. java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement
  6. SAP JCo的Server/Client编程实例
  7. [禅悟人生]谦虚有助于自我消融
  8. C++自学11:命名空间(using namespace)
  9. redis未授权反弹shell
  10. 交出20分钟后就得到面试通知的一份答卷
  11. vmware 安装 mac os 修改序列号
  12. 字符串函数---atoi()函数详解及实现(完整版)
  13. mac无法更新计算机的启动配置,MacOS 更新遇到的问题及重装系统
  14. 关于我装黑苹果的那些事儿
  15. css3的nth为什么不生效,CSS:nth-​​child(偶数)选择器背景颜色不起作用
  16. 抽象类或接口的实例化问题
  17. Git和Mercurial(Hg)的分析
  18. 如何减少上下文切换?
  19. Python爬虫采集抓取:Python3.x+Fiddler 采集抓取 APP 数据
  20. Streaming的介绍

热门文章

  1. 算法题存档20190127
  2. java多态的好处_java萌新,对象的多态有什么好处?
  3. 2022春节法律思维
  4. WebFlux响应式编程基础之 4 reactive stream 响应式流
  5. golang位左移赋值
  6. 使用Mysql工具进行数据清洗
  7. spring cloud zuul 原理简介和使用
  8. jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等
  9. selenium动态网页爬虫复习
  10. CPU占用率过高和OOM场景下如何排查问题