如何使用另一个CSS类覆盖CSS类的属性

use*_*049 81 css overriding class

我是CSS3的新手,我希望能够做到以下几点:

当我将一个类添加到一个元素中时,它会覆盖此特定元素中使用的另一个类的属性.

让我们说我有

<a class="left carousel-control" href="#carousel" data-slide="prev">
Run Code Online (Sandbox Code Playgroud)

我希望能够添加一个名为的类bakground-none,它将覆盖类中的默认背景left.

谢谢!

Juk*_*ela 82

可以通过不同的方式覆盖属性.假设你有

.left { background: blue }
Run Code Online (Sandbox Code Playgroud)

例如,以下任何一个都会覆盖它:

a.background-none { background: none; }
body .background-none { background: none; }
.background-none { background: none !important; }
Run Code Online (Sandbox Code Playgroud)

选择者特异性的前两个"胜利"; 第三个胜利!important,一个钝器.

您还可以组织样式表,例如规则

.background-none { background: none; }
Run Code Online (Sandbox Code Playgroud)

胜只需通过订单,将成为即否则同样"强大"的规则.但这会施加限制,并要求您在样式表的任何重组中要小心.

这些都是CSS Cascade的例子,这是一个至关重要但被广泛误解的概念.它定义了解决样式表规则之间冲突的确切规则.

PS我用过left,background-none因为他们在问题中使用.他们是应该的类名的例子使用,因为它们反映的具体呈现,而不是结构性或语义角色.

  • @Socrates:有些人认为 css 类应该只被赋予名称来标识它所应用的元素是什么或做什么(例如“button”、“name-label”等)。其他人认为,如果您使用这种方法,CSS 就会变得难以管理,您应该使用“实用性优先”或“功能性”CSS,其中类对应于属性值(例如 `margin-top-4`、`width-10` 等) 。从历史上看,“语义”方法一直占据主导地位,而最近“功能”方法逐渐获得追随者。在一个中等规模的项目上尝试这两种方法,然后自己决定哪一种更好。 (2认同)

Pra*_*lan 52

只是使用!important它将有助于覆盖

background:none !important;
Run Code Online (Sandbox Code Playgroud)

看看这个:何时使用 - 重要 - 是正确的选择

  • 重要的是一种不好的做法.很快,所有代码变得重要. (29认同)
  • !在某些编程语言中是“不”符号,因此它具有“不重要”的语义:) (2认同)

Mar*_*det 24

作为important关键字的替代方案,您可以使选择器更具体,例如:

.left.background-none { background:none; }
Run Code Online (Sandbox Code Playgroud)

(注意:类名之间没有空格).

在这种情况下,当两个.left.background-none都列在类属性中时(无论顺序或接近程度如何),规则将适用.

  • 涵盖了最受欢迎的答案,但至关重要 (2认同)

cho*_*hoc 20

您应该通过增加样式的特异性来覆盖.有不同的方法来提高特异性.使用!important哪种效果特异性,是一种不好的做法,因为它打破了样式表中的自然级联.

以下来自css-tricks.com的图表将帮助您根据点结构为您的元素生成正确的特异性.无论哪种特异性都有更高的分数,都会获胜.听起来像一场比赛 - 不是吗?

在此输入图像描述

css-tricks.com上查看样本计算.这将帮助您很好地理解这个概念,它只需要2分钟.

如果您喜欢自己制作和/或比较不同的特性,请尝试使用此特异性计算器:https://specificity.keegan.st/或者您可以使用传统的纸/铅笔.

如需进一步阅读,请尝试MDN Web Docs.

最好不要使用!important.


Ruu*_*uud 9

如果bakground-none在其他类之后列出该类,则其属性将覆盖已设置的类.这里没有必要使用!important.

例如:

.red { background-color: red; }
.background-none { background: none; }
Run Code Online (Sandbox Code Playgroud)

<a class="red background-none" href="#carousel">...</a>
Run Code Online (Sandbox Code Playgroud)

该链接不会有红色背景.请注意,这仅覆盖具有较少或同等特定的选择器的属性.