Ich versuche herauszufinden, warum eine meiner CSS-Klassen die andere zu überschreiben scheint (und nicht umgekehrt).
Hier habe ich zwei CSS-Klassen
.smallbox {
background-color: white;
height: 75px;
width: 150px;
font-size:20px;
box-shadow: 0 0 10px #ccc;
font-family: inherit;
}
.smallbox-paysummary {
@extend .smallbox;
font-size:10px;
}
und aus meiner Sicht rufe ich an
<pre class = "span12 pre-scrollable smallbox-paysummary smallbox ">
Die Schriftart (das überlappende Element) wird als 10 statt 20 Pixel angezeigt. Kann jemand erklären, warum dies der Fall ist?
@extend .smallbox;
, was wie nicht standardmäßiges cSS aussieht.@extend
- wenn es das tut, was ich denke - und beide Selektoren für dasselbe Element verwenden..smallbox-paysummary
) aufzunehmen und optional die CSS-Deklaration klarer zu machen (ohne sich auf die Reihenfolge des Auftretens in der CSS-Datei zu verlassen), indem.smallbox.smallbox-paysummary { font-size: 10px; }
.smallbox-paysummary
, dass die Schrift kleiner ist, warum verkleinern Sie sie dann überhaupt?Antworten:
Es gibt verschiedene Regeln (in dieser Reihenfolge angewendet):
!important
immer Vorrang.In Ihrem Fall gilt die Regel 3.
Spezifität für einzelne Selektoren vom höchsten zum niedrigsten:
#main
wählt aus<div id="main">
).myclass
), Attributselektoren (Bsp .:[href=^https:]
) und Pseudoklassen (Bsp .::hover
)div
) und Pseudoelemente (Bsp .:::before
)Um die Spezifität von zwei kombinierten Selektoren zu vergleichen, vergleichen Sie die Anzahl der Vorkommen einzelner Selektoren für jede der oben genannten Spezifitätsgruppen.
Beispiel: Vergleiche
#nav ul li a:hover
mit#nav ul li.active a::after
#nav
):hover
und.active
)ul li a
) für den ersten und 4 für den zweiten (ul li a ::after
), daher ist der zweite kombinierte Selektor spezifischer.Ein guter Artikel über CSS-Selektor-Spezifität .
quelle
:hover
ist kein Klassenwähler, sondern ein Pseudo-Klasse - Selektor.Hier ist eine Zusammenstellung der CSS-Stilreihenfolge in einem Diagramm, in dem CSS-Regeln eine höhere Priorität haben und Vorrang vor den anderen haben:
Haftungsausschluss : Mein Team und ich haben dieses Stück zusammen mit einem Blog-Beitrag ( https://vecta.io/blog/definitive-guide-to-css-styling-order ) ausgearbeitet, von dem ich denke, dass er für alle Frontends nützlich sein wird Entwickler.
quelle
Was wir hier betrachten, heißt Spezifität, wie von Mozilla angegeben :
Ich mag die 0-0-0 Erklärung unter https://specifishity.com :
Ganz beschreibend das Bild der
!important
Richtlinie! Manchmal ist dies jedoch die einzige Möglichkeit, das Inline-style
Attribut zu überschreiben . Es ist also eine bewährte Methode, beides zu vermeiden.quelle
Zunächst
@extend
scheint es , basierend auf Ihrer Direktive, dass Sie kein reines CSS verwenden, sondern einen Präprozessor wie SASS os Stylus.Wenn wir nun über "Rangfolge" in CSS sprechen, gibt es eine allgemeine Regel: Alle Regeln, die nach der Anwendung anderer Regeln (von oben nach unten) festgelegt wurden. In Ihrem Fall können Sie die Priorität Ihrer Regeln ändern , indem Sie einfach angeben,
.smallbox
nachdem.smallbox-paysummary
Sie dies getan haben.Wenn Sie jedoch etwas weiter gehen möchten, empfehle ich folgende Lektüre: CSS-Kaskaden-W3C-Spezifikation . Sie werden feststellen, dass die Priorität einer Regel basiert auf:
quelle
AS ist Status in W3: W3 Cascade CSS
Die Reihenfolge, in der verschiedene Stylesheets angewendet werden, lautet wie folgt (Zitat aus dem W3-Kaskadenabschnitt):
Benutzeragentendeklarationen
normale Benutzererklärungen
Autor normale Erklärungen
Autor wichtige Erklärungen
Weitere Informationen hierzu finden Sie im verwiesenen W3-Dokument
quelle
Die Reihenfolge, in der die Klassen im HTML-Element angezeigt werden, spielt keine Rolle. Was zählt, ist die Reihenfolge, in der die Blöcke im Stylesheet angezeigt werden.
In Ihrem Fall
.smallbox-paysummary
wird nach.smallbox
daher die 10px Priorität definiert.quelle
Inline-CSS (HTML-Stilattribut) überschreibt CSS-Regeln in Stil-Tags und CSS-Dateien
Ein spezifischerer Selektor hat Vorrang vor einem weniger spezifischen.
Regeln, die später im Code erscheinen, überschreiben frühere Regeln, wenn beide dieselbe Spezifität haben.
quelle
Es ist auch wichtig zu beachten, dass der Browser den Stilen, die zuletzt in das DOM geschrieben wurden, Vorrang einräumt, wenn Sie zwei Stile in einem HTML-Element mit gleicher Priorität haben. Wenn also im DOM:
... die Breite des Div beträgt 50px
quelle