【问题标题】:CSS !important rule use, specificityCSS !important 规则使用,特异性
【发布时间】:2011-02-26 08:44:14
【问题描述】:

我正在编写一堆 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 是无效的,尽管它可能“有效”。

【问题讨论】:

  • 那为什么不使用class呢?假设 #content 是作为表的父级的容器元素,#content .mytables tr td 仍将比原始选择器更具体
  • 是的,这也可以,但我不想对其添加任何进一步的限制,因为 PHP 类可以在任何 PHP 环境中工作,我不想指定特定于 WP 的#内容 ID。

标签: css css-specificity


【解决方案1】:

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

无论如何,如果您必须在将ids 添加到多个元素和在您的属性上使用!important 之间进行选择,我会使用!important,原因很简单,而@987654326 @ 可能会使您的样式表无法维护,添加多个 ids 也可能会破坏页面上使用的任何 JavaScript,并且无法保证所有浏览器中的 id 选择器实现都可以容纳具有相同 id 的多个元素,因此后果是更严重。

基本上,在一种高度不推荐但在其他方面有效的做法和无效、未定义的行为之间进行选择。

【讨论】:

  • 我知道插件的多个实例可能存在冲突,因此我决定为我的插件的每个根 DIV 使用唯一 ID,这样我就知道它们是单独的实例。但我同意拥有两个具有相同 ID 的元素有点奇怪。所以我想添加 !important 规则可能是确保没有任何东西(几乎)可以破坏我的 CSS 规则的唯一方法......
  • @AramKocharyan 这不仅仅是“有点奇怪”,它实际上是无效的 HTML。并且无效的 HTML 浏览器会以奇怪而奇妙的方式中断,所以如果你想这样做,请记住这一点。另一种方法是在这里使用两个选择器:.mytables, #content .mytable,对 WP 更具体的一个,对其他人来说不太具体
  • 我认为这个建议比使用 !importort 规则更可行,除非没有其他办法。我会试试的,干杯!
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多