BearRui(AK-47)
花开有时,错过了一日便错过了一季,就象人生错过了相遇,就不再找寻到美丽的相聚
随笔- 39  文章- 2  评论- 1287 
博客园  首页  新随笔  联系  管理  订阅 订阅
了解CSS的查找匹配原理,让CSS更简洁、高效


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

  用了这么多年的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解释的文章,供大家参考

  mozilla firefox:https://developer.mozilla.org/en/Writing_Efficient_CSS

  google page-speed:http://code.google.com/intl/zh-CN/speed/page-speed/docs/rendering.html

    有需要请查看:高性能WEB开发系列

[作者]:BearRui(AK-47)
[博客]: http://www.cnblogs.com/BearsTaR/
[声明]:本博所有文章版权归作者所有(除特殊说明以外),转载请注明出处.
绿色通道:好文要顶关注我收藏该文与我联系
posted on 2010-06-08 08:43 BearRui(AK-47) 阅读(6148) 评论(86) 编辑 收藏
发表评论
1907860
 回复 引用 查看   
#1楼 2010-06-08 08:52 | 南通SEO      
哈哈,顶一下
 回复 引用 查看   
#2楼 2010-06-08 08:59 | angevil      
又学到知识了!
 回复 引用 查看   
#3楼[楼主] 2010-06-08 09:00 | BearRui(AK-47)      
呵呵,谢谢楼上二位支持!
 回复 引用 查看   
#4楼 2010-06-08 09:07 | John29      
第一次知道从右到左
 回复 引用   
#5楼 2010-06-08 09:15 | google1111[未注册用户]
请问你是怎么知道浏览器解析css样式是从右到左的。
用什么工具分析出来的呢??

 回复 引用 查看   
#6楼 2010-06-08 09:17 | 西蜮      
虽然前端不在行,但这种原理总是能让人学到不少东西,支持下~~~
 回复 引用 查看   
#7楼[楼主] 2010-06-08 09:20 | BearRui(AK-47)      
@google1111
不是分析出来的,是看firefox的官方文档,并且google的page-speed中也有文章是这样介绍的。目前我也不知道有啥工具可以分析出来。

 回复 引用 查看   
#8楼[楼主] 2010-06-08 09:21 | BearRui(AK-47)      
@西蜮
谢谢

 回复 引用 查看   
#9楼 2010-06-08 09:21 | 牛牛博客      
哎の 不错哦!
 回复 引用 查看   
#10楼 2010-06-08 09:31 | 司徒正美      
求从右到左的出处!
 回复 引用   
#11楼 2010-06-08 09:32 | deded[未注册用户]
d
 回复 引用 查看   
#12楼 2010-06-08 09:36 | 超级奶崽      
有时候是不得不加标签名的~~~ 看情况而定
 回复 引用 查看   
#13楼[楼主] 2010-06-08 09:39 | BearRui(AK-47)      
引用司徒正美:求从右到左的出处!

已在随笔的最后加上了2个相关链接,请查看。

 回复 引用 查看   
#14楼[楼主] 2010-06-08 09:39 | BearRui(AK-47)      
引用超级奶崽:有时候是不得不加标签名的~~~ 看情况而定

呵呵,只是解释下这个原理,并不是觉得所有情况都不加标签好。

 回复 引用 查看   
#15楼 2010-06-08 09:39 | _龙猫      
震惊啊.
 回复 引用 查看   
#16楼 2010-06-08 10:19 | xiaowen      
首先非常感谢楼主,让我又学到了新的东西,不过一些观点不是很赞同。

引用1.不要在ID选择器前使用标签名
一般写法:DIV#divBox
更好写法:#divBox
2.不要再class选择器前使用标签名
一般写法:span.red
更好写法:.red


1和2,不是很赞同。
我认为,作为一个程序员,性能相差不是很明显的时候,写出“更容易理解”的代码比“更快”的代码更重要。

引用 3.尽量少使用层级关系
一般写法:#divBox p .red{color:red;}
更好写法:.red{..}
4.使用class代替层级关系
一般写法:#divBox ul li a{display:block;}
更好写法:.block{display:block;}


3和4,我的观点跟你相反。我认为,html简洁比css简洁更重要!

1)使用 css 层级关系,是让html更简介的一个很好的手段,同时CSS代码也更容易理解。
2)使用 CSS 层级,可以很精确的定位html标签,
这样在多人项目中,不容易发生CSS不小心用在不该用的地方的低级错误。
3)就像 #divBox ul li a 这个,很明显是用于菜单、导航、目录之类的。
如果是我,我会考虑改成 ul#menu li a{diaplay:block}。给 a 标签添加 class="block",看起来就像是直接在 html 中给a添加样式一样。

总的来说,我觉得css性能的损失,跟js导致的性能损失比起来,实在可以忽略不计。
而且我认为,这个工作留给浏览器作优化会更好,就算不优化也没关系。


 回复 引用 查看   
#17楼 2010-06-08 10:25 | dudu      
谢谢分享!
 回复 引用 查看   
#18楼 2010-06-08 10:26 | 寻自己      
相当之好 ~
 回复 引用 查看   
#19楼 2010-06-08 10:32 | xiaowen      

最后提个建议,在举例的时候,最好不要使用
span.red{color:red;}
这样的例子,会给新手很不好的暗示。
具体原因跟前面说的给 a 标签添加 block 是类似的。

 回复 引用 查看   
#20楼[楼主] 2010-06-08 10:38 | BearRui(AK-47)      
引用xiaowen:
首先非常感谢楼主,让我又学到了新的东西,不过一些观点不是很赞同。

引用1.不要在ID选择器前使用标签名
一般写法:DIV#divBox
更好写法:#divBox
2.不要再class选择器前使用标签名
一般写法:span.red
更好写法:.red


1和2,不是很赞同。
我认为,作为一个程序员,性能相差不是很明显的时候,写出“更容易理解”的代码比“更快”的代码更重要。

引用 3.尽量少使用层级关系
一般写法:#divBox p .red{color:red;}
更好写法:.red{....


关于你说的第1个问题,我同意你说的写出"更容易理解"的代码,但是我比较喜欢直接在id上加前缀来识别标签,而不是在前面加tag,比如DIV#box,我一般喜欢直接这样写#divBox,因为直接在id中加入前缀,在css,JS中都比较容易理解,DIV#box写法影响CSS性能,而且在JS中document.getElementbyId("box")就不好理解了。

至于第2个层级关系,我也认为不需要在任何地方都去掉层级关系,在有些时候层级关系可以当作命名空间来看,区别不同开发人员写的相同clsss的代码。

其实CSS性能影响确实很少,测试如果页面中有2W个元素,使用层级关系的style比id的style才慢几十毫秒。我写这篇随笔,其实主要是让大家知道这个匹配原理,我觉得这个还是很需要知道的。
 回复 引用 查看   
#21楼[楼主] 2010-06-08 10:39 | BearRui(AK-47)      
引用xiaowen:
最后提个建议,在举例的时候,最好不要使用
span.red{color:red;}
这样的例子,会给新手很不好的暗示。
具体原因跟前面说的给 a 标签添加 block 是类似的。


呵呵,谢谢建议。

 回复 引用 查看   
#22楼[楼主] 2010-06-08 11:11 | BearRui(AK-47)      
@寻自己
@dudu

谢谢二位支持,^_^

 回复 引用 查看   
#23楼 2010-06-08 11:40 | 乐章      
html简洁比css简洁更重要
和第4条相反

 回复 引用 查看   
#24楼 2010-06-08 12:25 | xiaowen      
@BearRui(AK-47)
引用
...,但是我比较喜欢直接在id上加前缀来识别标签,而不是在前面加tag,比如DIV#box,我一般喜欢直接这样写#divBox,因为直接在id中加入前缀,在css,JS中都比较容易理解,DIV#box写法影响CSS性能,而且在JS中document.getElementbyId("box")就不好理解了。


命名规范只要在团队内统一就好,我觉得没有什么绝对对错的问题。
我不会考虑写出#box这样的名字,就算两个div的样式一模一样,我也会考虑写成 #links_box, #latest_comments_box,#top10_tuijian_box,#top10_pv_box ....

用上 jQuery 之后,就再没写过 document.getElementbyId("box") 这样的代码 :)

引用...,在有些时候层级关系可以当作命名空间来看,区别不同开发人员写的相同clsss的代码。


嗯,又学到一个形象的比喻 :)

引用其实CSS性能影响确实很少,测试如果页面中有2W个元素,使用层级关系的style比id的style才慢几十毫秒。我写这篇随笔,其实主要是让大家知道这个匹配原理,我觉得这个还是很需要知道的。


其实跑题的人是我,你在讨论性能问题,我却给你回复最佳实践之类的东西...

如果是我,我会在提四点建议前面加上一句:“如果只从性能方面考虑,有如下建议”,或者是,“对性能有非常苛刻要求的朋友,可以考虑以下建议”

thanks for your great work again!!

 回复 引用 查看   
#25楼 2010-06-08 12:33 | xiaowen      
刚看了你的“web高性能开发系列”,都非常的好,很多问题之前都没有深入了解过!

thanks for your great work again and again!!

 回复 引用 查看   
#26楼[楼主] 2010-06-08 12:36 | BearRui(AK-47)      
引用xiaowen:
刚看了你的“web高性能开发系列”,都非常的好,很多问题之前都没有深入了解过!

thanks for your great work again and again!!


呵呵,非常感谢您的支持.

 回复 引用 查看   
#27楼 2010-06-08 13:42 | Freewind      
学习,以前是认为从左到右解析的...
 回复 引用 查看   
#28楼 2010-06-08 13:46 | ohaiyo      
一般写法:span.red
更好写法:.red

前者比后者要更快吧? 因为getElementsByTag的速度是仅次于getElementById(最快的),我不清楚浏览器的实现是不是这样~!

 回复 引用 查看   
#29楼 2010-06-08 13:47 | ohaiyo      
哦,从右到左查找~ 明,
 回复 引用 查看   
#30楼 2010-06-08 13:51 | petersun      
学习了,现在也才明白!
 回复 引用 查看   
#31楼[楼主] 2010-06-08 13:57 | BearRui(AK-47)      
引用ohaiyo:
一般写法:span.red
更好写法:.red

前者比后者要更快吧? 因为getElementsByTag的速度是仅次于getElementById(最快的),我不清楚浏览器的实现是不是这样~!

呵呵,并不是这样,css解析并不是使用JS函数去查找标签的,是使用自己的算法。

 回复 引用 查看   
#32楼[楼主] 2010-06-08 13:57 | BearRui(AK-47)      
引用Freewind:学习,以前是认为从左到右解析的...


我以前也是一样以为的,

 回复 引用   
#33楼 2010-06-08 14:34 | STYLE222[未注册用户]
这个真让人很震惊啊
 回复 引用 查看   
#34楼 2010-06-08 14:43 | THRONE      
看过 顶你一个

 回复 引用 查看   
#35楼[楼主] 2010-06-08 14:50 | BearRui(AK-47)      
引用THRONE:看过 顶你一个

谢谢

 回复 引用 查看   
#36楼 2010-06-08 15:49 | 北山      
第四条这样写不就违背css与html分离的原则了么,这样要给li里的a都添加一个block类么,
 回复 引用 查看   
#37楼[楼主] 2010-06-08 15:52 | BearRui(AK-47)      
引用北山:第四条这样写不就违背css与html分离的原则了么,这样要给li里的a都添加一个block类么,

每种方式都有利有弊,需要视具体情况来选择使用,如果你的a很多的话,给每个a加1个class='block'确实不方便。

 回复 引用 查看   
#38楼 2010-06-08 16:28 | 黑色      
CSS选择器是从右到左这个是在看一篇英文博客的时候看到过的了,
至于第3第4种方法,这个要看实际情况的了,不好说的,要看前端人员的经验了,网站越大越难写

 回复 引用 查看   
#39楼[楼主] 2010-06-08 16:34 | BearRui(AK-47)      
呵呵,看来大家对3,4种方法都各有意见,其实这是非常正常,正如楼上说的,还是要看实际情况。
 回复 引用 查看   
#40楼 2010-06-08 18:29 | Lebron      
学习了
 回复 引用 查看   
#41楼 2010-06-08 18:30 | 囧月      
tag#id 经常做这种蠢事...
 回复 引用 查看   
#42楼 2010-06-08 18:43 | JerryKai      
这个一定要推荐下!
长见识啦!

 回复 引用 查看   
#43楼[楼主] 2010-06-08 20:28 | BearRui(AK-47)      
引用JerryKai:
这个一定要推荐下!
长见识啦!

呵呵,多谢推荐!

 回复 引用 查看   
#44楼[楼主] 2010-06-08 20:29 | BearRui(AK-47)      
引用囧月:tag#id 经常做这种蠢事...

:D

 回复 引用 查看   
#45楼 2010-06-08 21:42 | neve      
分析的很到位哦,但是,这样的话,貌似对效率没有什么影响的!
 回复 引用 查看   
#46楼[楼主] 2010-06-08 23:18 | BearRui(AK-47)      
引用neve:分析的很到位哦,但是,这样的话,貌似对效率没有什么影响的!

不知道你说的效率是指哪方面的效率

 回复 引用 查看   
#47楼 2010-06-09 00:26 | cry      
好文章,顶一下!
 回复 引用 查看   
#48楼 2010-06-09 09:21 | websimple      
文章很精彩,推荐一下!
 回复 引用 查看   
#49楼 2010-06-09 09:21 | websimple      
好文章,顶一下!
 回复 引用 查看   
#50楼 2010-06-09 10:07 | dotNetDR_      
如果按从左到右查找,哪会先查找到很多不相关的p和span元素。
而如果按从左到右的方式进行查找,则首先就查找到<span class='red'>的元素。

第二句写错了.
你上一句说,从左到右

下一句又说,从左到右
应该是从右到左..

左右不分的家伙.

 回复 引用 查看   
#51楼 2010-06-09 10:07 | dotNetDR_      
文章很精彩,推荐一下!
 回复 引用 查看   
#52楼[楼主] 2010-06-09 10:24 | BearRui(AK-47)      
引用dotNetDR_:
如果按从左到右查找,哪会先查找到很多不相关的p和span元素。
而如果按从左到右的方式进行查找,则首先就查找到<span class='red'>的元素。

第二句写错了.
你上一句说,从左到右

下一句又说,从左到右
应该是从右到左..

左右不分的家伙.


谢谢指出问题,已修改回来。

 回复 引用 查看   
#53楼[楼主] 2010-06-09 10:24 | BearRui(AK-47)      
多谢楼上几位的支持和推荐
 回复 引用 查看   
#54楼 2010-06-09 11:30 | DAP      
好文章,顶一下!
 回复 引用 查看   
#55楼 2010-06-09 17:01 | 站在天空下的猪      
好文章,顶一下!
 回复 引用 查看   
#56楼[楼主] 2010-06-09 17:06 | BearRui(AK-47)      
呵呵,看来懒人评论功能还不错,不少人点击啊。
 回复 引用 查看   
#57楼 2010-06-10 10:46 | simon4545      
这种技术文章要来就一起来,前两个月在一个国外的ppt上看到这个,如果不到二十天,在国内就到处发现,这种css高效选择之类的文章。

我们不能比国外早一步吗?

 回复 引用 查看   
#58楼[楼主] 2010-06-10 10:53 | BearRui(AK-47)      
引用simon4545:
这种技术文章要来就一起来,前两个月在一个国外的ppt上看到这个,如果不到二十天,在国内就到处发现,这种css高效选择之类的文章。

我们不能比国外早一步吗?


呵呵,哪你首先应该问为什么我们不能早一步比国外的先做出自己的浏览器,用自己的浏览器核心了?

你用的都是别人的东西,底层是怎么实现的,当然是别人会比你先知道。要是别人不说,你可能永远都不会知道。

 回复 引用 查看   
#59楼 2010-06-10 14:20 | vruc      
好文章,顶一下!
 回复 引用 查看   
#60楼 2010-06-14 10:57 | 飞天小肥猪(膘叔)      
好文章,顶一下!
 回复 引用 查看   
#61楼 2010-06-14 18:31 | Zmy_david      
看不懂哦,~_~
 回复 引用 查看   
#62楼 2010-06-14 18:31 | Zmy_david      
文章写的一般般,:)
 回复 引用 查看   
#63楼 2010-06-14 18:31 | Zmy_david      
好文章,顶一下!
 回复 引用 查看   
#64楼 2010-06-14 18:31 | Zmy_david      
文章很精彩,推荐一下!
 回复 引用 查看   
#65楼 2010-06-14 18:31 | Zmy_david      
博主还需努力啊!
 回复 引用 查看   
#66楼[楼主] 2010-06-15 02:29 | BearRui(AK-47)      
@Zmy_david
楼上的这是...

 回复 引用 查看   
#67楼 2010-06-15 16:33 | Zmy_david      
呵呵~我不知道点上面这里就有回复了的。不好意思!~~
 回复 引用 查看   
#68楼[楼主] 2010-06-16 21:34 | BearRui(AK-47)      
呵呵,没关系,^_^
 回复 引用 查看   
#69楼 2010-06-18 11:33 | Tear Y      
文章很精彩,推荐一下!
 回复 引用 查看   
#70楼 2010-06-18 14:30 | Vision Ding      
好文章,顶一下!
 回复 引用 查看   
#71楼 2010-06-26 14:09 | ﹎敏ō      
学习了!谢谢
 回复 引用 查看   
#72楼[楼主] 2010-06-26 17:59 | BearRui(AK-47)      
呵呵,谢谢楼上几位。。。
 回复 引用 查看   
#73楼 2010-07-02 11:27 | hsj2010      
震惊了!学习了。。。
 回复 引用 查看   
#74楼 2010-07-08 20:04 | Mr Chai      
以后希望多出些这样的文章。
 回复 引用 查看   
#75楼[楼主] 2010-07-08 20:41 | BearRui(AK-47)      
@Mr Chai
谢谢支持,以后继续努力,与大家分享知识。

 回复 引用 查看   
#76楼 2010-07-16 10:15 | 拉拉叟      
看了你的博客 都很精彩 受益匪浅
 回复 引用 查看   
#77楼[楼主] 2010-07-16 10:17 | BearRui(AK-47)      
引用拉拉叟:看了你的博客 都很精彩 受益匪浅


谢谢夸奖,以后多来捧场!

 回复 引用 查看   
#78楼 2010-07-26 10:12 | 彬      
引用1.不要在ID选择器前使用标签名
一般写法:DIV#divBox
更好写法:#divBox
解释: 因为ID选择器是唯一的,加上div反而增加不必要的匹配。


这2种写法其实是有差距的
DIV#divBox的优先级要高于#divBox,也就是说当他们的样式冲突的时候,优先采用div#divBox内的样式
在某种特殊的情况下可以用div#divbox来提升优先级

 回复 引用 查看   
#79楼[楼主] 2010-07-26 12:29 | BearRui(AK-47)      
引用彬:

这2种写法其实是有差距的
DIV#divBox的优先级要高于#divBox,也就是说当他们的样式冲突的时候,优先采用div#divBox内的样式
在某种特殊的情况下可以用div#divbox来提升优先级


1个页面1个id应该只有1个元素,所以不存在优先级的问题,如果你同1个id有多个元素,应该要考虑你的界面设计的是不是有问题了。

 回复 引用 查看   
#80楼 2010-08-08 00:32 | xcntime      
写的很经典,发人深省
 回复 引用 查看   
#81楼[楼主] 2010-08-08 00:38 | BearRui(AK-47)      
这个确实比较经典,比较震撼
 回复 引用   
#82楼 2010-08-10 16:42 | greenery[未注册用户]
很好的文章!
 回复 引用 查看   
#83楼[楼主] 2010-08-10 17:48 | BearRui(AK-47)      
@greenery

谢谢,^_^

 回复 引用 查看   
#84楼 2010-08-13 09:34 | June Zhang      
呵呵 学习了
 回复 引用 查看   
#85楼 2010-09-03 14:12 | BillBibby      
从右向左,lz写的真好。
 回复 引用 查看   
#86楼[楼主] 2010-09-03 18:27 | BearRui(AK-47)      
引用BillBibby:从右向左,lz写的真好。


谢谢支持,^_^

刷新评论列表  刷新页面  返回页首
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

验证码: 验证码 看不清,换一个

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1753381 yyQvFUprQ6o=
首页博问闪存新闻园子招聘知识库
最新IT新闻:
· 苹果员工称下一代iPad显示效果“令人惊叹”
· 海盗湾:2012是风暴之年
· 苹果市值超微软Google之和 超瑞典GDP
· LinkedIn四季度净利690万美元 同比增长30%
· 微软高管详解ARM版Win 8:提供Office 15
» 更多新闻...
最新知识库文章:
· 如何学习一门新的编程语言?
· 学习不同编程语言的重要性
· 为什么我喜欢富于表达性的编程语言
· 计算机专业的女生为什么要学编程
· 前端必读:浏览器内部工作原理
» 更多知识库文章...

China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务

抓虾
google reader
鲜果
哪吒
QQ邮箱
http://wap.feedsky.com/BearRui
昵称:BearRui(AK-47)
园龄:5年10个月
荣誉:推荐博客
粉丝:124
关注:3

搜索

 

最新随笔

  • 1. 产生唯一随机码的方法分析。
  • 2. URL中允许携带sessionid带来的安全隐患。
  • 3. JS 实现完美include
  • 4. 基于模板的excel导出
  • 5. 实现if elseif else的jsp标签。
  • 6. 记一复杂页面的前端优化(2) - 其他优化
  • 7. 记一复杂页面的前端优化(1) - 不一样的延迟加载
  • 8. 名站技术分析 — tudou网首页下列菜单的弹出效果
  • 9. LESS 让css也支持变量,运算符,include,嵌套规则等等
  • 10. CSS技巧 — 不使用图片实现圆角、阴影、渐变等功能

随笔分类(38)

  • .NET(11)
  • CSS(3)
  • JAVA(2)
  • javascript(4)
  • Life(5)
  • WEB(4)
  • 高性能WEB开发(5)
  • 浏览器(1)
  • 名站技术分析(3)

随笔档案(39)

  • 2010年10月 (1)
  • 2010年8月 (3)
  • 2010年7月 (5)
  • 2010年6月 (4)
  • 2010年5月 (6)
  • 2006年6月 (4)
  • 2006年5月 (7)
  • 2006年4月 (9)

积分与排名

  • 积分 - 178236
  • 排名 - 485

最新评论

阅读排行榜

评论排行榜

推荐排行榜

Copyright ©2012 BearRui(AK-47)