Zielelemente mit mehreren Klassen innerhalb einer Regel


117

Ich habe HTML-Code mit Elementen mit mehreren Klassen, und ich muss sie innerhalb einer Regel zuweisen, damit dieselben Klassen in verschiedenen Containern unterschiedlich sein können. Angenommen, ich habe dies in meinem CSS:

.border-blue {
    border: 1px solid blue;
}
.background {
    background: url(bg.gif);
}

Dann habe ich das in meinem HTML:

<div class='border-blue background'>Lorum Crap No-one Cares About Ipsum</div>

Kann ich diese innerhalb einer einzigen Regel ansprechen? So funktioniert zum Beispiel, von dem ich weiß, dass es nicht funktioniert:

.border-blue, .background {
    border: 1px solid blue;
    background: url(bg.gif);
}

Antworten:


181

.border-blue.background { ... }ist für einen Artikel mit mehreren Klassen.
.border-blue, .background { ... }ist für mehrere Elemente mit jeweils einer eigenen Klasse.
.border-blue .background { ... }ist für ein Element, bei dem '.background' das Kind von '.border-blue' ist.

Siehe Chris 'Antwort für eine gründlichere Erklärung.


2
Vielen Dank! Ich wusste nicht, ob dies möglich ist, also bat ich hier, es herauszufinden.
Tanner Ottinger

Diese Lösung funktioniert bei mir nicht (oder nicht mehr ...).
Fresko

Sie müssen die Klassen durch Kommas trennen, wie die Antwort von Chris sagt
Fresko

Was meinst du mit .border-blue .background { ... }ist Kind? Ich habe es versucht und das funktioniert nicht
Eliav Louski

174

Nur für den Fall, dass jemand wie ich darauf stößt und es nicht merkt, gelten die beiden oben genannten Varianten für unterschiedliche Anwendungsfälle.

Folgende:

.blue-border, .background {
    border: 1px solid #00f;
    background: #fff;
}

Dies ist der Fall, wenn Sie Elementen Stile hinzufügen möchten, die entweder den blauen Rand oder die Hintergrundklasse haben, z. B.:

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

Alle würden einen blauen Rand und einen weißen Hintergrund erhalten.

Die akzeptierte Antwort ist jedoch anders.

.blue-border.background {
    border: 1px solid #00f;
    background: #fff;
}

Dadurch werden die Stile auf Elemente <div>angewendet , die beide Klassen haben. In diesem Beispiel sollten nur die Stile mit beiden Klassen angewendet werden (in Browsern, die das CSS richtig interpretieren):

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

Stellen Sie sich das also im Grunde so vor: Die Kommatrennung gilt für Elemente mit einer Klasse ODER einer anderen Klasse und die Punkttrennung für Elemente mit einer Klasse UND einer anderen Klasse .


12
Dies war eine sehr hilfreiche Antwort, die ich fast nicht gelesen hätte. Prost!
Psicopoo

1
Sei einfach vorsichtig. Es gibt keine Leerzeichen in.blue-border.background
Knu8

2
think of it as AND and OR: Guter Hinweis. Ich könnte hinzufügen, dass .x .yman sich das vorstellen kann alsy && ancestors.has(x)
Siddharth Garg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.