对覆盖 CSS 样式感到困惑

Posted

技术标签:

【中文标题】对覆盖 CSS 样式感到困惑【英文标题】:Confused about overriding CSS styles 【发布时间】:2014-05-09 09:57:48 【问题描述】:

我了解 CSS 基础知识,但我总是遇到样式冲突的问题。考虑以下样式。

首先,我的样式表中的默认字体颜色是黑色。我希望将该颜色应用于所有图片标题 - 除非它们包含在具有 CoolL 或 CoolR 类的 div 中...

.CoolL .Caption, .CoolR .Caption  color: #900; 

现在酷系列中的所有字幕都有棕色文本。但是在某些情况下,我希望字幕具有黑色背景和白色文本,因此我创建了以下规则:

.Black  background: #000; color: #fff; 

现在考虑以下 html。 Class Caption 本身应该有黑色文本。但是,这是在具有类 CoolR 的 div 内,因此它显示棕色文本。但是我在最后一个 div 中添加了 Black 类,这应该将背景更改为黑色,将文本颜色更改为白色...

<div class="CoolR Plus Max300">
  <div class="Shadow2">
    <img src="">
    <div class="Caption Black">Text</div>
  </div>
</div>

其实背景是显示黑色的,但是文字颜色还是棕色的。

我总是遇到这些问题,而解决它们的唯一方法就是编写长而详细的样式,像这样......

.Black, .Caption .Black, .CoolR .Caption.Black, .EverythingElseThatCouldBeBlack .Black  background: #000; color: #fff; 

我错过了什么?谢谢。

【问题讨论】:

css-tricks.com/specifics-on-css-specificity 如果您将.Black 声明放在要覆盖的规则下,您提供的示例就可以正常工作。 jsfiddle.net/habTJ/1 【参考方案1】:

我认为你把事情复杂化了。随着您添加更多样式,这将成为维护问题。我会定义单独的类并保持简单。了解 CSS 的特殊性也很重要。

.caption 
  color: #000;


.cool-caption 
  color: #900;


.caption-with-background 
  background-color: #000;
  color: #fff;

【讨论】:

【参考方案2】:

你可以试试:

.Black  background: #000 !important; color: #fff !important; 

【讨论】:

你当然可以使用!important,但最好先了解 CSS 的特殊性,然后再盲目地覆盖样式。【参考方案3】:

有一些修复,但按照之前的建议,您应该使用!important 标记所有要覆盖之前设置的设置。这样,您的代码将如下所示:

.Black  
    background: #000; 
    color: #fff; 

另外,不确定您是否问过这个问题,但您可以使用*CSS 应用于所有组件,如下所示:

* 
    //blahblahblah

【讨论】:

哇,这变成了一场教育讨论!我不确定将哪个标记为正确答案。我选择了 !important(我以前从未听说过),因为我仍然对 CSS 的特殊性感到有些困惑。 !important 似乎是目前唯一对我有用的东西,但我会同时尝试重新组织我的代码。【参考方案4】:

您正在使用覆盖第二个类的后代选择器定义第一种情况,这只是一个类。已经给出的每个答案都会工作,但完全没有必要。只需将其添加到您的样式表中:

  
.CoolR1 .Black, .Black background: #000; color: #fff;

/** you could also chain your classes for specificity power **/  
.Black.Captioncolor:#fff

应该这样做。您可以在此处阅读有关选择器的更多信息:http://docs.webplatform.org/wiki/css/selectors

【讨论】:

【参考方案5】:

我认为通常更具体的规则会覆盖更一般的规则,因此更具体的“.CoolR .Caption”会覆盖更一般的.Black。您可能可以使用 !important 覆盖它,但更好的方式可能是降低规则的复杂性:

.Cool .caption  color: #900; 

.Cool .caption.black  color: background: #000; color: #fff; 

并将.L.R 放在不同的类中

.Cool.L . . . /* 特定于CoolL,但不适用于CoolR */

.Cool.R . . . /* and vice-versa */

【讨论】:

以上是关于对覆盖 CSS 样式感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

CSS样式中visited,hover,active , focus这四个分别表示什么意思?

层叠样式表(CSS)1

GWT 主题样式覆盖了我的 css 样式

如何覆盖\编辑 Zurb Foundation 基础 CSS 样式?

css样式覆盖顺序

为啥子组件样式被全局 css 覆盖?