Inhaltsverzeichnis
Implementieren Sie mehr Trockencode mit Preprozessor
Mehr als ein Thema? Kein Problem!
Heim Web-Frontend CSS-Tutorial Ein trockener Ansatz für Farbthemen in CSS

Ein trockener Ansatz für Farbthemen in CSS

Mar 26, 2025 am 09:55 AM

Ein trockener Ansatz für Farbthemen in CSS

Kürzlich fragte Florens Verschelde, wie man Dark -Modus -Stile in Klassen- und Medienabfragen definiert und gleichzeitig eine wiederholte Deklaration der benutzerdefinierten CSS -Eigenschaften vermeidet. Ich habe dieses Problem auch in der Vergangenheit gestoßen, habe aber keine geeignete Lösung gefunden.

Unser Ziel ist es, die neu definierende - und damit wiederholende - schützende Eigenschaften beim Umschalten des hellen und dunklen Modus zu vermeiden. Dies ist das Ziel der programmierenden Trockenprogrammierung (nicht wiederholen Sie sich), aber das typische Muster des Schaltens von Themen ist normalerweise wie folgt:

 <code>:root { --background: #fff; --text-color: #0f1031; /* etc. */ } @media (prefers-color-scheme: dark) { :root { --background: #0f1031; --text-color: #fff; /* etc. */ } }</code>
Nach dem Login kopieren

Verstehst du was ich meine? Natürlich mag es in diesem kurzen Beispiel nicht wichtig erscheint, aber stellen Sie sich vor, Sie beschäftigen sich gleichzeitig mit Dutzenden von benutzerdefinierten Eigenschaften - es ist eine Menge Wiederholung!

Dann erinnerte ich mich an den Trick der Verwendung von --var: ; Und obwohl ich zuerst nicht daran gedacht habe, fand ich einen Weg, um es zum Laufen zu bringen: anstatt var(--light-value, var(--dark-value)) oder ähnliche verschachtelte Kombinationen zu verwenden, verwenden Sie sie nebeneinander!

Natürlich muss es jemanden geben, der dies vor mir entdeckt hat, aber ich habe noch nicht gehört, dass (oder besser gesagt, missbrauchte) CSS -benutzerdefinierte Eigenschaften verwendet wurden, um dies zu erreichen. Ohne weiteres ist dies die Idee:

 <code>--color: var(--light, orchid) var(--dark, rebeccapurple);</code>
Nach dem Login kopieren

Wenn der --light auf initial festgelegt wird, wird der Fallback -Wert (Orchidee) verwendet, was bedeutet, dass --dark auf ein Speicherzeichen festgelegt werden sollte (dies ist ein gültiger Wert), wodurch der endgültige berechnete Wert so aussieht:

 <code>--color: orchid ; /* 注意额外的空格*/</code>
Nach dem Login kopieren

Wenn --light auf den Raum gesetzt ist und --dark auf die initial eingestellt ist, erhalten wir einen berechneten Wert als:

 <code>--color: rebeccapurple; /* 同样,注意空格*/</code>
Nach dem Login kopieren

Nun, das ist in Ordnung, aber wir müssen --light und --dark -benutzerdefinierte Eigenschaften auf der Grundlage des Kontextes definieren. Benutzer können Systemeinstellungen (hell oder dunkel) festlegen oder bestimmte UI -Elemente verwenden, um das Thema der Website zu wechseln. Genau wie beim Beispiel Florens werden wir diese drei Fälle definieren und Lea's vorgeschlagene Konstanten "und" aus "für einige kleine Lesbarkeitsverbesserungen verwenden, um auf einen Blick klar zu machen:

 <code>:root { /* 感谢Lea Verou!*/ --ON: initial; --OFF: ; } /* 默认情况下,浅色主题处于启用状态*/ .theme-default, .theme-light { --light: var(--ON); --dark: var(--OFF); } /* 默认情况下,暗色主题处于禁用状态*/ .theme-dark { --light: var(--OFF); --dark: var(--ON); } /* 如果用户偏好暗色,那么他们将获得暗色主题*/ @media (prefers-color-scheme: dark) { .theme-default { --light: var(--OFF); --dark: var(--ON); } }</code>
Nach dem Login kopieren

Wir können dann alle Themenvariablen ohne Duplizierung in einer Deklaration festlegen. In diesem Beispiel wird theme-* auf html Element eingestellt, sodass wir verwenden können :root als Selektor, genau wie es viele Menschen gerne tun, aber wenn die kaskadierenden Eigenschaften benutzerdefinierter Eigenschaften sinnvoller sind, können Sie sie auch auf den body setzen.

 <code>:root { --text: var(--light, black) var(--dark, white); --bg: var(--light, orchid) var(--dark, rebeccapurple); }</code>
Nach dem Login kopieren

Um sie zu verwenden, verwenden wir var() und eingebaute Fallback, weil wir vorsichtig sein möchten:

 <code>body { color: var(--text, navy); background-color: var(--bg, lightgray); }</code>
Nach dem Login kopieren

Hoffentlich haben Sie die Vorteile hier gesehen. Anstatt eine große Anzahl von benutzerdefinierten Eigenschaften zu definieren und zu wechseln, verarbeiten wir zwei Eigenschaften und setzen alle anderen Eigenschaften nur einmal auf :root . Dies ist eine enorme Verbesserung, von wo wir angefangen haben.

Implementieren Sie mehr Trockencode mit Preprozessor

Wenn ich mir die folgende Codezeile außerhalb des Kontextes ansehen würde, wäre ich definitiv verwirrt, weil die Farbe ein einzelner Wert ist, nicht zwei!

 <code>--text: var(--light, black) var(--dark, white);</code>
Nach dem Login kopieren

Deshalb bin ich lieber ein wenig abstrakt. Wir können eine Funktion mit unserem bevorzugten Präprozessor (SASS in meinem Fall) einrichten. Wenn wir den Code mit --light und --dark -Werten behalten, müssen wir nur die tatsächliche benutzerdefinierte Attributerklärung ändern. Erstellen wir eine light-dark Funktion, die uns die CSS-Syntax zurückgibt:

 @Function hell-dark ($ hell, $ dark) {
  @Return var (-light, #{$ hell}) var (-dunkel, #{$ dark});
}
Nach dem Login kopieren

Wir werden es so verwenden:

 :Wurzel {
   --Text: #{helldark (schwarz, weiß)};
   --bg: #{hell-dark (orchid, rebeccapurple)};
   -Accent: #{hell-dark ( #6d386b, #b399cc)};
}
Nach dem Login kopieren

Sie werden feststellen, dass es einen Interpolationsabscheider #{ … } um den Funktionsaufruf gibt. Ohne diese gibt SASS den Code so aus, wie es ist (genau wie eine normale CSS -Funktion). Sie können verschiedene Implementierungen ausprobieren, aber die Syntaxkomplexität hängt von Ihren Vorlieben ab.

Wie sieht dies nach einer trockeneren Code -Basis aus?

Mehr als ein Thema? Kein Problem!

Sie können dies mit mehr als zwei Modi tun. Je mehr Themen Sie hinzufügen, desto komplexer wird es zu verwalten, aber der Schlüssel ist, dass dies möglich ist! Wir fügen eine weitere Gruppe von Ein- oder Aus -Variablen -Themen hinzu und stellen eine zusätzliche Variable in der Werteliste fest.

 <code>.theme-pride { --light: var(--OFF); --dark: var(--OFF); --pride: var(--ON); } :root { --text: var(--light, black) var(--dark, white) var(--pride, #ff8c00) ; /* 换行符是完全有效的*/ /* 其他要声明的变量… */ }</code>
Nach dem Login kopieren

Ist das eine Fähigkeit? Ja, absolut. Ist dies ein guter Anwendungsfall für potenzielle, nicht existierende CSS-Booleschen? Ok, das ist ein Traum.

Und du? Haben Sie dieses Problem anders gelöst? Bitte teilen Sie die Kommentare mit!

Das obige ist der detaillierte Inhalt vonEin trockener Ansatz für Farbthemen in CSS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen Mar 09, 2025 pm 12:53 PM

Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen

Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework Mar 07, 2025 am 11:33 AM

Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework

Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut Mar 02, 2025 am 09:03 AM

Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut

Machen Sie Ihren ersten Seltsamen -Sufle -Übergang Machen Sie Ihren ersten Seltsamen -Sufle -Übergang Mar 15, 2025 am 11:08 AM

Machen Sie Ihren ersten Seltsamen -Sufle -Übergang

Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte) Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte) Mar 04, 2025 am 10:22 AM

Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte)

Datei hochladen mit Multer in node.js und ausdrücken Datei hochladen mit Multer in node.js und ausdrücken Mar 02, 2025 am 09:15 AM

Datei hochladen mit Multer in node.js und ausdrücken

Show, Don ' Tell Show, Don ' Tell Mar 16, 2025 am 11:49 AM

Show, Don ' Tell

Arbeiten mit GraphQL Caching Arbeiten mit GraphQL Caching Mar 19, 2025 am 09:36 AM

Arbeiten mit GraphQL Caching

See all articles