【问题标题】:Overriding styles without !important不带 !important 的覆盖样式
【发布时间】:2012-03-31 13:54:11
【问题描述】:

如何覆盖另一个样式表中指定的样式?

我不想使用 !important 标记来覆盖它们。我宁愿指定一个新的样式表,把样式放在那里。这可以通过改变样式表的加载顺序来实现吗?

【问题讨论】:

  • 为什么删除了 twitter-boostrap 标签?我认为它与这个问题有关。
  • @AndresIlich,another style sheet 不一定是twitter-bootstrap
  • @Starx 我理解,但最初的问题是指该框架,它与海报案例无关吗?
  • @AndresIlich,问题的本地化版本不被视为优先事项,因为 SO 专注于帮助社区而不是单个提问者。
  • @Starx 我明白,但有一个twitter bootstrap 标签是有原因的,但我想使用这种格式的问题提供了大量的问题,而不是与海报案例相关的问题。

标签: css


【解决方案1】:

这取决于。 CSS 代表 Cascading Style Sheets,样式的应用有一个特定的顺序,会覆盖以前的样式。无需赘述:

  • 如果您的规则具有相同的特殊性,只需加载您的样式表,一切都会正常工作。
  • 如果您的规则具有更高的特异性,则顺序无关紧要。
  • 如果您的规则的特异性较低,则需要修改它们以匹配。

那么,什么是特异性?基本上,它是规则中每个选择器的总和。所以这个:

a {
    background-color: black;
    color: white;
}

比这更少特异性:

body a {
    color: orange;
}

ID 选择器比类选择器具有更高的特异性,类选择器具有与伪类选择器相同的特异性,伪类选择器比标签选择器具有更高的特异性。因此,如果您的所有内容都包含在 <div>idcontent 中,您将能够覆盖如下所示的样式:

body a {
    border: 0;
}

与:

#content a {
    border: 1px solid black;
}

【讨论】:

  • 但有人告诉我,使用 ID 选择器进行样式设置是不好的做法。 ID 选择器应该只用于 JS?
  • @Matthew:你被错误地告知了。当然,如果这是您的偏好,请不要使用 id 选择器;这个答案陈述了关于优先级的事实,并没有提出任何建议。
  • @minitech 啊,我明白了。类的好处是它们给你更多的灵活性。与 ID 选择器不同,您可以向一个元素添加多个类。这是有道理的。
  • @Matthew:你不必在某些东西上使用 ids 类。您可以同时使用两者。酌情使用每一个——即,用于 UI 元素的类/类别/类型的类,以及作为唯一标识符的 id……
  • @RyanO'Hara CSSLint 每次在选择器中使用 ID 时都会引发警告。这就是给他们不好的印象的原因。不过,它并不是真正的权威来源。这是一个很好的观点。
【解决方案2】:

应该首先加载 boostrap 样式表,然后是您的样式表,这样您的覆盖将被拾取。

这在文档中称为“级联”:

级联

这是一些样式表语言(例如 CSS)提供的功能,允许混合来自多个来源的样式信息 一起。例如,这些可能是企业风格指南, 一组文档共有的样式,以及特定于单个文档的样式 文档。通过单独存储这些,样式表可以重复使用, 简化创作并更有效地利用网络 缓存。 级联定义了样式表的有序序列,其中 后面的工作表中的规则比以前的规则具有更高的优先级。 不是 所有样式表语言都支持级联。

【讨论】:

    【解决方案3】:

    如果你可以增加specificity of styles,你可以不加!important

    例如:

    HTML

    <div id="selector">
      <a>Hello</a>
      <a class="specific">Hi</a>
    </div>
    

    CSS

    div a {}
    

    如果您在#selector 中提供特定类,将被忽略

    .specific { }
    

    这是demo 解释我的观点。基本上,这个想法是尽可能接近地定义样式。

    【讨论】:

      【解决方案4】:

      看看http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html

      <p class="example">
          This is a <strong>test</strong>.
      </p>
      
      strong { color: red; }
      p strong { color: green; }
      p.example strong { color: blue; }
      

      文本将是蓝色的。规则的顺序无关紧要。

      【讨论】:

      • 但它是一个很好的链接,它解释了基于星球大战的特殊性:)
      • 如果您举例说明 OP 询问的功能,然后提供链接作为参考,会更好。
      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      相关资源
      最近更新 更多