让CSS更简洁、高效

了解CSS的查找匹配原理,让CSS更简洁、高效

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

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

匹配原理:

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

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

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


以下为引用的内容:

<style>
  DIV#divBox p span.red{color:red;}
<style>
<body>
  <div id="divBox">
   <p><span>s1</span></p>
   <p><span>s2</span></p>
   <p><span>s3</span></p>
   <p><span class='red'>s4</span></p>
  </div>
</body>

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

简洁、高效的CSS:

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

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

 一般写法:DIV#divBox

 更好写法:#divBox

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

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

 一般写法:span.red

更好写法:.red

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

p.red{color:red;}

span.red{color:#ff00ff}

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

3、尽量少使用层级关系

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

更好写法:.red{..}

4、使用class代替层级关系

一般写法:#divBox ul li a{display:block;}    

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

PS:看有些同学对从右到左的理论保持怀疑,下面贴出firefox和google的2篇相关css解释的文章,供大家参考

时间: 2024-10-26 15:45:30

让CSS更简洁、高效的相关文章

了解CSS的查找匹配原理,让CSS更简洁、高效

用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS: DIV#divBox p span.red{color:red;},按习惯我们对这个CSS 的理解是,浏览器先查找id为divBox的DIV元素,当找到后,再找其下的所有p元素,然后再查找所有span元素,当发现有span的class为red的时候,就应用该style.多么简单易懂的原理,可是这个理解却是完完全全相反.错误的. 匹配原理: 浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找

CSS清理浮动方式更简洁的方案

文章简介:清理浮动有很多种方式,像使用 br 标签自带的 clear 属,使用元素的 overflow,使用空标签来设置 clear:both 等等.但考虑到兼容问题和语义化的问题,一般我们都会使用如下代码来清理浮动. 清理浮动有很多种方式,像使用 br 标签自带的 clear 属,使用元素的 overflow,使用空标签来设置 clear:both 等等.但考虑到兼容问题和语义化的问题,一般我们都会使用如下代码来清理浮动. /* 清理浮动 */ .clearfix:after { visibi

更简洁的 CSS 清理浮动方式

清理浮动有很多种方式,像使用 br 标签自带的 clear 属,使用元素的 overflow,使用空标签来设置 clear:both 等等.但考虑到兼容问题和语义化的问题,一般我们都会使用如下代码来清理浮动. /* 清理浮动 */ .clearfix:after {  visibility:hidden;  display:block;  font-size:0;  content:" ";  clear:both;  height:0; } .clearfix {  zoom:1;

css选择器: 编写高效的CSS选择器

高效的CSS已经不是一个新话题,也不是一个我非得重拾的话题,但是,它却是自我在SKY工作以后,真正感兴趣并始终关注的一个话题.很多人或者忘记了,或者仅仅是没有意识到,CSS可以是高效的也可能导致低能.然而,我们可以不考虑当你自认为会的太少而使用了低效的CSS这种情况.这些规则只真正用在性能要求很高的网站上,这些网站对速度要求很高,任何一个页面可能含有成百上千个DOM元素.但是实践出真理,不管你是在打造下一个facebook 还是在开发一个本地的展示网页,多学点总是好的....CSS 选择器CSS

技巧小结:如何让 CSS 代码简洁而易于编写?

css|技巧 如何让 CSS 代码简洁而易于编写?这恐怕是许多开发者都关心的问题.我想,大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 组织你的样式表 尽管我们有种种 CSS 的开发工具,比如 TopStyle,比如 StyleMaster,它们可以让你对当前这个样式表里面定义了哪些规则,涉及哪些 class,哪些 ID 一目了然,但这不等于说你的样式表就组

优化JS和CSS更快地下载网页图片

文章简介:我关注JS和CSS的重点也是如何能够更快地下载图片.图片是用户可以直观看到的.他们并不会关注JS和CSS.确实,JS和CSS会影响图片内容的展示,尤其是会影响图片的展示方式(比如图片轮播,CSS背景图和媒体查询).但是我认为JS和CSS只是展示图片的方式.在页面加载的过程 我的大部分性能优化工作都集中在JavaScript和CSS上,从早期的Move Scripts to the Bottom和Put Stylesheets at the Top规则.为了强调这些规则的重要性,我甚至说

桌面管理软件趋势:更智能化更人性化更简洁化

文章描述:桌面管理会是怎样一个趋势?更智能化?更人性化?更简洁化? 最近收集和整理了一些桌面管理软件,才发现到桌面世界之丰富精彩,无奇不有.下图的ICON大家能叫出几款软件的名字呢?下面就几款比较有特色的软件做些简单的分析,和大家分享下.   1. Fences 桌面图标分类 (1)最大特色:第一次启动自动整理桌面图标并分类,但缺少定时和新文件夹自动整理功能. (2)工具选项卡:可以设置双击桌面自动隐藏图标,还有为图标建立快照,如不喜欢这个软件可以用快照还原到安装前的图标排列. (3)整体设计简

用组策略让win7上网浏览更快速高效

  1.首先打开运行对话框,并输入"gpedit.msc",点击确定按钮打开本地组策略编辑器; 2.然后依次展开"管理模板→Windows组件→Internet explorer"项,在窗口的右侧查找到"阻止绕过SmartScreen筛选器警告"并双击它; 3.在弹出来的窗口中选择"已禁用",点击"确定"按钮退出即可. 以上就是关于巧用组策略之让win7上网浏览更快速高效的具体操作步骤了         注

更简洁自由的在线销售平台:Sellfy

如今,随着只能移动的发展与普及,几大科技巨头通过在线商店让用户逐渐养成了消费数字产品的习惯,而由个人创建的数字产品也越来越多,在线销售平台深入人心,在我们的生活中占的比重越来越大. 创业公司Sellfy为个人数字内容的在线销售提供了一种简单的方法,你可以将自己创作的电子书.文件.图片.音乐.视频.软件等数字作品上传并生成销售页面. 用户在将文件上传后可对其进行一些简单实用的设置.例如,产品本身只需要输入名称.价格.描述,并上传一张预览缩略图.如果想让产品销售页面更有效地传播到社交网络,可以对其进