多个CSS类:属性重叠基于定义的顺序

nop*_*ole 53 css web-standards

CSS中是否有规则确定在元素上定义多个类时的级联顺序?(class="one two"vs class="two one")

现在,似乎没有这样的效果.

示例:Firefox上的两个div都是橙色

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html>
  <head>
    <style>
      .one { border: 6px dashed green }
      .two { border: 6px dashed orange }
    </style>
  </head>

  <body>

  <div class="one two">
    hello world
  </div>

  <div class="two one">
    hello world
  </div>
Run Code Online (Sandbox Code Playgroud)

edl*_*edl 75

这取决于样式表中最后声明的那个.例如,

.one { border: 6px dashed green }
.two { border: 6px dashed orange }
Run Code Online (Sandbox Code Playgroud)

VS

.two { border: 6px dashed green }
.one { border: 6px dashed orange }
Run Code Online (Sandbox Code Playgroud)

  • **注意head元素中的样式表链接序列对于定义哪个将首先声明**也很重要.我只是意识到这一点并将jquery UI css链接放到head head的标签之前,以避免我的css在类具有相同的权重/特异性(0,1,0,0)时覆盖jquery UI css,我们仍然可以覆盖然后通过使用选择器更具体,如使用ID或选择多个类,如`.parent .one`. (9认同)

Nic*_*ver 22

CSS中最后定义 的类是在这些情况下获胜的类.元素上的顺序无关紧要,这在我所知道的所有浏览器中都是一致的,我会尝试和相关的spec位.

整个类不赢,属性单独获胜,如果.one有这样的属性.two没有你当然会看到这两个的该属性<div>的元素.


Ben*_*owe 6

类属性的顺序一点也不重要。这取决于几件事,在你的情况下,它是你的CSS的编写顺序。

两种样式具有相同的特异性,因此 .two 样式会覆盖 .one 的样式,因为它在样式标记中的位置较低。


mdm*_*dma 6

正如其他答案所指出的,在 class 属性中声明的顺序没有影响 - 优先级来自 CSS 文件中的声明顺序。

但是,如果你真的想模拟一些允许你在 class 属性中“伪造”优先级的东西,你可以尝试:

   .one-first { border: 6px dashed green }
      .two-first { border: 6px dashed orange }

   .one { border: 6px dashed green }
      .two { border: 6px dashed orange }
Run Code Online (Sandbox Code Playgroud)

进而

   <div class="one-first two"/>
Run Code Online (Sandbox Code Playgroud)

   <div class="two-first one"/>
Run Code Online (Sandbox Code Playgroud)

将排序最后一个获胜的优先级(与最后一个优先的 CSS 属性类似。)