Ist es möglich, die Anzeigeeigenschaft mit ihrem Standardwert zu überschreiben? Zum Beispiel, wenn ich es in einem Stil auf "Keine" gesetzt habe und es mit der Standardeinstellung in einem anderen Stil überschreiben möchte.
Oder ist der einzige Weg, um herauszufinden, was der Standard dieses Elements ist, und es dann darauf einzustellen? Ich möchte nicht wissen müssen, ob das Element normalerweise blockiert, inline oder was auch immer ist ...
unset
.unset
,initial
,inherit
,revert
Antworten:
Die Standardstile eines Browsers werden in seinem User Agent-Stylesheet definiert, dessen Quellen Sie hier finden . Leider scheint die Spezifikation Cascading and Inheritance Level 3 keine Möglichkeit zu bieten, eine Stileigenschaft auf die Standardeinstellung ihres Browsers zurückzusetzen. Es ist jedoch geplant, ein Schlüsselwort dafür in Cascading and Inheritance Level 4 wieder einzuführen - die Arbeitsgruppe hat sich einfach noch nicht auf einen Namen für dieses Schlüsselwort festgelegt (der Link sagt derzeit
revert
, aber es ist nicht endgültig). Informationen zur Browserunterstützung fürrevert
finden Sie auf caniuse.com .Während die Level 3-Spezifikation ein
initial
Schlüsselwort einführt , setzt das Festlegen einer Eigenschaft auf ihren Anfangswert sie auf ihren Standardwert zurück, wie er durch CSS definiert wurde und nicht wie vom Browser definiert . Der Anfangswert vondisplay
istinline
; Dies wird hier angegeben . Dasinitial
Schlüsselwort bezieht sich auf diesen Wert, nicht auf die Standardeinstellung des Browsers. Die Spezifikation selbst macht diesen Hinweis unter derall
Eigenschaft :Ich denke, die einzige Möglichkeit, derzeit reines CSS zu verwenden, besteht darin, den Standardwert des Browsers nachzuschlagen und manuell darauf einzustellen:
(Eine Alternative zu den oben genannten wäre
div.foo:not(.bar) { display: inline-block; }
, aber dazu muss der ursprüngliche Selektor geändert und nicht überschrieben werden.)quelle
initial
tatsächlich tut. Ich habe meine Antwort aktualisiert.display
immerinline
( w3.org/TR/CSS21/visuren.html#display-prop ), unabhängig davon, ob er sich auf einemdiv
oder einem befindetspan
. Eindiv
Element entsprichtdisplay: block
standardmäßig HTML und nicht CSS. Es liegt also am UA-Stylesheet des Browsersdiv { display: block; }
.default
wurde umbenannt inrevert
.Wenn die Verwendung von Javascript zulässig ist , können Sie die
display
Eigenschaft auf eine leere Zeichenfolge setzen. Dadurch wird die Standardeinstellung für dieses bestimmte Element verwendet.Hier ist ein Link zu einem jsbin .
Das ist schön , weil Sie (nicht über die verschiedenen Arten von Anzeige zu kümmern zurückzukehren
block
,inline
,inline-block
,table-cell
, etc.).Dafür ist jedoch Javascript erforderlich. Wenn Sie also nach einer Nur-CSS-Lösung suchen, ist dies nicht die richtige Lösung für Sie.
Hinweis: Dies überschreibt Inline-Stile, jedoch keine in CSS festgelegten Stile
quelle
style
Attribut festgelegt wurde. Mit dieser Methode können Sie eine Deklaration nicht überschreiben oder aus einem Stylesheet entfernen.style
Attribut oder den JavaScript-Setter angewendet wurde . Sie können eine Stylesheet-Deklaration weiterhin überschreiben, wenn Sie einen bestimmten Wert über JS festlegen. Wenn Sie ihn jedoch auf leer setzen, wird er überhaupt nicht festgelegt. Die Stylesheet-Deklaration bleibt erhalten. Siehe die modifizierte Geige: jsfiddle.net/BoltClock/g45qagt3/1Unset
display
:Sie können den Wert verwenden,
unset
der sowohl in Firefox als auch in Chrome funktioniert .quelle
unset
hat die gleichen Probleme wieinitial
. Der Wert vondisplay
wirdinline
. Siehe codepen.io/Gidgidonihah/pen/mwWxEqunset
hilft dabei nicht weiter, da es pro Eigenschaft ist und die Anzeige immer auf zurücksetztinline
. Bitte erwägen Sie, Ihre Antwort zu aktualisieren.Nein, das ist generell nicht möglich. Sobald ein CSS- (oder HTML-) Code einen Wert für eine Eigenschaft eines Elements festlegt, kann dieser nicht mehr rückgängig gemacht und der Browser angewiesen werden, seinen Standardwert zu verwenden.
Es ist natürlich möglich, einer Eigenschaft einen Wert zuzuweisen, den Sie haben erwarten , dass er der Standardwert ist. Dies funktioniert möglicherweise recht häufig, wenn Sie den Abschnitt zum Rendern von HTML5 CR überprüfen , der hauptsächlich die tatsächlichen Funktionen der Browser widerspiegelt.
Die Antwort lautet jedoch "Nein", da Browser möglicherweise beliebige Standardwerte haben. Sie sollten analysieren, aus welchem Grund die Standardeinstellungen wiederhergestellt werden sollen. Das ursprüngliche Problem ist möglicherweise noch lösbar.
quelle
Wenn Sie Zugriff auf JavaScript haben , können Sie ein Element erstellen und dessen berechneten Stil lesen.
quelle
In Bezug auf die Antwort von BoltClock und John hatte ich persönlich Probleme mit dem ursprünglichen Schlüsselwort bei der Verwendung von IE11. Es funktioniert gut in Chrome, aber im IE scheint es keine Wirkung zu haben.
Entsprechend dieser Antwort unterstützt IE das anfängliche Schlüsselwort nicht: Div display: initial funktioniert nicht wie in ie10 und chrome 29 vorgesehen
Ich habe versucht, es stattdessen leer zu setzen, wie hier vorgeschlagen: So kehren Sie nach der Anzeige zum Normalzustand zurück: Keine für Tabellenzeile
Das hat funktioniert und war gut genug für mein Szenario. Um den tatsächlichen Anfangswert festzulegen, ist die obige Antwort natürlich die einzig gute, die ich finden konnte.
quelle