• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Reihenfolge bei mehreren Klassen zu einem Element

NetAktiv

Senior HTML'ler
Hallo,

ich dachte immer, wenn man ein Element mit mehreren Klassen versieht, dass dann die Reihenfolge beim Element eine Rolle spielt, also class="a b" zu einem anderen Ergebnis als class="b a" führen kann. Das scheint aber nicht der Fall zu sein, wie mein Beispiel zeigt, wichtig ist die Reihenfolge der Definition der Klassen a und b.

HTML:
<!DOCTYPE html>
<html>
<head>
<title>Class Reihenfolge</title>
<style type="text/css">

    body { font-family: Arial, Helvetica, Sans-Serif; margin:10px; padding:0; }
    div { width: 250px; height: 100px; margin: 15px; border-color:black; border-width:5px; border-style: solid; }
    .blue  { background-color:blue; color:green;  border-color:red }
    .red   { background-color:red;  color:yellow; border-color:blue }

</style>
</head>
<body>
<p>Die Reihenfolge wird durch die Definition im Abschnitt &lt;style&gt; bestimmt, </br>
nicht durch die Reihenfolge der Klassen beim class-Attribut des Elements.
</p>
    <div class="">Class=""</div>
    <div class="red">Class="red"</div>
    <div class="blue">Class="blue"</div>
    <div class="blue red">Class="blue red"</div>
    <div class="red blue">Class="red blue"</div>
</body>
</html>
 
Werbung:
Hallo

die Reihenfolge von Klassen beim Element (also im body-Bereich) spielt keine Rolle.

Welche CSS-Anweisung im Endeffekt gewinnt ist zwar genau geregelt, aber ein Thema für sich.

Das Stichwort dazu lautet Spezifität. Siehe auch

http://little-boxes.de/lb1/6.5-spezifitaet-punktesystem-fuer-selektoren.html

oder suche nach "css spezifität".

Wenn du zum Beispiel im CSS die Klasse ".red" durch"div.red" ersetzt gewinnt div.red immer gegen .blue, da sich die Spezifität erhöht.

Nur wenn die Spezifität unentschieden ausgeht entscheidet die Reihenfolge im CSS-Quelltext.

Wobei auch noch der Ort der CSS Anweisungen mitentscheidet. Also ob sich die CSS-Anweisungen in einer speziellen Datei befinden (externes CSS), im head-Bereich der Seite (internes CSS) oder direkt in den body-Bereich in das Element geschrieben werden (inline CSS). Merksatz: Je näher sich das CSS am Element befindet desto höher wird es bewertet.

Und gleich ein Hinweis: Lass die Finger von "!important". Wenn das CSS sauber strukturiert ist braucht man es nicht. Grade Anfänger haben dann ganz schnell CSS-Dateien, bei denen über die Hälfte der Anweisungen mit !important gekennzeichnet sind. Es ist viel sinnvoller mit den Browserwerkzeugen nachzuschauen, warum sich bestimmte CSS-Anweisungen auswirken - oder halt auch nicht.

Gruss

MrMurphy
 
Zuletzt bearbeitet:
Hallo Murphy,

danke für die schnelle Antwort. Die Priorität der CSS Anweisung war mir bekannt so weit es die Nähe zum Element angeht. Nun war aber in meinem Beispiel die Nähe eigentlich identisch, also im <style>-Block der Datei und ich hätte erwartet, dass diese sozusagen gleichberechtigt sind und in diesem Fall die Reihenfolge in der class-Eigenschaft des Elementes bestimmt, wer gewinnt. Nachdem ich aber in 3 Browsern Edge, Opera und Firefox das gleiche überraschende Ergebnis bekam, dass der Ort der Definition (red vor blue) bestimmt, wer gewinnt, wollte ich mich nur noch mal versichern, dass dies auch die korrekte Implementierung ist.

Hier noch der entsprechende Hinweis aus deinem Link bei Unentschieden

Es gewinnt die am weitesten unten notierte Regel, ganz nach dem biblischen Motto »Die Letzten werden die Ersten sein«.

Grüße, Rainer
 
Werbung:
Zurück
Oben