掌握CSS匹配原理,编写完美CSS代码

开发 前端
大家应该了解浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找,这里就向大家描述一下CSS匹配原理和如何编写简洁高效的CSS代码。

本节和大家重点讨论一下CSS查找匹配原理和简洁高效的CSS代码的编写,所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,相信本文介绍一定会让你有所收获的。

了解CSS的查找匹配原理,写更简洁高效的CSS代码

使用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS:

 

  1. DIV#divBoxpspan.red{color:red;}  
  2.  

按习惯我们对这个CSS的理解是,浏览器先查找id为divBox的DIV元素,当找到后,再找其下的所有p元素,然后再查找所有span元素,当发现有span的class为red的时候,就应用该style。多么简单易懂的原理,可是这个理解却是完完全全相反、错误的。

CSS匹配原理:

浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如之前说的DIV#divBoxpspan.red{color:red;},浏览器的查找顺序如下:

先查找html中所有class='red'的span元素,找到后,再查找其父辈元素中是否有p元素,再判断p的父元素中是否有id为divBox的div元素,如果都存在则CSS匹配上。

浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。比如如下html和css:

  1. <style> 
  2. DIV#divBoxpspan.red{  
  3. color:red;  
  4. }  
  5. <style> 
  6. <body> 
  7. <dividdivid="divBox"> 
  8. <p><span>s1</span></p> 
  9. <p><span>s2</span></p> 
  10. <p><span>s3</span></p> 
  11. <p><spanclassspanclass='red'>s4</span></p> 
  12. </div> 
  13. </body> 
  14.  

如果按从左到右查找,哪会先查找到很多不相关的p和span元素。而如果按从左到右的方式进行查找,则首先就查找到<spanclass='red'>的元素。firefox称这种查找方式为keyselector(关键字查询),所谓的关键字就是样式规则中最后(最右边)的规则,上面的key就是span.red。

简洁、高效的CSS:

所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误:

1.不要在ID选择器前使用标签名

一般写法:DIV#divBox

更好写法:#divBox

解释:因为ID选择器是唯一的,加上div反而增加不必要的CSS匹配。

2.不要再class选择器前使用标签名

一般写法:span.red

更好写法:.red

解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉,比如你css文件中定义如下: 

  1. p.red{color:red;}  
  2. span.red{color:#ff00ff}  
  3.  

如果是这样定义的就不要去掉,去掉后就会混淆,不过建议最好不要这样写

3.尽量少使用层级关系

一般写法:#divBoxp.red{color:red;}

更好写法:.red{..}

4.使用class代替层级关系

一般写法:#divBoxullia{display:block;}

更好写法:.block{display:block;}

【编辑推荐】

  1. CSS中display属性的妙用 
  2. 常用CSS+DIV排版技术用法剖析
  3. CSS中border和clear两大属性用法揭秘
  4. 实例解析CSS DIV绝对定位与固定定位用法
  5. 解读DIV CSS网页布局中CSS无效十个原因


 

责任编辑:佚名 来源: java3z.com
相关推荐

2010-09-01 11:08:09

CSS

2010-09-03 16:07:48

CSS

2010-08-31 13:32:12

CSS

2010-08-31 13:06:45

CSS

2011-04-29 10:22:49

CSS高性能Web开发

2011-05-27 11:01:10

DreamweaverCSS

2010-09-07 13:04:14

CSS Hack

2010-08-26 15:27:57

CSS

2010-09-01 15:28:11

CSSexpression

2023-07-28 10:21:46

CSS前端

2016-09-07 19:58:47

CSS代码Web

2017-08-28 14:58:19

CSSFlexbox注释格式优化

2017-09-25 21:00:44

代码开发完美

2010-09-09 13:59:55

CSS

2010-09-13 10:11:06

CSSDWMX

2023-10-24 07:48:14

CSSobject-fit

2017-10-10 16:28:51

前端CSS建议

2010-09-14 13:49:38

CSS代码

2010-09-16 15:32:20

CSS选择器

2011-08-02 09:49:10

CSS
点赞
收藏

51CTO技术栈公众号