Wenn mich neulich jemand gefragt hätte, was der Unterschied zwischen inherit und initial ist, hätte ich vielleicht geantwortet
„Was, es gibt einen Unterschied?“
Ich schreibe seit über zehn Jahren CSS, aber irgendwie bin ich nie dazu gekommen, genau zu verstehen, was initial eigentlich ist oder bewirkt. Nennt es Unwissenheit, Faulheit oder Glück, aber inherit hat mir immer geholfen und ich habe nie darüber nachgedacht, wann initial stattdessen verwendet werden könnte. Dieser Beitrag wird also einige der Dinge teilen, die ich gelernt habe.
Was initial bedeutet
Zunächst einmal hilft uns die Spezifikation, den Unterschied zwischen einem Schlüsselwort initial und einem Anfangswert zu verstehen.
- Anfangsschlüsselwort: Wenn der kaskadierte Wert einer Eigenschaft das Anfangsschlüsselwort ist, wird der Anfangswert der Eigenschaft ihr spezifizierter Wert.
- Anfangswert: Jede Eigenschaft hat einen Anfangswert, der in der Definitionstabelle der Eigenschaft definiert ist. Wenn die Eigenschaft keine vererbte Eigenschaft ist und die Kaskade keinen Wert ergibt, dann ist der spezifizierte Wert der Eigenschaft ihr Anfangswert.
Ähm, okay. Ich habe diese Definitionen durch Google Translate laufen lassen (Scherz!) und bin zu diesem Ergebnis gekommen
Das Anfangsschlüsselwort ist das, was als Eigenschaft deklariert wird, wobei der Anfangswert die resultierende Ausgabe ist, wie sie durch den Browser-Standard definiert wird.
Wenn also das Schlüsselwort initial hier verwendet wird
.module {
color: initial;
}
…dann könnte der Anfangswert black zurückgeben, wenn black der Browser-Standard für die Eigenschaft dieses Elements ist.
Wie es sich von inherit unterscheidet
Wenn Sie denken, das klingt sehr ähnlich wie inherit, dann haben Sie absolut Recht. Es klingt verdammt ähnlich.
Aber initial und inherit unterscheiden sich durch den zusätzlichen Schritt, den inherit unternimmt, um zu prüfen, ob es andere Eigenschaften gibt, die es in der Kaskade verwenden kann, bevor es zum Anfangswert übergeht.


Ein Beispiel für den Unterschied
Sehen Sie sich den Pen CSS Initial vs. Inherit von CSS-Tricks (@css-tricks) auf CodePen an.
Sehen Sie das? Die Eigenschaften in der linken Box sind alle so eingestellt, dass sie die Werte der Klasse .module erben, da dies das übergeordnete Element ist. Auf der anderen Seite sind die Eigenschaften in der rechten Box auf initial eingestellt, was die Eigenschaften des Elements auf die Browser-Standardwerte zurücksetzt.
Wann initial verwendet werden sollte
Ich betrachte initial gerne als einen harten Reset. Es ist leicht, dass Stile mit wachsendem CSS unübersichtlich werden, und die Verwendung von initial ist eine Möglichkeit, Dinge zu bereinigen, damit ein Element zu seinem natürlichen Zustand zurückkehren kann. Wenn initial altmodisches Nintendo wäre, würde ich es als Äquivalent zum Herausziehen einer fehlerhaften Spielkassette aus der Konsole und zum Hineinpusten verwenden (auch wenn das angeblich keine Wirkung hatte).
Aber das bedeutet nicht, dass initial ein Allheilmittel für Resets ist. Das liegt daran, dass Anfangswerte immer noch Browser-Standardwerten unterliegen, von denen wir wissen, dass sie von Browser zu Browser variieren können.
Ach wartet, ihr benutzt CSS-Resets? Ihr könnt erwarten, dass diese stattdessen als Anfangswerte verwendet werden.
Fazit: Ich würde initial verwenden, um alle geerbten Stile von einem Element vollständig zu löschen, und inherit verwenden, um sicherzustellen, dass das Element seine Anweisungen vom nächstgelegenen Elternteil erhält.
Ein praktischerer Anwendungsfall
Hier ist ein Beispiel dafür, wie initial verwendet werden kann, um abwechselnd gefärbte Zeilen in Tabellen zu erstellen.
Sehen Sie sich den Pen CSS Initial von CSS-Tricks (@css-tricks) auf CodePen an.
Browser-Unterstützung
MDN bietet eine gute Aufschlüsselung der aktuellen Unterstützung für initial. Beachten Sie den eklatanten Mangel an IE-Unterstützung.
| Chrome | Safari | Firefox | Opera | IE | Android | iOS |
|---|---|---|---|---|---|---|
| Ja | Ja | 19 | 15 | Nein | Ja | Ja |
Zusammenfassend
Ich habe mir den Kopf zerbrochen, um interessante Anwendungsfälle für initial zu finden. Obwohl ich ein großes Potenzial darin sehe, Standardstile auf ein Element anwenden zu können, bin ich ihnen in der Praxis noch nicht begegnet – das könnte aber mehr über mich aussagen als über den Eigenschaftenwert selbst.
Das wird richtig praktisch, wenn all als Eigenschaft mehr Unterstützung erhält als Eigenschaft. Das würde all: initial zu einem wirklich mächtigen Werkzeug für das Erstellen von Resets auf jedem Element machen.
Bitte teilt jede Situation, in der initial etwas war, das ihr in einem Projekt verwenden musstet. Bonuspunkte, wenn ihr es für knifflige Kunststücke verwendet habt.
„Going to“ nicht „gonna“.
Woowoo, das ist der Klang der Grammatikpolizei!
Oh Mann, komm schon!
display: nonefunktioniert für jedes Element und ist nützlich, wenn man etwas mit einer Klasse ausblenden möchte.Aber was, wenn man es mit dem richtigen Wert für ein bestimmtes Element wieder anzeigen möchte, ohne für jedes Element mehrere Selektoren zu erstellen?
Das stimmt, man könnte
initialverwenden.Das ist genau der Grund, warum ich möchte, dass
initialüberall unterstützt wird.Das ist schön!
Es ist auch erwähnenswert, dass
display: initial;anscheinend immerdisplay: inline;zurückgibt, daher könnte es hier einige Tücken geben, wenn es nicht sorgfältig verwendet wird.Leider, wie Geoff bemerkt, würde dieser nette Anwendungsfall nicht wie erhofft funktionieren.
Der
initial-Wert wird für jede Eigenschaft (z. B. fürdisplay) definiert, nicht für einen bestimmten Tag-Namen (z. B.li). Die Zuordnung von HTML-Tag-Namen zu Anzeigetypen erfolgt über ein Browser-Stylesheet, das wie ein gewöhnliches CSS-Stylesheet behandelt wird, das vor der Verarbeitung der Stile Ihrer Website ausgeführt wird. Diese Standardstile werden mitinitialzurückgesetzt, genauso wie Ihr eigener Code.Im Gegensatz dazu gibt es eine sehr kleine Anzahl von Eigenschaften, wie z. B.
font-family, für die die Spezifikationen keinen Anfangswert angeben. In diesem Fall ist der Standard des Browsers der Anfangswert. Wenn der Browser jedoch unterschiedliche Schriftfamilien für Überschriften und Absätze verwendet, ist dies wieder das Browser-Stylesheet, und eininitial-Wert setzt beide auf denselben Gesamtstandard zurück (was auch immer dieser sein mag).@Amelia: Also der eine Anwendungsfall, den ich dafür hatte, ist der Anwendungsfall, für den er nicht funktioniert? Ach ja, das ist Webentwicklung. Danke, dass ihr meine Hoffnungen und Träume enttäuscht habt :D :D :D
Es wäre großartig, wenn es *noch ein* Schlüsselwort gäbe, um auf den Browser-Standard zurückzusetzen, ähnlich wie
um Block-Level-Elemente auf
block, Inline-Elemente aufinlineusw. zurückzusetzen.Ist das wahr? Mein Verständnis war, dass es immer noch eure Stile auf den Browser-Standard zurücksetzt, nicht auf den, der im Reset-Stylesheet eingestellt wurde. Ich meine, ich würde mich freuen, wenn letzteres der Fall wäre, und wenn es so ist, sagt es mir bitte, damit ich wenigstens einen Grund habe, glücklich über CSS zu sein :)
Ich habe dasselbe gedacht, als ich anfing, mich damit zu beschäftigen, habe aber festgestellt, dass CSS-Resets tatsächlich als Wert zurückgegeben werden. Ihr könnt mit dem Beispiel-Pen experimentieren, indem ihr einen CSS-Reset hinzufügt und seht, wie sich das auf den Stil auswirkt.
http://codepen.io/team/css-tricks/pen/wazyoV
Soweit ich das beurteilen kann, verwendet initial nicht die im Reset angegebenen Werte. Es mag so aussehen, als ob es das tut, aber der Anfangswert für viele Eigenschaften ist derselbe wie das, was Reset definiert. Das bedeutet, dass es zufällig derselbe ist wie bei Reset. Hier ist ein Beispiel, bei dem initial eindeutig nicht den im Reset definierten Wert verwendet.
Paul hat Recht. Obwohl dies in vielen Fällen funktionieren würde, geschieht dies eher zufällig als absichtlich.
Der Punkt der meisten Standard-„CSS-Reset“-Techniken ist es, die Standard-HTML-Stylesheet des Browsers zu *kancelieren* und stattdessen Werte auf den CSS-Anfangswert zu setzen. In diesen Fällen könnten Sie
initialverwenden und denselben Effekt erzielen.Wenn Sie jedoch eine andere Art von CSS-Reset verwenden (auf einen Wert, der vom Anfangswert in den Spezifikationen abweicht), können Sie dies nicht mit
initialnachbilden. Wenn Sie beispielsweise einen Reset verwenden, umbox-sizingfür jedes Element und Pseudo-Element vor/nach dem Element aufborder-boxzu ändern, ist das sehr anders alsbox-sizing: initial.Die vollständige fehlende IE-Unterstützung macht es sinnlos.
Zustimmung, das macht IE sinnlos.
Das IE-Team hat/hatte die ganze Zeit geschlafen. Wenn die großen Browser etwas Neues aufgreifen, war/ist IE nicht zu sehen!
IE ist schrecklich. Kein Zweifel. Aber wenn sie es nicht unterstützen, kann man es nicht wirklich benutzen. Ich hasse es, aber so ist es nun mal.
Einige der Diagramme und Prosa in diesem Beitrag sind etwas irreführend.
initialist *nicht* gleichbedeutend mit dem Erben von:rootund es ist auch nicht immer der „Browser-Standard“.http://codepen.io/telic/pen/NqdjwV
Der Anfangswert ist unabhängig von allen Werten, die in der Kaskade gesetzt sind, *einschließlich der vom User-Agent-Stylesheet gesetzten Standards*! Ein Beweis dafür ist, dass der
initial-Wert im obigen Beispiel-Pen dazu führt, dass der innere Div als inline und nicht als block-level dargestellt wird.Ich kann das durchaus nachvollziehen, auch wenn die Diagramme ein Szenario und nicht alle Fälle veranschaulichen. Sie haben hier aber sicherlich Recht!
Das habe ich gefunden
Quelle
Sieht so aus, als ob er auf einen von den Spezifikationen definierten Wert zurückgesetzt wird, egal was der Standardwert des Elements ist. Also wird
displayfüra,div,tableund sogaroptionzuinline. Für mich ist das im Grunde nutzlos.Dieser Artikel scheint ein grundlegendes Missverständnis von „initial“ zu haben. Es ist nicht wie „inherit“ und hat nichts damit zu tun, welche Eigenschaften auf dem Root gesetzt sind, außer dass das Root nicht häufig gestylt wird.
„Initial“ ist einfach der Wert einer Eigenschaft, bevor irgendein Wert von einem Stylesheet gesetzt wird, sei es ein Browser-Stylesheet (auch „UA“-Stylesheet genannt), ein Autoren-Stylesheet (Webdesigner oder Entwickler) oder ein Benutzer-Stylesheet.
Das UA-Stylesheet kann als „Browser-Standard“ betrachtet werden und stark von Browser zu Browser variieren. Diese Variationen werden meist durch Reset-Stylesheets beseitigt, die auch viele nützliche Werte entfernen, wie z. B. Abstände bei Absätzen.
Aber alle konformen Browser beginnen mit dem Anfangswert, wie er in der Spezifikation definiert ist. Deshalb hat das UA-Stylesheet ‚div { display: block }‘, aber sie brauchen kein ‚span { display: inline }‘, da inline ohnehin bereits der „Standard“-Anfangswert für die Eigenschaft ‚display‘ ist, unabhängig davon, um welches Element es sich handelt, bis ein Stylesheet es auf etwas anderes setzt.
„Inherit“ hingegen bedeutet, dass der Wert vom übergeordneten Element in HTML übernommen wird. Einige Eigenschaften, wie z. B. ‚color‘, werden automatisch vererbt, ohne dass etwas im Stylesheet gesetzt werden muss. Deshalb müssen Sie ‚color: green‘ auf einem P-Tag nicht auch auf ein SPAN innerhalb des P setzen (es sei denn, Sie sind besorgt, dass das UA-Stylesheet eine Farbe explizit für SPANs gesetzt hat, aber das ist nie der Fall).
Wenn Sie das Schlüsselwort ‚inherit‘ als Wert verwenden, erzwingt es die Vererbung des Wertes vom Elternteil, auch wenn es sich um eine Eigenschaft handelt, die normalerweise nicht automatisch vererbt wird, wie z. B. ‚float‘. Wenn Sie also ‚float: inherit‘ auf Element A hätten und das Elternteil B dieses Elements A ‚float: left‘ hätte, würde Element A innerhalb des schwebenden Elements B ebenfalls nach links schweben.
@Brad Sie haben vollkommen Recht, bis auf eine, etwas verwirrende Sache: die Schlüsselwörter
initialundinheritsind in der Spezifikation tatsächlich ähnlich und werden tatsächlich am selben Ort definiert. Das liegt daran, dass beide die üblichen Regeln für die Bestimmung des Wertes einer Eigenschaft überschreiben. Ich glaube, diese Ähnlichkeit der Spezifikation hat zu einem Glauben an eine Ähnlichkeit der Funktion geführt.@tom Ich glaube nicht, dass es wirklich richtig ist zu sagen, dass sie „die üblichen Regeln für die Bestimmung des Wertes einer Eigenschaft überschreiben“. Die Schlüsselwörter weisen einer Eigenschaft einen Wert zu, genauso wie jeder Wert es tut. Ob die Schlüsselwörter „initial“ oder „inherit“ eine Auswirkung haben, hängt immer noch von der Selektorspezifität und der Reihenfolge ab, ob „!important“ vorhanden ist, und davon, dass Autorensheet-Stylesheets UA-Stylesheets überschreiben, genauso wie jeder andere Wert.
Was Schlüsselwortwerte von den meisten anderen unterscheidet, ist, dass der verwendete Wert vom spezifizierten Wert abweicht (an sich nicht ungewöhnlich), aber mit „initial“ wird sein verwendeter Wert aus dem Anfangswert der Eigenschaft (wie in der Spezifikation der Eigenschaft definiert) bezogen, und „inherit“ bezieht seinen verwendeten Wert von dem verwendeten Wert des HTML-Elternteils. Diese beiden Effekte unterscheiden sich sehr voneinander, aber sie verwenden Schlüsselwörter genauso wie jede Eigenschaft ein Schlüsselwort verwenden würde, wie z. B. „none“ oder „solid“. Alle Schlüsselwortwerte weisen einen sinnvollen Wert zu, der im Allgemeinen von der Eigenschaft abhängt, und das tun diese auch. Sie beginnen beide mit dem Buchstaben „i“, was es wahrscheinlich einfacher macht, sie zu verwechseln.
Die Tatsache, dass sie in derselben Spezifikation definiert sind, macht sie nicht ähnlich, genauso wenig wie „border“ und „background“ ähnlich sind, weil sie in derselben Spezifikation stehen. Auch „solid“ und „none“ sind nicht ähnlich (als Rahmenstile), nur weil sie auf dieselben Eigenschaften in derselben Spezifikation angewendet werden und in unmittelbarer Nähe zueinander definiert sind. Das Hauptmerkmal, das „initial“ und „inherit“ ähnlich macht, ist, dass sie auf jede Eigenschaft angewendet werden können.
Um wirklich zu verstehen, was diese beiden Schlüsselwörter bewirken, wenn sie einer Eigenschaft zugewiesen werden, muss man nur ihre Konzepte verstehen. Die Bedeutung existiert, unabhängig davon, ob es jemals ein Schlüsselwort gab, das als Eigenschaftenwert verwendet werden konnte. Ich denke, manche Leute sind verwirrt, weil das Schlüsselwort etwas ist, das man einstellen kann. Aber auch wenn es nicht eingestellt ist, haben alle Eigenschaften einen Anfangswert und viele, viele Eigenschaften werden sowieso vererbt. Einen Anfangswert zu haben, bevor irgendwelche CSS-Regeln angewendet werden, ist ein *sehr* anderes Konzept, als die HTML-Hierarchie zu betrachten, um zu sehen, ob das Elternelement einen Eigenschaftenwert (wie Farbe oder Schriftgröße) hat, der auch für das Kind gelten soll. Sobald man diese beiden Konzepte verstanden hat, sollte die Bedeutung der verwendbaren Schlüsselwörter sehr klar und eindeutig sein.
@Brad Sowohl
initialals auchinheritsind Schlüsselwörter, die gültige Ergebnisse der Kaskade für jede Eigenschaft sind, aber darüber hinaus werden sie speziell behandelt, wenn der spezifizierte Wert berechnet wird; aus dem Cascade Level 3 ArbeitsentwurfDas meine ich mit „ähnlich“. Was ich mit „überschreiben die üblichen Regeln“ meinte, war nur, dass normalerweise der spezifizierte Wert einer Eigenschaft derselbe ist wie sein kaskadierter Wert (wenn er einen hat); die Ausnahme ist, wenn der kaskadierter Wert
inheritoderinitialist. Wie Sie sagen, ist dies kein Überschreiben im Sinne von!important, daher war das vielleicht meine schlechte Wortwahl; ich meinte nur, dass die Verwendung dieser Schlüsselwörter, wenn sie das Ergebnis der Kaskade sind, die Art und Weise ändert, wie der Wert der Eigenschaft berechnet wird.@Tom, OK, aber wissen Sie, dass ein verwendeter Wert, der vom spezifizierten Wert abweicht, nicht ungewöhnlich ist. Zum Beispiel: ‚width‘ kann Werte wie ‚auto‘ oder einen Prozentsatz haben, aber der verwendete Wert wird eine konkrete Länge in px sein.
@Brad
Absolut, ja. Das Ungewöhnliche an
initialist, dass es den spezifizierten Wert vom kaskadierten Wert abweicht. Also würde das HTML<div style="width: initial;"></div>(vorausgesetzt, kein anderer CSS) der Eigenschaftwidthauf diesemdiveinen kaskadierten Wert von „initial“, einen spezifizierten Wert von „auto“ und einen berechneten Wert von einer konkreten Breite in px geben.Scheint, als könnte es mehr Seile sein, an denen wir uns aufhängen können.
Das gesagt, ich nehme es. Perfekt für diese Zeiten, wenn nur der Standard-Times New Roman des Browsers gut genug ist!
Das wusste ich nicht, ich habe immer nur ‚inherit‘ benutzt, also ist es gut zu wissen, was ‚initial‘ genau macht.
Ich zögere, es zu sagen, weil ich glaube, dass Sie mehr über CSS wissen, als ich jemals wissen werde, aber ich glaube, Sie haben den Punkt von
initialverpasst. Der Anfangswert existiert, weil es einen Standard für alle möglichen Werte geben muss. Die CSS-Spezifikation kann nicht davon ausgehen, dass es User-Agent-Stylesheets gibt, daher muss sie einen Standardwert für alle möglichen Eigenschaften definieren. Diese sind meist das, was man erwartet, aber es gibt einige Eigenheiten. Da dies Standardwerte sind und sich nicht auf irgendeine Art von Selektor beziehen, sind sie für alle Elemente zu allen Zeiten gleich. Zum Beispiel ist, wie in einem Kommentar oben erwähnt, der Anfangswert fürdisplayinline, was fürspan-Elemente sinnvoll ist, aber nicht so sehr fürdivoderp. (Eine Liste der Anfangswerte finden Sie in Abschnitt 4.1 der Spezifikation).Ihre Google-Übersetzung der Spezifikation ist also nicht ganz richtig. Eine bessere Beschreibung wäre
(Beachten Sie, dass es zusätzliche Komplikationen gibt: Sie werden in der Tabelle sehen, dass einige der Anfangswerte als benutzeragentenspezifisch aufgeführt sind; dies ist jedoch getrennt von allen benutzeragentenspezifischen Stylesheets und wird am besten als fest codierter Standard des Browsers betrachtet. Außerdem habe ich den Unterschied zwischen dem spezifizierten Wert und dem berechneten Wert überflogen, was wichtig ist, weil das Schlüsselwort
initialtatsächlich den spezifizierten Wert setzt.)Warum sollte man also
initialverwenden? Ich kann mir ehrlich gesagt keinen wirklichen Grund dafür vorstellen, außer aus Neugier. Es kann sicherlich nicht als harter Reset verwendet werden; aus Sicht des CSS-Parsers gibt es keinen Unterschied zwischenp { display: initial; }undp { display: inline; }, also warum sollte man die weniger lesbare Version verwenden?Eine wirklich praktische Lösung ist die Verwendung von initial, um die Schriftgröße wiederherzustellen, nachdem der Trick mit der Schriftgröße Null angewendet wurde, um den Leerraum zwischen Inline-Block-Elementen zu beseitigen.
Wenn die Schriftgröße des HTML-Root-Elements unverändert bleibt, ist das Endergebnis ungefähr immer dasselbe: übersprungene Vererbung. In diesem speziellen Kontext bietet initial zumindest eine etwas bessere Erklärung dafür, was passiert.
Natürlich ist dies heutzutage ein eher Nischenfall: Es erfordert eine auf Vorlagen basierende JS-DOM-Nutzung oder manuell geschriebenes HTML. Moderne Tools für die DOM-Verwaltung wie React oder Mithril sind per Design leerzeichenfrei.
Sehr schöne Zusammenfassung! Ich denke, Sie liegen hier richtig und der Anwendungsfall ist bestenfalls für mich auch verschwommen. Das Lustige ist, dass die Spezifikation zwar keine User-Agent-Stylesheets annehmen kann, aber Tatsache ist, dass sie überwiegend verwendet werden. Das würde bedeuten, dass eine bessere (inklusivere) Definition lauten könnte
Ich habe mir auch den Kopf zerbrochen, wofür es einen guten Anwendungsfall gibt. Vielleicht liegt es daran, dass ich
initialgerade erst kennenlerne und bisher ohne ausgekommen bin. :)Eine gute Gelegenheit,
initialzu verwenden, ist die Entwicklung eines Widgets oder einer Webkomponente, die in verschiedenen Umgebungen eingesetzt werden soll. Das Erstellen von#my-widget * { whatever: initial; }ist viel einfacher, als ein Widget-spezifisches Reset-Stylesheet zu erstellen.Meinen Sie mit "verschiedene Umgebungen" auch, dass IE (Desktop oder mobil) ausgeschlossen wird? Was ist der Nutzen dann?
Ich versuche (;) nur Eigenschaften zu verwenden, die entweder überall unterstützt werden ODER keine katastrophalen Auswirkungen haben, wenn sie nicht verwendet werden. Aber die Verwendung von initial kann ein Layout potenziell komplett durcheinander bringen, daher ist es IMHO eigentlich nicht sicher zu verwenden.
Der Ausschluss von IE ist ein ziemlich guter Anwendungsfall, auch wenn er nicht von den Spezifikationsautoren beabsichtigt war. Zum Beispiel wird 'display:none; display:initial' in IE etwas ausblenden, während es für alle anderen Browser als 'inline' angezeigt wird.
Diese Liste ist wirklich fantastisch. Das ist mein erster Besuch auf Ihrem Blog und ich war wirklich sehr beeindruckt von Ihrem Artikel. Sie können auch meinen offiziellen Blog sehen… Vielen Dank.
http://www.1bag.co/
Etwas, das ich in diesen Artikeln vermisse, ist eine Warnung, dass man diese Eigenschaften vielleicht nicht verwenden sollte, da sie in Browsern, die sie nicht unterstützen, sehr schädlich sein können. In vielen Fällen, wie auch hier, ist das zwar IE, aber es gibt auch andere Fälle wie 'display: table' in Firefox (Positionierungsproblem) oder 'transform'-Eigenheiten in Chrome oder 'background-size'-Werte in (<9?) Safari.
In Kombination mit selektiven Tests nur auf einigen Browsern auf meist einer Plattform kann dies dazu führen, dass Websites einfach nicht überall funktionieren, und darum geht es doch im Web, oder?
Ich habe tatsächlich ein Beispiel gesehen, bei dem ein weniger erfahrener Entwickler 'initial' für "Position" verwendete, was das Layout in IE komplett durcheinander brachte, wo es stattdessen einfach gewesen wäre, etwas wie 'Position: static' zu verwenden, um es (fast ;) in jedem Browser zum Laufen zu bringen.
Entschuldigung, aber ehrlich gesagt, ich mache Websites wie CodePen bis zu einem gewissen Grad dafür verantwortlich, da sie dazu neigen, über neue und zugegebenermaßen aufregende neue Dinge zu schreiben, aber es versäumen, richtig vor Problemen in älteren oder weniger fähigen Browsern zu warnen (was NICHT immer IE ist, BTW).
Ich hatte kürzlich Schwierigkeiten mit diesem Problem, da ich glaube, dass
initialwie Sie vorgeschlagen haben, den Wert auf den Standardwert des Browsers für dieses *Element* zurückgesetzt hat.Aber es setzt die Eigenschaft zurück, nicht das Element.
Der initiale Wert für 'display' ist
inline, wie hier definiert. https://developer.mozilla.org/en-US/docs/Web/CSS/displaySiehe das Beispiel xGrzYx von Jack McNicol (@jackmcpickle) auf CodePen.
Nur um klarzustellen: "inherit" setzt den Wert auch nicht auf den Elementstandard zurück. Es setzt ihn auf den Wert des übergeordneten Elements für diese Eigenschaft.
@Brad Kemper: 'display: initial' zu verwenden, um etwas z.B. aus IE (aber ich schätze auch älteren Browsern wie Androids, Opera Minis?) zu verstecken, klingt nach einem furchtbaren Hack. Keine Fallbacks überhaupt, nehme ich an? :-(
Klingt für mich nicht nach einer guten Idee. Wenn Sie das tun, was testen Sie wirklich? "Inhalte nur für Browser anzeigen, die das Schlüsselwort
initialverstehen?" Es gibt viel bessere Wege, um Fähigkeiten zu testen oder User-Agenten zu schnüffeln.