Miriam Suzanne erklärt in einem Mozilla Developer Video zu diesem Thema.
Der Wert revert in CSS „setzt“ eine Eigenschaft auf ihren vererbten Wert zurück, geht aber nur bis zur UA-Stylesheet zurück. Das ist entscheidend, da er z. B. kein <p> auf inline zurücksetzen würde, weil ein <p> laut UA-Stylesheet ein Block-Element ist.
Wenn wir also diesen HTML-Code hätten
<p>Lorem, ipsum dolor.</p>
<p class="alt">Fugit, id vel.</p>
Und CSS
p {
color: red;
}
.alt {
color: revert;
}
Beide Absätze würden vom p-Selektor ausgewählt und rot gefärbt werden, aber der Klassen-Selektor am zweiten Absatz hat eine höhere Spezifität, sodass color: revert; gewinnt und den Text zurück auf Schwarz (der UA-Standard) ändert.
Aber die Color-Eigenschaft wird weitergegeben, also wenn wir hätten
<div class="parent">
<p>Lorem, ipsum dolor.</p>
<p class="alt">Fugit, id vel.</p>
</div>
.parent {
color: blue;
}
p {
color: red;
}
.alt {
color: revert;
}
Der zweite Absatz wäre blau, weil revert ihn zwingt, seine color aus der Vererbung zu übernehmen.
Der Wert revert ist ziemlich neu und wird in Firefox und Safari unterstützt, aber noch nicht in der Chrome-Welt. Wir haben bereits ein paar verwandte Schlüsselwörter, die für jede Eigenschaft funktionieren und dazu dienen, die Vererbung zu steuern und Werte zurückzusetzen.
Der Unterschied ist klein, aber wichtig:
unseterlaubt Vererbung, währendinitialdas nicht tut.
Miriam argumentiert, dass revert eigentlich das nützlichste von ihnen ist, weil es „Benutzer- und Benutzeragenten-Stile berücksichtigt“.
Ich stimme nicht zu. Aber (und ich hasse es, das zu sagen) ich denke, wir brauchen eine vierte Option, eine, die die erzwingende Kraft von initial hat, aber den Respekt vor dem UA-Stylesheet von revert. Etwas wie…
.button {
all: default; /* Not real! */
/* New styles starting from UA base */
}
Diese Schlüsselwörter funktionieren mit jeder Eigenschaft, aber ich denke, die Verwendung von all ist am überzeugendsten. Es ist eine Möglichkeit, alle Stile eines Elements zu löschen, um mit einer leeren Leinwand zu beginnen. Allerdings ist keiner der drei Optionen gut genug für diesen Anwendungsfall. Die Werte unset und revert sind nicht gut genug, da sie immer noch die Vererbung zulassen und daher Stile nicht gut genug löschen. Der Wert initial ist zu stark, da er Standardwerte löscht, die Sie vielleicht nicht erwarten, wie z. B. ein <div> von block auf inline zu setzen.
Ja, ich stimme vollkommen zu, das wäre eine großartige Sache, die ich zahlreiche Male zu „finden“ versucht habe, als ich mich über initial und unset geärgert habe.
Die beste Lösung, die mir für Ihren Anwendungsfall eingefallen ist
Sehr clever.
Warum nicht einfach eine neue CSS-Klasse erstellen und bei Null anfangen?
Was ist der Unterschied zwischen
revertundinherit?Gute Frage!
inheritübernimmt den Wert des übergeordneten Elements. Nehmen wir also an, wir haben ein Element, das einen Rahmen hat.Nehmen wir nun an, dieses Element hat ein weiteres Element darin. Das ist ein Kindelement, da es sich in einem anderen Element befindet. Wenn wir möchten, dass dieses Kind den gleichen Rahmen hat, müssen wir nur
inheritverwenden, um den Rahmen zu duplizieren, anstatt alles neu schreiben zu müssen.Und dann gibt es
revert, das alle geerbten Stile, die ein Element möglicherweise übernimmt, löscht und die Standardstile des Elements verwendet.Seien Sie gewarnt, CSS-Werte „revert“ können nicht immer animiert und/oder überblendet werden, wie Sie es vielleicht erwarten. Es funktioniert möglicherweise in einem Browser und in einem anderen nicht. Das liegt daran, dass jeder Kern seine eigene Art hat, CSS zu parsen, und Animationen/Überblendungen unter Verwendung dieser wahrgenommenen Werte verarbeitet werden. Dies wird wahrscheinlich in einem Jahrzehnt kein Problem mehr sein (wir haben jetzt nur noch wenige verschiedene Browser-Engines), also behalten Sie das vorerst im Hinterkopf.