zoukankan      html  css  js  c++  java
  • css匹配规则及性能

    一、CSS是如何匹配样式的

    样式系统从最右边的选择符开始向左进行匹配规则。只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,直到找到和规则匹配的元素,或者因为不匹配而退出。

    二、CSS选择器性能排行(从高到低)

        1.id选择器(#myid)
        2.类选择器(.myclassname)
        3.标签选择器(div,h1,p)
        4.相邻选择器(h1+p)
        5.子选择器(ul > li)
        6.后代选择器(li a)
        7.通配符选择器(*)
        8.属性选择器(a[rel="external"])
        9.伪类选择器(a:hover,li:nth-child)

     数据来源于Google 资深web开发工程师Steve Souders

    三、书写规则注意事项

    1.不要在ID选择器使用的同时再使用标签或类选择器了,例如 "div#content" 或者 "#content.text"。

    原因:样式系统从最右边的选择符开始向左进行匹配规则。只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,直到找到和规则匹配的元素,或者因为不匹配而退出。,而在html中ID是唯一的,如果真的是用了 "div#content",浏览器通过ID定位到了具体的元素,然后发现左侧还是标签选择器,那么就会继续匹配,继续查找元素,这样无疑损耗了浏览器的性能,影响了渲染时间。

    2.不要在类选择器时用标签选择器,例如div .text

    原因:从css的效率来看,类选择器(class)是比标签选择器要好,这样的写法只会增加了查找的难度,如果真的是根据标签来区分样式的话,考虑写不同的class,例如.container .text

    3.如果明确dom结构,能使用子选择器就不要使用后代选择器,例如div a

    如果你的写法是这样 "div a",而实际上div 跟 a 是父子关系,如果合适更建议是这么用 "div>a",这样效率高一些,但是不是最好的方案,下面这一点的方案会更好一些。

    4.使用类选择器替代后代选择器和子选择器

    后代选择器在CSS中是最昂贵的选择器,尤其是把它和标签或通配符放在一起! 毫无疑问,我们要想其他的方式来替换这种书写方式,那么可以考虑这样的写法:div对应的为".div-text" a对应的为".div-text-a",从命名上来关联两者,在查看的时候逻辑也会清晰很多。

    5.尽量使用继承来避免写重复的样式

    #text{
    
    }  
    
    #text>.span:{
      font-size:24px;
    }  
    #text>.a{
      font-size:24px;
    } 

    这种写法应改为

    #text{
       font-size:24px;
    }
    

    6.能不使用通配符选择器(*)和属性选择器就尽量不要用

  • 相关阅读:
    如何去除电脑上软件图标的快捷键小箭头
    三维地图如何加载gltf数据代码
    实时获取三维地图相机角度,改变三维观赏角度
    完美解决win10家庭版本系统无法远程连接问题
    svn提交批量选中文件
    oracle sql developer 如何支持多个窗体,打开多张表,多个tab,同时查看多个数据表
    sqldevelper批量导出sql文件
    原生javascript与jquery的区别(持续记录)
    iframs里子,孙页面与父,爷页面,以及多层嵌套的iframe中,js变量,方法以及元素的互相获取,调用
    Eclipse如何将多行注释的星号去掉
  • 原文地址:https://www.cnblogs.com/94pm/p/9110302.html
Copyright © 2011-2022 走看看