In einem HTML-Header habe ich Folgendes:
<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
styles.css
ist mein seitenspezifisches Blatt. master.css
ist ein Blatt, das ich in jedem meiner Projekte verwende, um die Standardeinstellungen des Browsers zu überschreiben. Welches dieser Stylesheets hat Priorität? Beispiel: erstes Blatt enthält spezifische
body { margin:10px; }
Und zugehörige Grenzen, aber die zweite enthält meine Resets von
html, body:not(input="button") {
margin: 0px;
padding: 0px;
border: 0px;
}
Funktioniert das kaskadierende Element von CSS im Wesentlichen in Bezug auf Stylesheet-Referenzen genauso wie in typischen CSS-Funktionen? Bedeutet das, dass die letzte Zeile die angezeigte ist?
css
overriding
stylesheet
ian5v
quelle
quelle
body:not(input="button")
ist übrigens kein gültiger Selektor. Sie wollten es wahrscheinlich aufteilenbody, input:not([type="button"])
.master.css
sollte zuerst laden, dann ist es viel einfacher, sie zu überschreiben die Meisterstile in Ihremstyles.css
.Antworten:
Die Regeln für die Kaskadierung von CSS-Regeln sind komplex - anstatt zu versuchen, sie schlecht zu paraphrasieren, verweise ich Sie einfach auf die Spezifikation:
http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade
Kurz gesagt: Spezifischere Regeln überschreiben allgemeinere. Die Spezifität wird basierend darauf definiert, wie viele IDs, Klassen und Elementnamen betroffen sind und ob die
!important
Deklaration verwendet wurde. Wenn mehrere Regeln derselben "Spezifitätsstufe" existieren, gewinnt die zuletzt erscheinende.quelle
!important
direkt an der Kaskade teil und hat nichts mit Spezifität zu tun. Die Spezifität bezieht sich auf Selektoren, während!important
sie bei Eigenschaftsdeklarationen verwendet wird. (Sie haben also Recht, wenn Sie sagen, dass die Regeln komplex sind !;)Der spezifischste Stil wird angewendet:
Wenn alle Selektoren dieselbe Spezifität haben, wird die neueste Dekleration verwendet:
In Ihrem Fall
body:not([input="button"])
ist spezifischer, so dass seine Stile verwendet werden.quelle
Ordnung ist wichtig. Der zuletzt deklarierte Wert des mehrfachen Auftretens wird übernommen. Bitte sehen Sie das gleiche, das ich ausgearbeitet habe: http://jsfiddle.net/Wtk67/
Wenn Sie die Reihenfolge von
.test{}
ändern, können Sie sehen, dass der HTML-Code den Wert des zuletzt in CSS deklarierten Werts annimmtquelle
Das zuletzt geladene CSS ist THE MASTER, das alle CSSs mit denselben CSS-Einstellungen überschreibt
Beispiel:
reset.css
master.css
Die Ausgabe für das h1-Tag hat die Schriftgröße: 30px;
quelle
.css
zuletzt geladen. Werden sie angewendet, um sie zu laden oder um sie zu definieren?Versuchen wir, die Kaskadenregel anhand eines Beispiels zu vereinfachen. Die Regeln gelten allgemeiner.
Hier ist der CSS- und HTML-Code;
Hier ist der CSS-Stil
Hier ist das Ergebnis. Unabhängig von der Reihenfolge der Stildateien oder der Stildeklaration
id="important"
gilt am Ende (beachten Sie dieclass="deadline"
zuletzt deklarierte, hat jedoch keine Auswirkung).Das
<article>
Element enthält ein<aside>
Element, jedoch wird der zuletzt deklarierte Stil wirksam, in diesem Fallarticle h2 { .. }
für das dritte h2-Element.Hier ist das Ergebnis auf IE11: (Nicht genügend Rechte zum Posten des Bildes) DarkBlue: Houston Chronicle News, DarkGreen: Neueste Entwicklungen in Ihrer Stadt, Lila: Houston Local Advertisement Section, Schwarz: Nächster Abschnitt
quelle
Dies hängt sowohl von der Ladereihenfolge als auch von der Spezifität der tatsächlichen Regeln ab, die auf jeden Stil angewendet werden. In Anbetracht des Kontextes Ihrer Frage möchten Sie zuerst Ihren allgemeinen Reset und dann die seitenspezifische laden. Wenn Sie dann immer noch nicht den beabsichtigten Effekt sehen, müssen Sie die Spezifität der beteiligten Selektoren untersuchen, wie andere bereits betont haben.
quelle
Ja, es funktioniert genauso, als wären sie auf einem Blatt:
Load Order Matters!
Im obigen Code gibt es keine Garantie,
master.css
die danach geladen wirdstyles.css
. Wennmaster.css
es schnell geladen wird undstyles.css
eine Weile dauert,styles.css
wird es daher zum zweiten Stylesheet und zu allen Regeln mit der gleichen Spezifitätmaster.css
werden überschrieben.Am besten fassen Sie alle Ihre Regeln vor der Bereitstellung auf einem Blatt zusammen (und minimieren sie).
quelle
master.css
angehalten und dasstyles.css
Laden vollständig zugelassen habe. Dann lasse ichmaster.css
laden. Der "überlappende" Stil wurdemaster.css
weiterhin angewendet - und das Rendering wurde blockiert, bis esmaster.css
geladen und analysiert wurde. Hinweis : Ich habe versucht ,rel=preload
aufmaster.css' (no halting) and that apparently alters its _declaration_ order by hoisting it above
styles.css`.Der beste Weg ist, Klassen so oft wie möglich zu verwenden. Vermeiden Sie sowieso ID-Selektoren (#). Wenn Sie Selektoren mit nur einzelnen Klassen schreiben, ist die CSS-Vererbung viel einfacher zu befolgen.
Update: Weitere Informationen zur CSS-Spezifität finden Sie in diesem Artikel: https://css-tricks.com/specifics-on-css-specificity/
quelle
Ich vermute aus Ihrer Frage, dass Sie eine doppelte Auswahl haben, einen Master-Satz, der für alle Seiten gilt, und einen spezifischeren Satz, den Sie die Master-Werte für jede einzelne Seite überschreiben möchten. Wenn dies der Fall ist, ist Ihre Bestellung korrekt. Der Master wird zuerst geladen und die Regeln in der nachfolgenden Datei haben Vorrang (wenn sie identisch sind oder das gleiche Gewicht haben). Es gibt eine sehr empfohlene Beschreibung aller Regeln auf dieser Website http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Als ich mit der Front-End-Entwicklung begann, wurden auf dieser Seite so viele Fragen geklärt.
quelle
Es ist die Kaskade , die den Vorrang von Deklarationen definiert. Ich kann die offizielle Spezifikation empfehlen; Dieser Teil ist gut lesbar.
https://www.w3.org/TR/css-cascade-3/#cascading
Das Folgende wirkt sich auf die Sortierung in absteigender Reihenfolge der Priorität aus.
Eine Kombination aus Herkunft und Bedeutung:
Transition
Erklärungen!important
!important
!important
style
AttributAnimation
Erklärungenstyle
AttributWenn zwei Deklarationen denselben Ursprung und dieselbe Bedeutung haben, kommt die Spezifität ins Spiel, dh wie klar das Element definiert ist, und berechnet eine Bewertung.
#x34y
).level
)li
):hover
) ausgenommen:not
Zum Beispiel hat der Selektor
main li + .red.red:not(:active) p > *
eine Spezifität von 24.Die Reihenfolge des Auftretens spielt nur dann eine Rolle, wenn zwei Definitionen denselben Ursprung, dieselbe Bedeutung und dieselbe Spezifität haben. Spätere Definitionen gehen früheren Definitionen im Dokument voraus (einschließlich Importen).
quelle
Ich glaube, wenn der Code ausgeführt wird, wird er von oben nach unten gelesen, was bedeutet, dass der letzte CSS-Link ähnliche Stile in allen darüber liegenden Stylesheets überschreibt.
Zum Beispiel, wenn Sie zwei Stylesheets erstellt haben
In beiden Fällen setzen Sie die Hintergrundfarbe des Körpers auf zwei verschiedene Farben - die Farbe des Körpers in style2.css hat Vorrang.
Sie können das Problem der Stilpriorität vermeiden, indem Sie
!IMPORTANT
den Klassenstil verwenden, für den Sie Priorität haben möchten, oder möglicherweise Ihre<link>
Bestellung neu anordnen .quelle