Ich setze Website-Styling um.
Aus Gründen der Legacy-Unterstützung muss ich IE11 zumindest für eine Weile unterstützen. Aus Gründen des Arbeitsablaufs und meiner Vernunft m?chte ich wann immer m?glich CSS-Variablen verwenden.
Ich habe mir diese L?sung angesehen und sie generiert etwas, das funktioniert, aber ziemlich ausführlich zu verwenden ist.
Mein Ziel ist es, einen fest codierten Wert zu erhalten, der sofort von einer CSS-Variablen überschrieben wird. Auf diese Weise kann ich für alle ein Standardthema hinzufügen und für die Browser, die CSS-Variablen unterstützen, ein anderes Thema (z. B. den Dunkelmodus) hinzufügen. Ich muss das natürlich nicht alles selbst schreiben.
Meine Idee ist also, dass ich so etwas schreiben k?nnte:
$foo {...?} :root { --foo: red; } :root.dark { --foo: black; } p { color: $foo; }
Es wird als
übersetzt:root { --foo: red; } :root.dark { --foo: black; } p { color: red; color: var(--foo); }
Kann dies mit scss erreicht werden? Ich m?chte dieses Projekt nicht durch das Hinzufügen einiger zuf?lliger NPM-Module oder anderer Compiler und Transpiler von Drittanbietern aufbl?hen. Ich wei?, dass es m?glich ist, eine Polyfüllung für IE11 hinzuzufügen, um Unterstützung für CSS-Variablen hinzuzufügen, aber die meisten davon, die ich bisher gefunden habe, weisen eine unglückliche Einschr?nkung auf (au?erdem handelt es sich um Code von Drittanbietern, den ich bevorzuge). Vermeiden Sie, wenn m?glich). Dies ist die L?sung, die ich w?hlen k?nnte, wenn es keine gute L?sung mit SCSS gibt.
以下是您可能想要改進(jìn)的快速解決方案:
$colors: ("blue": #0000ff, "red": #ff0000, "green": #00ff00);
@each $color, $value in $colors { :root { --#{$color}: #{$value}; } }
@mixin propertyPlusColorValue($property, $color) { #{$property}: map.get($colors, $color); #{$property}: var(--#{$color}); }
.foobar { @include propertyPlusColorValue(color, "blue"); @include propertyPlusColorValue(background-color, "red") }
完整代碼:
@use "sass:map"; $colors: ("blue": #0000ff, "red": #ff0000, "green": #00ff00); @each $color, $value in $colors { :root { --#{$color}: #{$value}; } } @mixin propertyPlusColorValue($property, $color) { #{$property}: map.get($colors, $color); #{$property}: var(--#{$color}); } .foobar { @include propertyPlusColorValue(color, "blue"); @include propertyPlusColorValue(background-color, "red") }