Klassenüberschreibung, wenn zwei Klassen einem Div zugeordnet sind

80

Ich habe ein <div>Tag erstellt, in dem ich zwei Klassen für ein <div>Tag anwenden wollte, das eine Miniaturbildgalerie sein würde. Eine Klasse für ihre Position und die andere Klasse für ihren Stil. Auf diese Weise konnte ich den Stil anwenden, ich hatte einige seltsame Ergebnisse, die mich zu einer Frage brachten.

Können einem <div>Tag zwei Klassen zugewiesen werden ? Wenn ja, welches setzt das andere außer Kraft oder welches hat Priorität?

Daniel Ramirez-Escudero
quelle

Antworten:

151

Einem Div können mehrere Klassen zugewiesen werden. Trennen Sie sie einfach im Klassennamen durch Leerzeichen wie folgt:

<div class="rule1 rule2 rule3">Content</div>

Dieses Div entspricht dann allen Stilregeln für drei verschiedene Klassenselektoren : .rule1, .rule2und .rule3.

CSS-Regeln werden auf Objekte auf der Seite angewendet, die ihren Selektoren in der Reihenfolge entsprechen, in der sie im Stylesheet vorkommen. Wenn zwischen zwei Regeln ein Konflikt besteht (mehr als eine Regel versucht, dasselbe Attribut festzulegen), bestimmt die CSS-Spezifität , welche Regel hat Vorrang.

Wenn die CSS-Spezifität für die widersprüchlichen Regeln identisch ist, hat die spätere (die später im Stylesheet oder im späteren Stylesheet definierte) Vorrang. Die Reihenfolge der Klassennamen auf dem Objekt selbst spielt keine Rolle. Bei gleicher CSS-Spezifität ist die Reihenfolge der Stilregeln im Stylesheet von Bedeutung.

Wenn Sie also Stile wie diesen hätten:

.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

Da dann beide Regeln mit dem div übereinstimmen und genau die gleiche CSS-Spezifität haben, kommt die zweite Regel später, sodass sie Vorrang hat und der Hintergrund rot ist.


Wenn eine Regel eine höhere CSS-Spezifität hatte ( div.rule1höhere Werte als .rule2):

div.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

Dann hätte es Vorrang und die Hintergrundfarbe wäre hier grün.


Wenn die beiden Regeln nicht in Konflikt stehen:

.rule1 {
    background-color: green;
}

.rule2 {
    margin-top: 50px;
}

Dann werden beide Regeln angewendet.

jfriend00
quelle
+1 Ein weiterer großartiger Link, der die CSS-Spezifität erklärt: maxdesign.com.au/articles/css-cascade
Fabian Barney
Die Antwort unten ist meiner Meinung nach korrekter, wenn ich mich nicht irre.
Nagates
@nagates - Welche Antwort ist Ihrer Meinung nach korrekter und warum? Es gibt viele Antworten "unten", daher weiß ich nicht, auf welche Sie sich bezogen haben und warum Sie denken, dass es "korrekter" ist. Gerne verbessere oder kläre ich meine Antwort, wenn Sie Ihre Gedanken erklären können.
jfriend00
jfriend00: Die Antwort von @ erez-sason unten ist die, auf die er sich bezieht. Das ist seltsam, weil ich dachte, es funktioniert so, wie Sie es beschrieben haben, aber seine Beispiele funktionieren eindeutig so, wie er es beschreibt. Ich frage mich, ob es einen Unterschied zwischen eingebetteten und verknüpften Stilen gibt.
Adam McCormick
1
@AdamMcCormick - Meine Antwort enthält bereits die Informationen aus dieser Antwort als eines der Beispiele, die ich zur Verfügung stelle: Da beide Regeln mit dem div übereinstimmen und genau die gleiche CSS-Spezifität haben, kommt die zweite Regel später, sodass sie Vorrang und Hintergrund hat wäre rot. . Ich zeige mehrere mögliche Szenarien und erkläre sie alle, nicht nur ein Szenario. Das OP war mit seinem Code nicht spezifisch, daher habe ich mich für die allgemeine Erklärung entschieden, die mehrere Optionen abdeckt und die einfachste Option enthält.
jfriend00
26

Tatsächlich wird die Klasse, die zuletzt im CSS definiert wurde, auf Ihr Div angewendet.

Hör zu:

rot zuletzt in css

.blue{ color: blue; }
.red { color: red;  }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>

vs.

blau zuletzt in css

.red { color: red;  }
.blue{ color: blue; }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>

Erez Sason
quelle
4
Dies ist eine viel bessere Antwort. Die akzeptierte Antwort ist irreführend.
SD
4

Wenn Sie fragen, ob sie dieselbe Eigenschaft haben, nehmen Sie gemäß der CSS-Regel die letzte Anweisung.

<div class="red green"></div>

CSS

.red{
 color:red;
}
.green{
 color:green;
}

Gemäß dem obigen Beispiel wird die letzte Anweisung gemäß dem CSS- Baum verwendet, der .green ist .

Sandeep
quelle
3

Die zuletzt im CSS definierte Klasse hat Priorität, sofern nichts anderes zutrifft.

Informieren Sie sich über die CSS-Priorität, um zu sehen, wie es funktioniert.

Henrik Ammer
quelle
Meinen Sie physisch zuletzt im eigentlichen CSS selbst oder den letzten Klassennamen in der Liste?
Brain2000
Er meint tatsächlich den letzten Platz in der Liste aller überall definierten CSS-Regeln, nicht die Reihenfolge in der Attributliste, leider für diejenigen, die die JavaScript classList-Methoden verwenden, die diese Entwurfsentscheidung meiner Meinung nach überraschend und nicht hilfreich finden.
David Spector
2

Viele Klassen können einem Element zugewiesen werden. Sie trennen sie einfach durch ein Leerzeichen

<div class="myClass aSecondClass keepOnClassing stayClassySanDiego"></div>

Aufgrund der Kaskade in CSS werden die Überschreibungsregeln, die dem unteren Rand des Dokuments am nächsten liegen, auf das Element angewendet.

Also wenn du hast

.myClass
{
    background: white;
    color: blue;
}

.keepOnClassing
{
    color: red;
}

Die rote Farbe wird verwendet, jedoch nicht die Hintergrundfarbe, da sie nicht überschrieben wurde.

Sie müssen auch die CSS-Spezifität berücksichtigen. Wenn Sie einen spezifischeren Selektor haben, wird dieser verwendet:

.myClass
{
    background: white;
    color: blue;
}

div.myClass.keepOnClassing
{
    background: purple;
    color: red;
}

.stayClassySanDiego
{
    background: black;
}

Der zweite Selektor wird hier verwendet, da er spezifischer ist.

Hier können Sie sich alles ansehen .

Kyle
quelle
Upvoted für den besten Klassennamen aller Zeiten (sowie vollständig und genau)
Oliver Turner