为CSS目的使用id属性的原因是什么?

问题描述:

我一直使用class属性,从来没有id为CSS选择和样式的目的。我知道id必须是唯一的,但这似乎不是将其用于CSS的原因。为CSS目的使用id属性的原因是什么?

我使用id属性的唯一原因是JavaScript和表单标签。

我发现混合idclass为CSS的目的可能会造成混淆,对我而言,这是强制分离样式和行为的好方法。

是否有很好的理由使用id用于CSS目的? id有什么可以通过class无法完成的吗?

评论,我发现有用/有趣

  • 你可以说一下班同样的事情。在那里有许多JavaScript(并且必须)针对特定类的元素。从行为的角度来看,在这些实例中更改类同样存在问题。 - AaronSieb
  • ID在级联中的类别具有不同的特性。 - Killroy
  • 使用的造型ID有道理的,如果它是没有重复的,尤其是如果它的东西,全部/大部分的网页显示出来的元素 - RichN
+0

发现了一个不错的帖子,与此相关:http://csswizardry.com/2011/09/writing-efficient-css-selectors/ – Vamos 2011-09-21 09:40:46

+0

这是来自该文章的引文:“重要的是要注意,尽管ID在技术上更快,性能更高,但几乎没有。使用Steve Souders的CSS Test Creator,我们可以看到ID选择器和类选择器在回流速度方面显示的差异很小。“我认为除非您处理大量数据(例如,您是Google),否则处理效率不应该成为您主要关心的问题。 – sfarbota 2012-01-31 10:19:19

我使用ID标签的主要原因是与正在阅读我的代码的人交流。具体来说,ID标签可以很容易地引用他们想要的任何特定元素,并且完全放心,知道它对它做出的任何更改只会影响该元素。

编辑:还有一个更技术性的理由使用你可能不知道的ID标签。我根据vol7roncomment和一些进一步的研究历史记录再次更新了这篇文章。对于那些刚接触CSS的人来说,这些信息可能相当有启发性。

下面的大纲说明了层叠样式表的“级联”的本质究竟是如何工作的:

  1. 赢家= 重要声明
    • 例如, #some-element {color: blue !important;}节拍#some-element {color: red;}
  2. 获胜者= 联机CSS
    • 例如:
      • <div id="some-element" style="#some-element {color: yellow;}">some content</div>次...
      • <style type="text/css">#some-element {color: red;}</style>和...
      • <link type="text/css" link rel="stylesheet" href="set-some-element-color-to-blue.css"/>
  3. 得奖=最大ID选择器的#。
    • 例如, #some-element#id-2 {color: blue;}节拍#some-element {color: red;}
  4. 得奖=最大类,伪类,和其它属性选择的#。
    • 例如, .some-elements.class-2 {color: blue;}节拍.some-elements {color: red;}
  5. 得奖=最大#的元素名称伪元素在选择器。
    • 例如, #some-element:hover {color: blue;}节拍#some-element {color: red;}
  6. 获胜者= 最近读了的机器。
    • 例如:
      • <style type="text/css">#some-element {color: red;}</style>次...
      • <link type="text/css" link rel="stylesheet" href="set-some-element-color-to-blue.css"/>因为内部CSS之后外部CSS读取。

在这个纲要,通过基于轮廓,即最上面的标准比较2种的CSS样式启动 “1赢家= !important声明。”如果一方在这方面的优先级高于其他方,那么它会胜出。如果他们在这方面是相同的,继续下一个标准,直到找到区分因素。

+1

这是旧的,但一直如此:元素,类,ID,内联(从最低到最高优先级)。然而,这篇文章只涉及赢得的内容,这也是外部链接(链接),内部链接('

+0

非常好的点@ vol7ron。它现在怎么样?我也摆脱了对1/10/100系统的参考,因为它实际上有缺陷。 – sfarbota 2012-01-31 09:15:20

+0

哦,另外,我已经将内部与外部的区别概括为“最近阅读”,因为这是发生的原因 – sfarbota 2012-01-31 10:16:50

如果你有相同的多个元素类,并且需要为其中一个或多个样式指定不同的样式,这对我来说看起来相当有效。

+1

这就是为什么你可以附加多个CSS类到一个对象,但。 – JMP 2009-10-22 15:02:59

+0

为什么不使用多个类? class ='genericClass specificClass'等。 – Vamos 2009-10-22 15:03:46

+0

为什么不使用内联样式?为什么不使用字体标签? – 2009-10-22 15:07:42

不,但如果你的元素有id为什么不用它来造型?

你可以说元素名称相同 - 你可以用p做什么,你不能用class='paragraph'做什么。这并不意味着将class='paragraph'添加到每个<p>元素是一个好主意。

+0

任何特别的原因,这是一直downvotes?你不同意吗?如果是这样,为什么? – 2009-10-22 15:16:22

+0

我还没有投票(不能反对),但说实话,我真的没有看到你的观点:-)我使用JavaScript的ID,我可以使用相同的ID为CSS,但我发现混合风格和行为,我宁愿单独保留以避免将来出现问题(删除ID意味着造型也会消失)。 – Vamos 2009-10-22 15:21:00

+0

我的观点是 - 如果你的元素已经有一个ID,并且你希望那个特定的元素有一个样式 - 为什么要添加一个类?已经有一种方式来设计它。 – 2009-10-22 15:23:03

IMO,使用基于ID的风格是一个坏主意。

ID是唯一的,应该只发生在你的DOM中最多一次。这将任何ID相关风格的使用限制为最多1次。

另一方面,CSS类可以多次使用或根本不使用。

坦率地说,我认为ID应该用于行为,类应该用于风格。您可以互换使用它们的事实是使Web开发的某些方面不一致的部分原因。

+2

是的 - 但每次引用样式表的文档都有一次。仍然值得为IMHO添加一种风格。我总是在页面组件的ID上做样式,我知道它们只有一种。这是ID的用途。 – 2009-10-22 15:08:33

+0

我认为OP正在试图理解为什么你会使用另一种。当然,你可以通过ID来定义一个样式,但是它限制了该样式可用的范围。这就是为什么我认为这是一个糟糕的设计,我想不出一个场景,我觉得我需要密封这样的风格。 – JMP 2009-10-22 15:20:08

+2

你为什么认为行为和造型有不同的需求?不是选择的方法独立于你对他们做什么?如果你曾经使用jQuery,你会看到类对于行为非常有用。像闪光所有图像或缩放所有段落。例如,有一种常见的技术是将菜单选择作为CSS的一部分,方法是将身份标识应用于身体标记并将其交叉引用到菜单项上的类。 – Killroy 2009-10-22 15:24:15

使用唯一ID选择任何内容比使用类选择要快。差异可以忽略不计,但在具有大量DOM元素的应用程序或JavaScript应用程序密集型应用程序中,它有所不同。

例如,如果你正在使用jQuery检查了这一点:jquery performance rules

+0

我对使用JavaScript的JavaScript没有问题,我只是不知道为什么人们使用CSS来创建CSS样式。 – Vamos 2009-10-22 15:08:26

+0

即使使用CSS你也有一些问题,例如IE6在同一个元素上有2个CSS类有问题。如果您有一个class =“test hidden”的元素,并且您有一个test.hidden的css选择器,则IE6中会出现一个错误,它在选择元素时遇到问题。 – ohdeargod 2009-10-22 15:12:30

+0

我很久以前就不再担心IE6了:-)对于我运行的网站,我只是没有从IE6用户那里获得足够的流量。 – Vamos 2009-10-22 15:22:14

使用的造型ID有道理的,如果它是没有重复的,尤其是如果它的东西,全部/大部分的网页显示出来的元素。

如:

  • 页眉&页脚
  • 搜索框中
  • 导航列表(类似的东西右侧)
+1

+1 - 与我的观点完全一致,并且比我的表现更好:-) – 2009-10-22 15:23:44

+5

我想补充说明,“假设这个元素不会出现超过一次的意义”,而不是“仅仅不在我迄今为止提出的任何示例中碰巧不止一次出现“。所以像页面标题?是。广告框,因为现在我只有一位客户购买了广告?第 – Jay 2009-10-22 16:57:44

+0

,以支持OP的论点:元素(如页眉/页脚,搜索框)也可以使用CSS类风格,并在技术上实现相同的结果。这里的真正意义在于可读性:使用ID进行样式设置可以让css读者清楚这个元素对于每个页面都是唯一的。在CSS中使用ID是一种编写更多表达性代码的方法。 – Kaii 2012-01-31 10:24:16

(你可以看到那里的东西)您不必使用ID。没有可以使用无法使用类创建的ID创建的设计。这就是说,使用ID具有清楚地将选择器标记为适用于页面中的一个元素的优点。我通常将它们用于我的页面模板中的样式元素(#Content,#Navigation等)。

通常,我会尝试在允许我使标记更加简洁的区域中使用它。当选择器可以作为标签的目标时,你应该使用标签。当它可以针对一个ID时,使用该ID。否则,请使用课程。

但是,再一次地,您是否使用ID并不是非常重要。

我使用一个id,当我知道即时通讯将在该特定元素上使用JavaScript。 ID的速度快于JavaScript中的类。

我倾向于将HTML中的idclass这种关系看作类似于面向对象的编程:id就像class的实例。

我使用的类比我使用的ID更多,并且经常使用多级选择器(例如.film.drama)。但是如果我确实想要识别某个特定元素,以便我可以应用特定的样式或行为,那么我将分配一个id,并且通常也会分配一个class。例如。

<ul> 
    <li class="film drama">A</li> 
    <li class="book drama">B</li> 
    <li class="film documentary" id="film-9832">C</li> 
</ul> 

在分配一个id时,我想“在页面上有多个这样的页面是否合理?”。如果答案是肯定的,那么我可能会去上课。

结果,并作为@RichN和@AaronSieb所提到的,我经常使用的ID为一定会在页面上只出现一次特定的页面元素:

<ul class="sidebar" id="site-meta">[...]</ul> 
+0

+1 - 我喜欢你给的例子。 – Vamos 2009-10-22 17:02:22

标识识别,分类分类。这一点在此已多次提及,或多或少。

一个例子是:

<div class="author" id="stephen">[...]</div> 

从CSS特异性的角度来看,目标的ID将CSS规则,而不是带班,甚至几个班的规则更具体。

因此:

p#recent {} 

body>p.news.recent {} 

并且当用户代理发现这两种,所述第一为准更加具体。

我能想到的唯一使用ID就是如果你有特异性战争 - 具有相同特异性的两个元素。应用一个ID会给你的元素提供更高的特异性 - 精确到+100。

因此,如果您有两种样式以相同的特异性定义,您可能希望通过对另一种样式应用更高的特异性来“破坏”一种样式。这就是说,可以通过太施加一个更具体的类,以该选择器实现相同的,这将提高10

ID = 100(#foo) 类= 10(的.bar) 元件增加特异性= 1(div)

我个人更喜欢使用ID作为静态页面元素(页眉,页脚)。原因是页面重量。

id =“h”比class =“h”轻。

我认为每个字节都很重要。

我在CSS中使用ID的主要原因是布局。如果我有一个页眉和页脚,则:

#header 
{ 
... 
... 
... 
} 

#footer 
{ 
... 
... 
... 
} 

或者我的主内容或一个右侧边栏的一个包装。如果有人决定他们喜欢我的布局并希望查看源代码,很容易看到。