css - 如果我总是使用 CSS Class 而不是 CSS ID 来处理所有内容,有什么优点和缺点吗?

标签 css css-selectors

在 CSS 中我们可以同时使用 ID 和类。如果我在语义、Web 标准 - W3C、SEO、可访问性和 future 可维护性方面始终使用 Class 而不是 ID,是否有任何优点和缺点?

最佳答案

一个很大的区别:在 CSS 中,类的重要性级别低于 ID。

假设 CSS 声明中的每个规范都向该声明的值添加了一定数量的点。假设积分是这样的(完全是编造的,但无论如何):

  • 标签名称('a'、'div'、'span'):1 分
  • 类名('.highlight'、'.error'、'.animal'):10 分
  • ID('#main-headline'、'#nav'、'#content'):100 分

因此,以下声明:

a {
    color: #00f;
}

.highlight a {
    color: #0f0;
}

#nav .highlight a {
    color: #f00;
}

分别为 1、11 和 111 分。对于给定的标签,与它匹配的点数最高的声明“获胜”。因此,例如,对于这些声明,所有 a 标签都将为蓝色,除非它们位于具有“highlight”类的元素内,在这种情况下它们将为绿色,除非该元素位于内部id="nav"的元素,在这种情况下它们将是红色的。

现在,如果您只使用类,您可能会陷入棘手的境地。假设您想将内容区域中的所有链接设为蓝色,而 foo 区域中的所有链接设为红色:

.content a {
    color: #00f;
}

.foo a {
    color: #f00;
}

根据我之前的(编造的)量表,它们都有 11 分。如果您的内容中有一个 foo,哪个获胜?在这种情况下,foo 获胜,因为它在后面。现在,也许这就是你想要的,但这只是幸运。如果您稍后改变主意,并希望内容获胜,则必须更改它们的顺序,而根据 CSS 文件中声明的顺序是一个坏主意。现在,如果您有以下声明:

#content a {
    color: #00f;
}

.foo a {
    color: #f00;
}

内容总是获胜,因为该声明的值为 101(击败 foo 的 11)。不管它们以什么顺序出现,内容声明总是先于 foo。这为您提供了一些非常重要的一致性。获胜者不会根据文件中的变化顺序随意改变,如果你想改变获胜者,你必须改变声明(可能在.foo声明前添加#content,所以它会有111点)。

所以基本上,值(value)观的差异很重要,如果你只使用类,你会得到很多不一致和看似武断的赢家。

关于css - 如果我总是使用 CSS Class 而不是 CSS ID 来处理所有内容,有什么优点和缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878810/

相关文章:

javascript - 如何只让当前子菜单获得事件类而不是所有子菜单?

html - 删除边距响应缩略图网格

html - CSS 相同的类不同的行为

css - 按类别选择除最后一个以外的所有类别

jquery - 使用 jquery 将容器的宽度增加 10 rem

html - 缩小容器内的所有元素

jquery - 使用jquery获取元素的-webkit-transform的值

javascript - 如何使用客户端解决方案旋转图像

javascript - 如何在没有 id 的情况下访问 canvas 元素?

css - 仅将 css 应用于第一个 child 并取消继承