Ilvsx's Blog

return practice() ? '1 week' : 'never';

为什么在 CSS 中,id 也能像 class 一样被复用

在学习 CSS 的时候,不论网上的资料还是书本都会告诉你:对于只需要用到一次的情况使用id,对于需要用到多次的情况使用class。 但是,如果我们把 id 用于多个标签,发现它和 class 一样能改变多个标签的样式。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #test1{
      width: 200px;
      height: 200px;
      background: red;
      margin: 10px 0;
    }
  </style>
</head>
<body>
  <div id="test1"></div>
  <div id="test1"></div>
  <div id="test1"></div>
</body>
</html>

结果会发现,三个div的背景都是红色。 说好的 id 只能使用一次呢?怎么能用在多个 div 上?这不和 class 一样了? 这个时候,我们就只有找到官方的权威资料,来看看是怎么一回事了,下面分别是JS、HTML、CSS分别对id标签的使用定义。

先看看 javascript,MDN 对 id 怎么定义的

js是通过DOM来对HTML进行操作,在DOM的定义中,虽然提到了ID是唯一的

The concept of an element’s unique identifier (ID)(资料链接1)

但是并没对存在多个相同 id 的情况做出规定,见 (资料链接2),不过,大部分浏览器会返回找到的第一个id,从这个点来说,,JS中保证id的唯一性很重要。

再看看 w3c 标准中对 HTML 的 id 标签的定义

If a document contains more than one object with the same identifier, the objects are exposed as a collection that can be referenced only in ordinal position. (资料链接3)

大概意思是:如果有多个相同的id,这些对象将被存放在一个集合中,并且只能顺序地被引用。

最后,找到 w3c 标准中对 CSS 的 ID 选择器的规定

If an element has multiple ID attributes, all of them must be treated as IDs for that element for the purposes of the ID selector. (资料链接4)

大概意思是:如过有多个相同的 id,所有的 id 都必须选中。

最终结论

也就是说,之所以在 css 中,id 也能像 class 一样被重复使用,这只是对于 css 来说的,而对于 JS 和 HTML 并不适用。 另外 id 的权值比 class 高,因此,可以在 css 中用 class 做大部分的样式,最后再用 id 来修改特定的需求。