2KB项目,专业的源码交易网站 帮助 收藏 每日签到

不要在 CSS 中使用 ID 选择器

  • 时间:2019-01-23 18:43 编辑:2KB 来源:2KB.COM 阅读:406
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Don
英文原文:Don’t use ID selectors in CSS

最近我在对 CSS 的样式进行一些性能测试,然后我的一些好友问我:为什么你不使用 IDs 来作为页面上一些特定的内容部分呢?

这个问题很难回答,有下面几个理由:

  1. 页面中的该元素无法重用
  2. 螺旋式下降导致的特异性
  3. 通过 IDs 用来标识一些非常特殊的内容,但牺牲了抽象性
  4. 性能方面可通过其他方式来解决

下面我们针对这四点进行深入探讨。

无法重用页面的元素

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

译者:下面这一节翻译的有点不知所云,大家如果看不懂还是看英文原文吧。

由螺旋式下降导致的特异性

CSS 关于重载的两个方法:

  1. 级联: (任何下一级的元素都可以重写上一级CSS规则)
  2. 特异性: the idea of creating weight by using weighted selectors.

为什么我说这里是一个螺旋式下降,因为为了要重载一个优先级很高的规则,我必须给它设置添加再高的优先级。


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


另一方面:

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

使用 ID 选择器更快

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

#profile-module {...} 
#profile-module li {...} 
.profile-module li {...}

第二个选择器就没有第三个来的快,因为CSS是从右到左的,因此 li 会先被扫描,因此通过 ID 进行定位将直接被忽略。

关于 CSS 选择器的性能问题,请看 Steve Souders explains how selector speed works.

IDs 就是单例的意思

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

特别说明

最后需要说明的是,我并不是要大家完全抛弃使用 ID,ID 可以加速 JavaScript 执行,在文档中传达具体的意义。

我只是不建议在 CSS 中使用 ID 选择器,当然,决定权在于你自己。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部