Stellen Sie sich vor, Sie haben eine Webkomponente, die viele verschiedene Inhalte anzeigen kann. Es wird wahrscheinlich irgendwo einen Slot geben, an dem andere Komponenten injiziert werden können. Die übergeordnete Komponente hat auch ihre eigenen Stile, die nicht mit den Stilen der Inhaltskomponenten zu tun haben, die sie halten kann.
Dies macht eine herausfordernde Situation: Wie können wir verhindern, dass die übergeordneten Komponentenstile nach innen gehen?
Dies ist kein neues Problem - Nicole Sullivan hat es bereits 2011 beschrieben! Das Hauptproblem besteht darin, CSS so zu schreiben, dass es den Inhalt nicht beeinflusst, und sie hat es genau als Donut Scoping .
geprägt.„Wir brauchen eine Art zu sagen, nicht nur dort, wo Umfang beginnt, sondern wo es endet. So der Bereichsdonut ”.
Auch wenn Donut Scoping in Webjahren ein altes Problem ist. Wenn Sie in Ihrer Suchmaschine der Wahl schnell nach „CSS Donut Scope“ suchen, können Sie zwei Dinge bemerken:
- Die meisten von ihnen sprechen über das noch aktuelle @Scope AT-RULE.
- Fast jedes Ergebnis ist ab 2021.
Wir erzielen ähnliche Ergebnisse, selbst wenn eine clevere Abfrage „CSS Donut -@scope“ und Jahr für Jahr nichts Neues in die Donut Scope
-Tabelle zu bringen scheint. Es scheint, als hätten Donut Scopes im Hinterkopf als weitere Kopfschmerzen des alten CSS -Global Scope bis @Scope geblieben.und (Spoiler!), Während das @Scope AT-Rule einen einfacheren Weg für Donut Scoping bringt, muss ich im Laufe der Jahre mehr Lösungen versuchten. Wir werden uns durch jeden von ihnen wagen und bei der heutigen Lösung @Scope einen letzten Stopp machen. Es ist eine schöne Übung in der CSS -Geschichte!
Nehmen Sie zum Beispiel den folgenden Spielbildschirm. Wir haben ein. Parentes Element mit einem Registerkartensatz und einem .content -Steckplatz, in dem eine Inventarkomponente injiziert wird. Wenn wir die Parentsfarbe ändern, dann macht auch die Farbe innerhalb von. Kontent.
Wie können wir dies verhindern? Ich möchte verhindern, dass der Text innerhalb von .Content die Farbe des Parents erbt.
ignorieren Sie es einfach!
Die erste Lösung ist überhaupt keine Lösung! Lassen Sie uns hier greifbarer sein, es ignoriert es nicht nur offensichtlich, sondern akzeptiert es, CSSs globalen Umfangs- und Schreibstilen in diesem Sinne zu akzeptieren. Zurück zu unserem ersten Beispiel gehen wir davon aus, dass wir nicht verhindern können, dass die Stile der Eltern nach innen in die Inhaltskomponente führen. Daher schreiben wir die Stile unserer Eltern mit weniger Spezifität, damit sie von den Inhaltsstilen überschrieben werden können.
body { color: blue; } .parent { color: orange; /* Initial background */ } .content { color: blue; /* Overrides parent's background */ }
Während dieser Ansatz für den Moment ausreicht, wird es im besten Fall, im besten Fall nach ihrer Spezifität als das Projekt zu werden, im besten Fall mühsam und im schlimmsten Fall chaotisch. Komponenten können sich unterschiedlich verhalten, je nachdem, wo sie geschleift sind, und das Ändern unseres CSS oder HTML kann andere Stile auf unerwartete Weise brechen.
Zwei CSS -Eigenschaften betreten eine Bar. Ein Barstool in einer völlig anderen Bar fällt um.
thomas fuchs
Sie können sehen, wie wir in diesem kleinen Beispiel die Stile zweimal überschreiben müssen:
flache Donuts Scopes mit: nicht ()
Unser Ziel ist es dann nur, den. Parent zu umfangreichen und alles auszulassen, was auch immer in den Slot für. Also nicht der. Auf diese Weise werden die.
Sie können einen immensen Unterschied sehen, wenn wir die Devtools für jedes Beispiel öffnen:body { color: blue; } .parent > :not(.content) { color: orange; }
So gut wie eine Verbesserung, das letzte Beispiel hat eine flache Reichweite. Wenn also ein weiterer Slot tiefer in die Tiefe versehen wäre, könnten wir ihn nicht erreichen, es sei denn, wir wissen zuvor, wo es geschleift wird.
Dies liegt daran, dass wir den direkten Nachkommensauswahlschalter (& gt;) verwenden, aber ich konnte keinen Weg finden, es ohne ihn funktionieren zu lassen. Selbst wenn Sie eine Kombination komplexer Selektoren im Inneren verwenden: nicht () scheint nützlich zu führen. Zum Beispiel erwähnte Dr. Lea Verou im Jahr 2021 Donut Scoping mit: nicht () mit dem folgenden Selektor -Cocktail:
Dieses Snippet scheint jedoch mit der. Container/. -Parent -Klasse anstelle seiner Nachkommen übereinzustimmen, und es wird angemerkt, dass es immer noch flaches Donut -Scoping wäre:
.container:not(.content *) { /* Donut Scoped styles (?) */ }bis alle modernen Browser unterstützen jetzt komplexe Selektoren in: nicht ()! ? (@Leaverou) 28. Januar 2021
Donut Scoping mit @Scope
Unser letzter Schritt für die Abschluss von Donut Scoping besteht darin, über eine DOM -Schicht hinauszugehen. Zum Glück haben wir letztes Jahr die @Scope AT-Rule geschenkt (Sie können mehr darüber in seinem Almanac-Eintrag lesen). Kurz gesagt können wir einen Unterbaum im DOM auswählen, in dem unsere Stile abgebildet werden, also kein globaler Bereich mehr!
Was besser ist, wir können Slots im von uns ausgewählten Teilbaum lassen (normalerweise als Umfangswurzel bezeichnet). In diesem Fall möchten wir das. Parentes Element stylen, ohne zu schöpfen .Content:body { color: blue; } .parent { color: orange; /* Initial background */ } .content { color: blue; /* Overrides parent's background */ }Und was besser ist, es erkennt jedes entsprechende Element im Inneren. Parent, egal wie verschachtelt es sein mag. Wir müssen uns also keine Sorgen machen, wo wir unsere Slots schreiben. Im letzten Beispiel könnten wir stattdessen den folgenden Stil schreiben, um die Textfarbe des Elements in. Parent zu ändern, ohne zu berühren.
body { color: blue; } .parent > :not(.content) { color: orange; }Obwohl es unpraktisch erscheint, alle Elemente aufzulisten, die wir ändern werden, können wir nicht so etwas wie den Universal Selektor (*) verwenden, da es den Scoping von verschachtelten Slots durcheinander bringen würde. In diesem Beispiel würde es das verschachtelte .konnitieren aus dem Zielfernrohr, nicht jedoch seinen Container. Da die Farbeigenschaft erbt, würde der verschachtelte .Content die Farben trotzdem ändern!und voilà! Beide Slots befinden sich in unseren Scoped Donut -Löchern:
flaches Scoping ist mit dieser Methode immer noch möglich. Wir müssten nur unseren Slot -Selektor neu schreiben, damit nur direkte Nachkommen von. Parent aus dem Geltungsbereich ausgelassen werden. Wir müssen jedoch den: Scope -Selektor verwenden, der sich auf die Scoping -Wurzel bezieht, oder in diesem Fall Parent:
.container:not(.content *) { /* Donut Scoped styles (?) */ }wir können den Universal Selektor in diesem Fall verwenden, da er flach ist.Schlussfolgerung
Donut Scoping, ein Möchtegern -Feature, das 2011 geprägt wurde, wurde im Jahr 2024 endlich zum Leben erweckt. Es ist immer noch verblüffend, wie es bis vor kurzem als eine weitere Folge von CSS Global Scope in unseren Köpfen zu sitzen schien, während es so viele Quickle für sich hatte. Es wäre jedoch unfair zu sagen, dass es unter den Radaren aller, seit die CSSWG (die Personen hinter dem Schreiben der Spezifikation für neue CSS-Funktionen) eindeutig die Absicht hatten, sie anzusprechen, wenn sie die Spezifikation für das @Scope at-Rule schreiben.
Was auch immer es sein mag, ich bin dankbar, dass wir in unserem CSS echte Donut -Scoping haben können. Bis zu einem gewissen Grad müssen wir noch darauf warten, dass Firefox es unterstützt. ?
Diese Browser -Support -Daten stammen aus Caniuse, was mehr Details enthält. Eine Zahl zeigt an, dass Browser die Funktion in dieser Version und nach oben unterstützt.
Das obige ist der detaillierte Inhalt vonVon CSS gelöst: Donuts Scopes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

@KeyFramesandcsStransitionSdifferinComplexity:@keyFramesAllowsfordetailedanimationsequenzen, whilecsStransitionShandleSmplestatechanges.USecsStransitionsForHovereffectSlikeButtonColorchanges sowie@keyframesforintricateanimationslikerotierungen.

Ich weiß, ich weiß: Es gibt eine Menge von Content -Management -Systemoptionen, und während ich mehrere getestet habe, war keiner wirklich derjenige, den Sie wirklich wissen? Seltsame Preismodelle, schwierige Anpassungen, einige werden sogar ein Ganzes &

Das Verknüpfen von CSS -Dateien mit HTML kann durch die Verwendung von Elementen in einem HTML erreicht werden. 1) Verwenden Sie Tags, um lokale CSS -Dateien zu verknüpfen. 2) Mehrere CSS -Dateien können durch Hinzufügen mehrerer Tags implementiert werden. 3) Externe CSS -Dateien verwenden absolute URL -Links wie z. 4) Stellen Sie die korrekte Verwendung von Dateipfaden und CSS -Dateiladeauftrag sicher und optimieren Sie die Leistung können mit CSS -Präprozessor zusammengeführt werden, um Dateien zu verschmelzen.

Die Auswahl von Flexbox oder Grid hängt von den Layoutanforderungen ab: 1) Flexbox ist für eindimensionale Layouts wie die Navigationsleiste geeignet. 2) Das Gitter eignet sich für zweidimensionale Layouts wie Zeitschriftenlayouts. Die beiden können im Projekt verwendet werden, um den Layout -Effekt zu verbessern.

Der beste Weg, um CSS -Dateien einzubeziehen, besteht darin, Tags zu verwenden, um externe CSS -Dateien in den HTML -Teil einzuführen. 1. Verwenden Sie Tags, um externe CSS -Dateien einzuführen, wie z. 2. Für kleine Anpassungen können Inline -CSS verwendet werden, sollten jedoch mit Vorsicht verwendet werden. 3. Große Projekte können CSS -Präprozessoren wie SASS oder weniger verwenden, um andere CSS -Dateien über @import zu importieren. 4. Für die Leistung sollten CSS -Dateien zusammengeführt und CDN verwendet und mit Tools wie CSSNano komprimiert werden.

Ja, youShouldlearnbothflexBoxandgrid.1) FlexBoxiSidealfore-dimensional, flexibelayoutslikenAvigationMenus.2) GridexcelStwo-dimensional, komplexDesignsuchasmagazinelayouts.3) Kombininierungs-Botenhances-Flexible-und-und -Anteilungskraft, und -forsfossivität,

Wie sieht es aus, Ihren eigenen Code neu zu gestalten? John Rhea nimmt eine alte CSS -Animation auseinander, die er geschrieben hat, und geht durch den Denkprozess der Optimierung.

CsSanimationsarenotinherenthardbutRequirePractICEANDUnDing-fordertofcsPropertiesandTimingfunktionen.1) StartwithsimpleanimationslikescalingabuttononoversKeyFrames.2) useaSingFunctionslikecubic-BezierForteffects, SuchasabouNects, SuchasabouNects,, zu


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool
