What is the difference between classes/ids and custom HTML5 attributes in CSS?
通过类/ id或通过自定义属性标识HTML元素之间是否有区别?
我的意思是,例如,如果我有一个菜单并且想更改当前(活动)li元素的颜色,那么我目前正在使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <style>
li[active]{color:red}
</style>
<ul>
<li active>...
</li>
<li>
...
</li>
</ul> |
但最常见的用法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <style>
li.active{color:red}
</style>
<ul>
<li class="active">...
</li>
<li>
...
</li>
</ul> |
那么它们之间有什么区别?我的意思是,他们有相同的结果,但是为什么人们不使用我写的第一种方法?这要简单得多,并且可以产生更整洁的HTML源代码。
仅针对那些没有问题的人...我编写的第一个代码段是通过HTML5 ATTRIBUTE标识元素。第二个片段是按CLASS标识元素。
那么,问题又来了:用HTML5 ATTRIBUTE和CLASS OR ID NAME标识HTML元素有什么区别?
- 在非常简短的摘要中,id比类具有更高的特异性(更重要),并且id在HTML页面上是唯一的。阅读上面的链接以了解更多信息。
-
我知道ID和CLASS之间有什么区别。
-
但是您的问题是具体询问id和class之间的区别,然后您说您知道区别...那么问题的重点是什么? :-/
-
再次阅读我的问题。 :)
-
可能您要问的问题可能会被改写为更具体的字词,以了解您想知道的ID和类的哪些具体细节。同样,您的第一个示例不是id的示例
-
这不是重复项。请重新打开这个问题。 OP希望了解样式和自定义HTML5属性之间的区别。
-
来吧...我只为你编辑我的帖子! (真有趣...)
-
@Martin和@ cale_b我希望将来您将每个问题花费更多的时间,然后再将其标记为重复。如果您花了20秒钟来浏览Bob的示例,那么他的意图就很明显了。
-
@Kano OP反复使用术语" id",这是HTML基础结构特定部分的特定术语。仅仅是因为OP打算要其他东西,所以我们除了OP编写的内容外就无法了解其他任何东西。
-
亲爱的马丁。我编辑了我的帖子。如果您不喜欢HTML,请不要关闭我的问题,因为它离标记为重复的帖子很远……。
-
鲍勃,我已经对标题进行了编辑,以使其更适合您的实际要求。我本人并没有关闭您的问题,而是通过选民的共同共识来关闭问题。我已提名您重新开始的问题。重要的是要在问题中明确说明您要避免这些误解的要求。 :-)
-
鲍勃:这个问题似乎是您要寻找的:stackoverflow.com/questions/26784302/…
-
Okey谢谢,希望我能尽快得到答复。
-
另请阅读:stackoverflow.com/questions/22703978/…
-
@Bob在W3C规范:Custom data attributes are intended to store custom data private to the page or application, for which there are no more appropriate attributes or elements.(链接)中,当我们等待问题重新打开时,您将得到一个答案。综上所述-某些属性具有某些意图。您可以应用自定义属性,但是稍后您还必须重新发明与classList API相关的所有其他内容。
-
我知道了,因此没有性能差异,如果愿意,我可以使用属性标识吗?
-
@Bob-正确。实际上,JavaScript库AngularJS正是通过"执行"操作的属性集合来做到这一点的:ng-if,ng-repeat,ng-show等。
您的active属性示例是无效的HTML,尽管实际上它通常(总是?)会起作用,因为CSS是一个独立的规范,并不关心HTML的规则,浏览器会在出现以下情况时尝试执行"您的意思"涉及无效的HTML。
自定义属性应按照规范以data-前缀开头。这些数据属性通常用于将元素与一些额外的数据相关联以供JavaScript使用,尽管也可以使用CSS来定位它们。
从技术上讲,您可以执行类似
的操作
1
| <li data-active="yeppers"> |
然后使用CSS定位它:
1
| li[data-active='yeppers'] { ... } |
但是,对于大多数不得不查看您的代码的人来说,这将是非常不寻常且令人讨厌的事情。
从语义上讲,"活动"并不是真正的数据,并且不一定是一个元素唯一的,因此分配class="active"最有意义。
- 好吧,active实际上不是无效的HTML。它不是预定义的HTML5属性。但是,它是一个完全有效的HTML5自定义属性。
-
这是无效的,因为它不是预定义的属性,并且未使用所提供的自定义属性机制,即data-*。如果(规范)允许页面作者添加任意属性,则将有效地防止规范以向后兼容的方式定义新属性。像ng-blah这样的东西虽然无效,但不可能发生冲突,但是我不太确定active。