CSS!重要的规则使用,特异性

时间:2011-02-26 08:44:15

标签: css css-specificity

我正在编写一些PHP类,这些类将用于创建Wordpress插件,但也可以在任何其他环境中使用。在单独测试我的脚本后,一切似乎都很好,但是当我为它创建一个WP插件时,我预见到了CSS冲突。我最初计划使用特异性来解决这些问题,但并不总是这样做。这是默认的WP主题:

#content tr td {
    border-top: 1px solid #E7E7E7;
    padding: 6px 24px;
}

如果我尝试指定td没有填充,除非我向表中添加ID而不是类,否则它将无效。我见过流行的插件,它们在每个CSS属性上实现了!important规则,而不是使用ID来实现特异性。哪个最好?我知道!important规则应该谨慎使用,但是在我的表中添加一个ID似乎违背了语义,因为这个表的多个实例会有相同的ID:

  

文档的ID属性   语言允许作者分配   一个元素实例的标识符   文件树。

http://www.w3.org/TR/CSS2/selector.html#id-selectors

修改 另一种方法也可能是将所有内容包装在带有ID的div中,但如果存在规则#content #main td或类似内容,它仍然会超过我的#someid td。此外,如下所述,让两个元素共享相同的ID是无效的,尽管它可能“有效”。

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说,如果 #content是包装器,您可以在选择器中包含#content规则以及类来覆盖原始样式元素(它应该是,因为如果被添加到所有表元素,那么将不会有任何方法向WordPress帖子添加多个表,这将是......很奇怪)。

无论如何,如果您 选择将id添加到多个元素,并在您的媒体资源上使用!important,我会使用!important作为简单的原因是虽然!important可能会使您的样式表无法维护,但添加多个id也可能会破坏页面上使用的任何JavaScript,并且无法保证所有浏览器中的ID选择器实现都可以容纳多个元素同样id,所以后果更严重。

基本上,选择一种高度无意义但有效的做法和无效的,未定义的行为。