Welches Namensschema verwenden Sie für Farbvariablen?
Haben Sie es geschafft, CSS zu schreiben, das Farbvariablen so verwendet, dass sie von den Farben, die sie darstellen, unabhängig sind?
Ich habe all das Folgende ausprobiert und es bisher nicht geschafft, CSS zu schreiben, das mit jedem Farbschema gut funktioniert. ☹️— Lea Verou (@LeaVerou) 14. Oktober 2018
Ich erinnere mich an das allererste Mal, als ich Sass für ein Projekt ausprobiert habe. Das Erste, was ich tun wollte, war, meine Farben zu variabilisieren. Von meinen Fähigkeiten im Benennen von Dingen in HTML wusste ich, dass ich Klassen wie .header-blue-left-bottom vermeiden sollte, da sich die Farbe und Position dieses Elements ändern könnten. Es ist besser für das Element, es so zu beschreiben, was es ist, als wie es aussieht.
Also habe ich versucht, meine Farben semantisch zu benennen, in einem gewissen Sinne — was sie repräsentieren, nicht was sie buchstäblich sind
$mainBrandColor: #F060D6;
$secondaryFocus: #4C9FEB;
$fadedHighlight: #F1F3F4;
Aber ich stellte fest, dass ich sie mir absolut nie gemerkt habe und ständig nachsehen musste, wo ich sie definiert hatte, um sie zu verwenden. Später, in einem „Scheiß drauf“-Moment, habe ich Farben eher so genannt…
$orange: #F060D6;
$red: #BB532E;
$blue: #4C9FEB;
$gray-1: #eee;
$gray-2: #ccc;
$gray-3: #555;
Das fand ich viel intuitiver mit wenigen, wenn überhaupt negativen Nebenwirkungen. Schließlich ist das hier keine Überschreitung der HTML-CSS-Grenze; das ist alles innerhalb von CSS und nur für Entwickler sichtbar, was dem Problem einen engeren Geltungsbereich gibt.
Auf ähnliche Weise habe ich versucht, Farben innerhalb einer Sass-Map zu halten, wie zum Beispiel
$colors: (
light: #ccc,
dark: #333
);
Aber das einzige vage Ziel war, den globalen Namespace aufzuräumen, was wahrscheinlich nicht den Aufwand wert ist, ständig map-get verwenden zu müssen. Namespacing wie $-c-orange ist wahrscheinlich ein einfacherer Ansatz, wenn überhaupt etwas getan werden muss.
Ich bin heute in Sass weitgehend bei diesem Ansatz geblieben, einfach Farbnamen zu verwenden. Da sich die Entwicklung hin zu CSS Custom Properties verschiebt, halte ich es für ähnlich angemessen, ein --c-orange und --c-gray-5 zu haben.
:root {
-c-orange: #F060D6;
-c-red: #BB532E;
-c-blue: #4C9FEB;
-c-gray-1: #eee;
-c-gray-2: #ccc;
-c-gray-3: #555;
}
Man könnte mit diesen Namen etwas spezifischer werden, während man abstrakt bleibt, wie Marcus Ortense sagt
$color-primary:
$color-primary-dark:
$color-primary-light:
Und Variationen zu jeder Basis, wie Mike Street sagt
$primary:
$primaryLight:
$primaryDark:
$secondary:
$secondaryLight:
$secondaryDark:
$neutralDarker:
$neutralDark:
$neutral:
$neutralLight:
$neutralLighter:
$neutralLightest:
Silvestar Bistrović hat kürzlich über die Verwendung abstrakter griechischer Nummerierung geschrieben
$color-alpha: #12e09f;
$color-beta: #e01258;
$color-gamma: #f5f5f5;
$color-psi: #1f1f1f;
$color-omega: #fff;
Ich habe diese Art von Dingen schon einmal für Media-Query-Breakpoints verwendet, da die Nummerierung dort Sinn zu ergeben scheint (d.h. niedrige Zahlen sind kleinere Bildschirme, große Zahlen sind größere Bildschirme). Ich könnte mir auch vorstellen, dass das für Tönungen oder Schattierungen derselben Farbe schön wäre, aber warum dann nicht normale Zahlen?
Ein weiterer Ansatz, den ich oft gesehen habe, ist die Kombination von Farbnamen mit abstrakten Namen. Geoff macht das und John Carroll listet das hier auf
$color-danube: #668DD1;
$color-cornflower: $6195ED;
$color-east-bay: $3A4D6E;
// theme1.scss
$color-alpha: $color-danube;
$color-bravo: $color-cornflower;
$color-charlie: $color-east-bay;
// theme2.scss
$color-alpha: $color-cornflower;
$color-bravo: $color-danube;
$color-charlie: $color-east-bay;
Das kann so wortreich werden, wie man es braucht, sogar mit Hinzufügen von Variationen beim Aufrufen aus der Palette.
$table-row-background: lighten($color-background, 10%);
Stuart Robson wird sogar ein bisschen BEM-mäßig mit den Namen, einschließlich des Namespaces
$ns-color__blue—dark: rgb(25,25,112);
$ns-brand__color—primary: $ns-color__blue—dark;
// component.scss
$ns-component__color—text: $ns-brand__color—primary;
Material Design verwendet Werte, die font-weight ähneln! Das bedeutet, dass Sie mit etwas wie einem Basisbereich plus Alternativen enden würden
$light-green-100:
$light-green-200:
$light-green-300:
// etc
$light-green-900:
$light-green-A200:
$light-green-A400:
$deep-purple-100:
$deep-purple-200:
$deep-purple-300:
// etc
$deep-purple-A900:

Wie können Sie Namen für Farben wählen? Möglicherweise finden Sie es amüsant zu entscheiden, wie man einen sonnigen Gelbton von einem Sonnenblumen-Gelbton nennt, oder Sie möchten einfach nur Hilfe. Hier ist ein Projekt dafür, und hier ist ein weiteres
Siehe den Stift Color Namer von Maneesh (@maneeshc) auf CodePen.
Es gibt sogar ein Sublime Text-Plugin zur Konvertierung (in jede beliebige Syntax)

Und da wir gerade beim Thema Benennung sind
Ich persönlich verwende das Name that Color-Dienstprogramm von Chir.ag. Ich benutze es seit Jahren und ich LIEBE es. http://chir.ag/projects/name-that-color/. Zuerst gebe ich allen Farben, die ich verwende, einen Namen mit diesem Tool, zum Beispiel „$color-cornflower-blue: #6195ED;“ und dann erstelle ich Variablen wie $nav-bg-color: $color-cornflower-blue. Auf diese Weise muss ich, wenn ich jemals eine Farbe aktualisieren muss, dies an einer einzigen Stelle, in einer einzigen Variablen-Datei tun.
Ha! Ich habe gestern erst eine Farbvariable
$cornflowergenannt. :)Ich habe mich im Allgemeinen an Themen gehalten (typischerweise Früchte), aber die Idee, die tatsächliche Farbe anzuhängen, gefällt mir wirklich — das hatte ich noch nicht in Erwägung gezogen.
Das mache ich auch, aber mit Hilfe einer App. Sipapp.io verwendet standardmäßig viele dieser Farbnamen, daher habe ich einige benutzerdefinierte Formatierer erstellt, damit ich die Farbpalette einfach mit cmd+klicke und sie meinem Code hinzufügen lassen kann. Habe das Benennen von Farben aufgegeben, nachdem ich David Walshs Beitrag gelesen hatte: https://davidwalsh.name/sass-color-variables-dont-suck
Im Grunde genommen das. Beste Flexibilität, die man bekommen kann.
Ups, ich habe gerade Ihren Kommentar gesehen, nachdem ich meinen eigenen hinzugefügt habe. Ich benutze auch diese Website (habe das die letzten 4 Jahre oder so gemacht).
Ich verwende diese Technik auch. Sie ist für mich einfacher zu navigieren, und wenn ich eine Farbe leicht ändern muss, ändere ich die Werte. Wenn ich die Farbe radikal ändern muss, wechsle ich die Variable in den Attributen.
Ich verwende Variablen auf diese Weise. Ich versuche, niemals Farbnamen oder Positionen zu verwenden. So kann sich alles leicht ändern.
Um „ähnlich aussehende Farben“ zu vermeiden, verwende ich seit vielen Jahren mit großer Freude http://www.color-blindness.com/color-name-hue/. Bei der Implementierung dieser Farbnamen-Variablen verwende ich die gleiche Taktik wie Emma.
Ich verwende sowohl Farbnamen als Variablen als auch UI-Farbkonfigurationsvariablen. Hier ist, was ich meine
Das gefällt mir, weil ich Partialien von Projekt zu Projekt übernehme und die Markenfarben ändere. Auf diese Weise muss ich Farben nur an einer Stelle konfigurieren, anstatt meinen Compilerfehlern überall nachzujagen. Ich verwende auch Präfixe für Variablen, damit ich meine Autovervollständigungs-Tools in Visual Code nutzen kann, um sie schnell zu finden.
Ich stelle mir meine Variablen-Datei fast wie eine „Klasse“ mit
publicundprivateEigenschaften für Farben und Größen vor.Für Farben verwende ich in der Regel nur marken- oder themenbezogene Farben, eine Palette von Grautönen und Statusfarben (wie Erfolg, Warnung, Gefahr, Info). In diesem Fall wären meine „privaten“ Farben, die ich nur innerhalb meiner Variablen-Datei verwende, eine Eins-zu-Eins-Entsprechung für einen Farbnamen und einen Hex-Code, wie
oder möglicherweise weitere Varianten wie
Dann verwende ich diese Farbnamen, um meine „öffentlichen“ Variablen zu definieren, wie
Auf diese Weise könnte ich meine gesamte App neu thematisieren, wenn nötig (oder in geringerem Maße, ein Elementtyp neu einfärben) und müsste mich weder darum kümmern, dass ein Farbname nicht mit seinem Hex-Code übereinstimmt, noch müsste ich alle Instanzen von
$shamrockin$sprucein vielen Dateien ändern.Ich glaube demütig, dass CSS Color Module Level 4 dieses häufige Problem mit der
color-modFunktion lösen und die Notwendigkeit von Farbvariablen, zumindest für Variationen wie dunkel, hell, Akzent, sekundär usw. beseitigen könnte. Einige Mixins könnten immer noch erforderlich sein, um Dinge (Schatten, Lichter) richtig zu machen, d.h. die Sättigung zu senken, wenn die Helligkeit steigt, und umgekehrt.Das hängt definitiv vom Projekt ab, an dem ich arbeite. Wenn es feste Richtlinien gibt, muss ich mich daran halten, aber wenn ich für mich selbst herumspiele, verwende ich Namen, die für mich beschreibend sind und die ich in 6 Monaten noch weiß. Sie können sich mein neuestes Video ansehen, in dem ich sie verwende, um der von mir erstellten Website Farbe zu geben https://youtu.be/qS2iNHQ1kZA
::)
Nachdem ich im AngularJS Material-Team gearbeitet habe, bevorzuge ich Primary, Accent und Warn. Aber ich verwende auch die Materialfarben wie „green-500“. Aber ich verwende nicht dieselben Werte. Ich verwende die RGB-Werte für benutzerdefinierte Opazität. Und dann verwende ich CSS-Variablen als Theming-Mechanismus
https://github.com/clshortfuse/materialdesignweb
Ich verwende diese Website, um alle meine SCSS-Farbvariablen zu benennen — http://chir.ag/projects/name-that-color/
Ich habe nie viel Mühe, Variablennamen für Farben in meinem CSS zu finden, ich verwende das gleiche Prinzip in jedem Projekt.
Für Markenfarben verwende ich die folgenden:
$color-brand-1st,$color-brand-2ndusw. Wenn es hellere und dunklere Varianten einer Farbe gibt, füge ich einfach-lightoder-darkhinzu. Dahinter. Ich versuche, maximal 5 Farbvarianten pro Farbe zu haben.Meine Farbdefinitionen würden ungefähr so aussehen
Ich bemühe mich im Allgemeinen, so abstrakt wie möglich zu sein, denn sagen wir, wir haben eine Variable namens $red: red. Wenn sich die Markenidentität dann zu Blau ändert, hätten wir $red: blue. Das ist verwirrend.
Ich habe viele verschiedene Ansätze für Namenskonventionen ausprobiert und festgestellt, dass der folgende gut funktioniert.
Definieren Sie aussagekräftige Farbnamen – sie sollten entweder aus einer Online-Farbpalette stammen, z. B. – http://chir.ag/projects/name-that-color/#6195ED oder aus Markenrichtlinien, z. B. $toyota-red: #fc0000;
Ordnen Sie aussagekräftige Namen tatsächlichen Implementierungen zu
Es ist ein einfacher Ansatz, aber das Proxieren von Implementierungsfarben an unsere definierten Farben bedeutet, dass wir die Implementierung ändern können, ohne die eigentlichen Farben zu brechen oder umzubenennen, stellen Sie einfach sicher, dass Sie die aussagekräftigen Farben nicht direkt verwenden.
Neil
Ich bevorzuge persönlich, zwei Abstraktionsebenen für Farben zu haben
1. Ich benenne alle meine Farben ($eerie_black: #0d1321, $mesty_rose: #ffeddf, $flame: #d85922, etc.)
2. Ich füge die zweite Ebene hinzu: mit semantischen Namen: $color-primary-default: $flame, $color-text-default: $eerie_black, etc.)
Das Ziel der ersten Ebene ist es, Farben einen menschenfreundlicheren Namen zu geben und sie als Basis zu verwenden.
Die zweite ist die, die ich überall in meinem CSS verwenden werde. Um sich die Namen zu merken, gehe ich immer vom Globaleren zum Spezifischeren (Ebene 1: Farbe/Größe/etc., Ebene 2: primär/Akzent/Warnung/etc., Ebene 3: Standard/heller/etc.) mit dieser Methode kann ich mir die Autovervollständigung helfen lassen, mich an die Namen zu erinnern und die richtige Variable vorzuschlagen.
Dies hilft mir auch beim Theme-Swapping oder Farbänderungen über die App/Website hinweg
Ich versuche sehr oft, die Namen semantisch zu halten. Wenn ich zum Beispiel „Akzent“ definiere, möchte ich nicht wissen, ob es gelb, grün oder blau ist. Ich möchte nur wissen, dass dies die Farbe ist, die für Akzente verwendet wird. Dasselbe gilt für „leitenden Text“ usw. Manchmal breche ich diese Regel und benenne diese Variablen mit Farbnamen. Aber das schlägt oft direkt nach der Umsetzung auf mich zurück, besonders wenn das Projekt gerade erst beginnt.
Wir verwenden das Sketch-Plugin Prism zur Generierung von Farbnamen. https://github.com/ment-mx/Prism
Das Plugin generiert die Namen der Farben.
Ein weiterer Vorteil ist die gleiche Farbbenennung in Sketch und CSS.
Das mache ich schon seit Jahren (zuerst mit LESS und jetzt mit SASS)
Dann konsumiere ich Basisfarben auf Komponentenebene – z.B. Buttons
Ich mag diese hier!
Ich verwende immer einfache $red, $blue, $dark-green usw. und ich bewahre alle meine globalen Variablen (normalerweise auch @media-Breakpoints und oft allgemeine Abstände) an derselben Stelle auf, entweder am Anfang der Datei, wenn es nur ein Stylesheet gibt, oder in einer Variablen-spezifischen Datei. Ich sehe die Vorteile anderer Benennungskonventionen, aber mit meinem allgemeinen Organisationssystem funktioniert das gut. Wenn ich Markenfarben zu verarbeiten habe, anstatt nur $primary-color oder –primaryColor auf einen Hex-Wert zu setzen, definiere ich die Farben wie zuvor und weise diese SCSS-Variablen dann den CSS-Variablen-Eigenschaften zu. Auf diese Weise kann ich –primaryColor für einen ganzen Abschnitt oder eine ganze Seite oder Website festlegen, habe aber dennoch klar benannte Werte, die damit verbunden sind, und es erleichtert die intuitive Änderung von –primaryColor.
Ich habe angefangen, es so zu machen, aber manchmal wird es einfach zu lang =(
:root{--c-primary:#66287f;
--c-primary-dark:#270036;
--c-secundary:#00c5cd;
--c-text-primary:#ffffff;
--c-text-secundary:#656565;
--c-text-secundary-light:#cccccc;
--c-aux:#d68b00;
}
Nenn mich altmodisch, aber ich nenne meine Farben gerne nach ihren Namen. Blau als blau, rot als rot und grau als hellgrau… oder mittelgrau.
Es ist mein aktuelles Projekt, WIP-Sachen. Also gab es einige Fehler
$grey-l20 sollte natürlich hsl(0, 2%, 20%) sein
und $color-secondary: $grey-l16.
Was ich gerade erforsche, ist eine Mischung aus mehreren Namensschemata. Manchmal möchten Sie eine bestimmte Farbe (z. B. die warme Farbe für eine Warnung), manchmal möchten Sie einfach nur die Akzentfarbe. Um semantisch zu sein, sollten Sie in der Lage sein, beides zu referenzieren. Daher definiere ich Variablen wie –color-green, –color-red usw. und aliase sie dann, wie –color-accent: var(–color-red); usw.
Die Zeit wird zeigen, wie das funktioniert, aber bisher scheint es besser zu sein, als ein einzelnes Benennungsschema zu wählen.
Mein Kampf mit Farben:
Ich verweise tatsächlich auf keine Farbe direkt in meinem eigentlichen CSS. Ich erstelle Maps, die meiner ITCSS-Architektur parallel laufen, wobei aufeinanderfolgende Maps so weit wie möglich nur auf vorherige verweisen, in einer Theme-Datei am Anfang, und verwende dann eine Hilfsfunktion, um welches Token auch immer zurückzugeben (muss keine Farbe sein; ich habe eine Schwester-Konfigurationsdatei mit Abständen, Schriftgrößen usw.), wobei ich ihr die Map und eine Liste von Strings übergebe, die der Pfad durch die Map zum Wert ist. Ein großer Vorteil davon ist die Verwendung von Standardwerten und ein fehlerfreies Scheitern bei undefinierten Werten und eine selbstdokumentierende Kaskade.
Zu den Standardwerten: Wenn ein Wert nicht definiert ist, der Rest des Pfades aber gültig ist, sucht er nach einem ‚default‘-Schlüssel, auch mitten im Pfad. So würde ich eine Komponentenfarbe über die Map dieser Komponente referenzieren, aber sie würde auf die Füll-Map oder die Typ-Map usw. verweisen, die letztendlich auf eine generische Farb-Map verweisen würde, bei der jeder Wert nach der Farbe benannt ist, die er buchstäblich ist.
token($btn, fill)würde also zu#00faufgelöst, gegeben die folgenden MapsUnd alles, was nötig ist, um ein Theme einzurichten, ist die Deklaration einer Duplikatstruktur (oder so viel davon, wie nötig) in einer vorhergehenden benutzerdefinierten Theme-Datei, wo auch immer sie sich befindet, und in der Basis-Theme-Datei stattdessen dies
Ich verwende
name-that-colorvon Chirag Mehta und es ist absolut Gold wert. Ich habe jahrelang mit der Benennung von Farbvariablen gekämpft – seit ich benannte + abstrakte Farben entdeckt habe, schaue ich nicht mehr zurück.Ich verwende normalerweise die Songtitel des Albums, das ich gerade höre, da ich so engagierter bleibe
Ich habe das Gefühl, ich habe dieselbe Reise der Farbvariablenbenennung durchgemacht, wie Sie am Anfang Ihres Artikels beschrieben haben. Eine Sache, die mir in letzter Zeit geholfen hat, ist die IntelliSense von Visual Studio Code, die A) mir den Wert einer Sass-Variable anzeigt, wenn ich mit der Maus darüber fahre, und B) mir beim Tippen Variablennamen vorschlägt. Entschuldigung, ich bin mir nicht sicher, ob es sich um eine Out-of-the-Box-Funktionalität handelte oder ob es ein Sass-Plugin war, das ich installiert habe. Danke für den großartigen Artikel!
Hallo!
Vielen Dank fürs Teilen!
Vor mehreren Jahren habe ich ein Enterprise-Farbrahmenwerk entworfen, das für alle unsere Anwendungen verwendet werden sollte. Die Idee war ziemlich einfach, Farbnamen sollten sich nicht auf eine bestimmte Farbe oder ein UI-Element beziehen. Also habe ich Farben in mehrere aussagekräftige Typen unterteilt
– Füllungen
– Striche
– Linien
– Text
– Alt-Farben
Dann habe ich jeden Typ in Kategorien unterteilt
– Basic: Die meisten UI-Elemente verwenden diese Farben
– Kontrast: Dunkle Farben für alle Elemente mit hohem Kontrast
– Akzent: Farben für CTA-Elemente
– Text: Farben zur Unterstützung der Typografie
– Generisch: Generische Farben
Und schließlich habe ich für jede Kategorie Farbverläufe eingeführt
– Stark
– Mittel
– Basis
– Hell
– Subtil
So erhielt ich eine Art hierarchischen Namespace für die gesamte Palette.
Wir unterstützen helle und dunkle Farbthemen und das Farbrahmenwerk hat sich recht gut bewährt. Jede Palette ist in einer XML-Datei definiert und wird während des Projekt-Builds in die entsprechende *.scss-Datei konvertiert.
Dieser Ansatz erwies sich als sehr flexibel und zeitsparend bei großen Projekten. Übrigens hat Microsoft etwas sehr Ähnliches für ihre UWP-Apps eingeführt – https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/xaml-theme-resources#the-xaml-color-ramp-and-theme-dependent-brushes
Da ich sehe, dass das Benennen von Dingen schwierig ist, habe ich eine npm-Bibliothek dafür erstellt
https://github.com/reneroth/colornamify
Und eine VS Code-Erweiterung
https://marketplace.visualstudio.com/items?itemName=reneroth.colornamify-code
Vielleicht ist das für jemand anderen hilfreich :)