为CSS目的使用id属性的原因是什么?
我一直使用class
属性,从来没有id
为CSS选择和样式的目的。我知道id
必须是唯一的,但这似乎不是将其用于CSS的原因。为CSS目的使用id属性的原因是什么?
我使用id
属性的唯一原因是JavaScript和表单标签。
我发现混合id
和class
为CSS的目的可能会造成混淆,对我而言,这是强制分离样式和行为的好方法。
是否有很好的理由使用id
用于CSS目的? id
有什么可以通过class
无法完成的吗?
评论,我发现有用/有趣
- 你可以说一下班同样的事情。在那里有许多JavaScript(并且必须)针对特定类的元素。从行为的角度来看,在这些实例中更改类同样存在问题。 - AaronSieb
- ID在级联中的类别具有不同的特性。 - Killroy
- 使用的造型ID有道理的,如果它是没有重复的,尤其是如果它的东西,全部/大部分的网页显示出来的元素 - RichN
我使用ID标签的主要原因是与正在阅读我的代码的人交流。具体来说,ID标签可以很容易地引用他们想要的任何特定元素,并且完全放心,知道它对它做出的任何更改只会影响该元素。
编辑:还有一个更技术性的理由使用你可能不知道的ID标签。我根据vol7ron的comment和一些进一步的研究历史记录再次更新了这篇文章。对于那些刚接触CSS的人来说,这些信息可能相当有启发性。
下面的大纲说明了层叠样式表的“级联”的本质究竟是如何工作的:
- 赢家= 重要声明!
- 例如,
#some-element {color: blue !important;}
节拍#some-element {color: red;}
。
- 例如,
- 获胜者= 联机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"/>
。
-
- 例如:
- 得奖=最大ID选择器的#。
- 例如,
#some-element#id-2 {color: blue;}
节拍#some-element {color: red;}
。
- 例如,
- 得奖=最大类,伪类,和其它属性选择的#。
- 例如,
.some-elements.class-2 {color: blue;}
节拍.some-elements {color: red;}
。
- 例如,
- 得奖=最大#的元素名称和伪元素在选择器。
- 例如,
#some-element:hover {color: blue;}
节拍#some-element {color: red;}
。
- 例如,
- 获胜者= 最近读了的机器。
- 例如:
-
<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声明。”如果一方在这方面的优先级高于其他方,那么它会胜出。如果他们在这方面是相同的,继续下一个标准,直到找到区分因素。
不,但如果你的元素有id
为什么不用它来造型?
你可以说元素名称相同 - 你可以用p
做什么,你不能用class='paragraph'
做什么。这并不意味着将class='paragraph'
添加到每个<p>
元素是一个好主意。
任何特别的原因,这是一直downvotes?你不同意吗?如果是这样,为什么? – 2009-10-22 15:16:22
我还没有投票(不能反对),但说实话,我真的没有看到你的观点:-)我使用JavaScript的ID,我可以使用相同的ID为CSS,但我发现混合风格和行为,我宁愿单独保留以避免将来出现问题(删除ID意味着造型也会消失)。 – Vamos 2009-10-22 15:21:00
我的观点是 - 如果你的元素已经有一个ID,并且你希望那个特定的元素有一个样式 - 为什么要添加一个类?已经有一种方式来设计它。 – 2009-10-22 15:23:03
IMO,使用基于ID的风格是一个坏主意。
ID是唯一的,应该只发生在你的DOM中最多一次。这将任何ID相关风格的使用限制为最多1次。
另一方面,CSS类可以多次使用或根本不使用。
坦率地说,我认为ID应该用于行为,类应该用于风格。您可以互换使用它们的事实是使Web开发的某些方面不一致的部分原因。
是的 - 但每次引用样式表的文档都有一次。仍然值得为IMHO添加一种风格。我总是在页面组件的ID上做样式,我知道它们只有一种。这是ID的用途。 – 2009-10-22 15:08:33
我认为OP正在试图理解为什么你会使用另一种。当然,你可以通过ID来定义一个样式,但是它限制了该样式可用的范围。这就是为什么我认为这是一个糟糕的设计,我想不出一个场景,我觉得我需要密封这样的风格。 – JMP 2009-10-22 15:20:08
你为什么认为行为和造型有不同的需求?不是选择的方法独立于你对他们做什么?如果你曾经使用jQuery,你会看到类对于行为非常有用。像闪光所有图像或缩放所有段落。例如,有一种常见的技术是将菜单选择作为CSS的一部分,方法是将身份标识应用于身体标记并将其交叉引用到菜单项上的类。 – Killroy 2009-10-22 15:24:15
使用唯一ID选择任何内容比使用类选择要快。差异可以忽略不计,但在具有大量DOM元素的应用程序或JavaScript应用程序密集型应用程序中,它有所不同。
例如,如果你正在使用jQuery检查了这一点:jquery performance rules
我对使用JavaScript的JavaScript没有问题,我只是不知道为什么人们使用CSS来创建CSS样式。 – Vamos 2009-10-22 15:08:26
即使使用CSS你也有一些问题,例如IE6在同一个元素上有2个CSS类有问题。如果您有一个class =“test hidden”的元素,并且您有一个test.hidden的css选择器,则IE6中会出现一个错误,它在选择元素时遇到问题。 – ohdeargod 2009-10-22 15:12:30
我很久以前就不再担心IE6了:-)对于我运行的网站,我只是没有从IE6用户那里获得足够的流量。 – Vamos 2009-10-22 15:22:14
使用的造型ID有道理的,如果它是没有重复的,尤其是如果它的东西,全部/大部分的网页显示出来的元素。
如:
- 页眉&页脚
- 搜索框中
- 导航列表(类似的东西右侧)
+1 - 与我的观点完全一致,并且比我的表现更好:-) – 2009-10-22 15:23:44
我想补充说明,“假设这个元素不会出现超过一次的意义”,而不是“仅仅不在我迄今为止提出的任何示例中碰巧不止一次出现“。所以像页面标题?是。广告框,因为现在我只有一位客户购买了广告?第 – Jay 2009-10-22 16:57:44
,以支持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中的id
和class
这种关系看作类似于面向对象的编程: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>
+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
{
...
...
...
}
或者我的主内容或一个右侧边栏的一个包装。如果有人决定他们喜欢我的布局并希望查看源代码,很容易看到。
发现了一个不错的帖子,与此相关:http://csswizardry.com/2011/09/writing-efficient-css-selectors/ – Vamos 2011-09-21 09:40:46
这是来自该文章的引文:“重要的是要注意,尽管ID在技术上更快,性能更高,但几乎没有。使用Steve Souders的CSS Test Creator,我们可以看到ID选择器和类选择器在回流速度方面显示的差异很小。“我认为除非您处理大量数据(例如,您是Google),否则处理效率不应该成为您主要关心的问题。 – sfarbota 2012-01-31 10:19:19