该不该使用ID选择器?浅谈对CSS的ID选择器的使用建议

OSChina   发布时间:2016-07-11 11:34:05   作者:红薯   我要评论
在不嵌套单独使用ID选择器的情况下,它是比较快的,然而各种各样的原因使开发者们抛弃对ID选择器的使用.究竟该不该使用ID选择器?这里我们就来浅谈对CSS的ID选择器的使用建议

关于ID选择器
和class选择器不同,这里使用#
class的值不同标签可以发生重复。但是id不允许!!!
id选择器不能结合使用
id属性通常和js配合使用

CSS Code复制内容到剪贴板
  1. #label {   
  2.     background-colorred;   
  3. }  

思考
最近我在对 CSS 的样式进行一些性能测试,然后我的一些好友问我:为什么你不使用 IDs 来作为页面上一些特定的内容部分呢?
这个问题很难回答,有下面几个理由:
1.页面中的该元素无法重用
2.螺旋式下降导致的特异性
3.通过 IDs 用来标识一些非常特殊的内容,但牺牲了抽象性
4.性能方面可通过其他方式来解决
5.下面我们针对这四点进行深入探讨。

无法重用页面的元素
IDs 对程序员来说相当于是单例,一个页面中不允许存在两个相同的 id(当然浏览器不会报错就是了),这就意味着你不可能重用某个元素,相当于是一对一的关系。而根据我的速度测试,如果一段 CSS 代码只对一个元素起作用对速度并不利,同时也带来了 CSS 膨胀的额外开销。

由螺旋式下降导致的特异性
CSS 关于重载的两个方法:
1.级联: (任何下一级的元素都可以重写上一级CSS规则)
2.特异性: the idea of creating weight by using weighted selectors.
为什么我说这里是一个螺旋式下降,因为为了要重载一个优先级很高的规则,我必须给它设置添加再高的优先级。

CSS Code复制内容到剪贴板
  1. .ModuleOfficeList .property-checkbox input {display:block;margin-bottom:8px;_border:0px !important;}    
  2. .ModuleOfficeList .property-checkbox,   
  3. .ModuleOfficeList .new-icon,   
  4. .ModuleOfficeList .open-icon {display:block}    
  5. ....uid-officelistings .property-checkbox {display:none !important; }  

上面是我在 2005 年的一段真实的代码,上面的代码我必须在最后使用 !important 规则来对选择器规则进行重新排序。这很不好。一旦我们这样做......它需要我们更多的时间去追捕父ID,我们将推翻当前的特异性。这是不友好的而且不利于维护,最终你会掉进入自己挖好的洞,只有重构才能摆脱这个噩梦。

另一方面:
我听到少数的一些声音关于使用 ID 选择器的好

使用 ID 选择器更快
是的,这一点的确没错,而且我也曾经证明过。但是性能的表现微乎其微,但当你使用嵌套其他选择器时性能就下降了:

CSS Code复制内容到剪贴板
  1. #profile-module {...}    
  2. #profile-module li {...}    
  3. .profile-module li {...}  

第二个选择器就没有第三个来的快,因为CSS是从右到左的,因此 li 会先被扫描,因此通过 ID 进行定位将直接被忽略。
关于 CSS 选择器的性能问题,请看 Steve Souders explains how selector speed works.

IDs 就是单例的意思
很多人会在页面中定义 ID ,但某个元素在所有页面中只出现一次的话,用 ID 选择器是没问题的。我唯一声明的是所有代码都应该是可重用的,如果能避免还是尽量避免。

特别说明
最后需要说明的是,我并不是要大家完全抛弃使用 ID,ID 可以加速 JavaScript 执行,在文档中传达具体的意义。
我只是不建议在 CSS 中使用 ID 选择器,当然,决定权在于你自己。

相关文章

  • 简要讲解CSS中的类型选择器、ID选择器、类选择器

    这篇文章主要介绍了CSS中的类型选择器和ID选择器以及类选择器,选择器时CSS入门学习中的基础知识,需要的朋友可以参考下
    2016-02-18
  • 英文教程:五种CSS选择器类型

    网页制作Webjx文章简介:英文教程:五种CSS选择器类型. CSScommandsareusuallygroupedinthecurlybracestomakeasetofrules.Followingarethevariouswaysavaila
    2009-04-02
  • IE7对css选择器的改进-CSS教程-网页制作-网页教学网

    1、对伪类的支持。IE6和更低的版本对于伪类的支持仅限于a标签,诸如“:hover”、“:active”、“:focus”之类的伪类理论上是应该适用于所有
    2008-10-17
  • CSS属性选择器的四种格式-CSS教程-网页制作-网页教学网

      属性选择器(AttributeSelectors),或许你不应该对属性选择器感到陌生,从本质上说,id跟类选择器其实就是属性选择器,只不过是选择了id或者类的值(value)而已。  
    2008-10-17
  • 最常用的五类CSS选择器-CSS教程-网页制作-网页教学网

     一些新手朋友对选择器一知半解,不知道在什么情况下运用什么样的选择器,这是一个比较头疼的问题,针对新手朋友,对CSS选择器作一些简单的说明,希望能对大家的学习工作
    2008-10-17
  • 四种css 伪类选择器

    伪类,用于给元素的片段添加样式,这如何理解呢?比如你要让一个段落的第一行的文字加粗,那么这个选择器是不二之选
    2012-04-18
  • CSS3 选择器 伪类选择器介绍

    前面花了两节内容分别在《CSS3选择器——基本选择器》和《CSS3选择器——属性选择器》介绍了CSS3选择器中的基本选择器和属性选择器使用方法,今天要和大家一起学习CSS3选择
    2012-01-21
  • CSS3 选择器 属性选择器介绍

    上一切在《CSS3选择器——基本选择器》中主要介绍了CSS3选择器的第一部分,这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器
    2012-01-21
  • CSS3 选择器 基本选择器介绍

    CSS的选择器,我想大家并不会陌生吧,因为天天在使用,但对于CSS3的选择器,要运用的灵活到位,我想对很多朋友还是一定的难度,特别是CSS3中的:nth选择器
    2012-01-21
  • 你不可不知的CSS选择器

    *通配符选择器,经常用于css reset(样式重置),清理标签的默认样式,但现在一般不提倡直接使用*了,主要是*会匹配所有标签,相当耗资源。*在css的优先级中是最低的。
    2011-07-27

最新评论