你使用什么命名方案来命名颜色变量?
你是否成功编写了能够以与颜色表示无关的方式使用颜色变量的 CSS?
我尝试过以下所有方法,但我还没有成功编写出适用于任何配色方案的 CSS。☹️— Lea Verou (@LeaVerou) 2018年10月14日
我记得我第一次在一个项目中尝试 Sass 的时候。我首先想要做的事情就是将我的颜色变量化。根据我在 HTML 中命名事物的技巧,我知道要避免像 .header-blue-left-bottom
这样的类,因为该元素的颜色和位置可能会发生变化。最好让它反映它是什么而不是它是什么样子。
所以,我试图让我的颜色在某种意义上具有语义——它们代表什么,而不是它们实际上是什么。
$mainBrandColor: #F060D6;
$secondaryFocus: #4C9FEB;
$fadedHighlight: #F1F3F4;
但我发现我完全记不住它们,并且不得不不断参考我在哪里定义它们才能使用它们。后来,在“随它去吧”的时刻,我给颜色起了更像…这样的名字。
$orange: #F060D6;
$red: #BB532E;
$blue: #4C9FEB;
$gray-1: #eee;
$gray-2: #ccc;
$gray-3: #555;
我发现这在没有或几乎没有负面影响的情况下更直观。毕竟,这不是跨越 HTML-CSS 边界;这完全在 CSS 内部,并且仅面向开发者,这使得问题的范围更加狭窄。
以类似的方式,我尝试过将颜色保存在 Sass 映射中,例如
$colors: (
light: #ccc,
dark: #333
);
但那里的唯一模糊目标是清理全局命名空间,这可能不值得每次都需要 map-get
的麻烦。如果你需要做任何事情,$-c-orange
这样的命名空间可能是一种更容易的方法。
如今,我在 Sass 中基本上坚持使用这种仅使用颜色名称的方法。随着向 CSS 自定义属性的转变,我认为拥有 --c-orange
和 --c-gray-5
同样合适。
:root {
-c-orange: #F060D6;
-c-red: #BB532E;
-c-blue: #4C9FEB;
-c-gray-1: #eee;
-c-gray-2: #ccc;
-c-gray-3: #555;
}
你可以通过保持抽象来更具体地命名这些名称,就像 Marcus Ortense 所说
$color-primary:
$color-primary-dark:
$color-primary-light:
$primary:
$primaryLight:
$primaryDark:
$secondary:
$secondaryLight:
$secondaryDark:
$neutralDarker:
$neutralDark:
$neutral:
$neutralLight:
$neutralLighter:
$neutralLightest:
Silvestar Bistrović 最近写了一篇关于 使用抽象希腊数字命名法 的文章。
$color-alpha: #12e09f;
$color-beta: #e01258;
$color-gamma: #f5f5f5;
$color-psi: #1f1f1f;
$color-omega: #fff;
我之前在媒体查询断点中使用过这种东西,因为数字在那里似乎很有意义(例如,低数字表示较小的屏幕,大数字表示较大的屏幕)。我也可以看到这对于同一颜色的色调或阴影来说是很好的,但为什么不使用常规数字呢?
我经常看到的另一种方法是将命名颜色与抽象名称结合起来。 Geoff 这样做,并且 John Carroll 在这里列出了。
$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;
这可以根据你的需要变得尽可能冗长,甚至可以 在从调色板中调用时添加变体。
$table-row-background: lighten($color-background, 10%);
Stuart Robson 甚至在名称中加入了一些 BEM 风格,包括命名空间。
$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 使用类似于 font-weight
的值!这意味着你最终会得到一些东西,比如基本范围加上备选方案。
$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:

你如何选择颜色的名称?你可能会对如何称呼阳光黄与向日葵黄感兴趣,或者你可能只是需要一些帮助。这里有一个 项目 可以做到这一点,这里还有另一个。
查看 Maneesh 在 CodePen 上创作的 Pen 颜色命名器 (@maneeshc)。
甚至还有一个 Sublime Text 插件 用于转换它们(转换为任何你想要的语法)。

既然我们正在谈论命名
我个人使用 Chir.ag 的“命名颜色”工具。我使用它已经很多年了,并且非常喜欢它。 http://chir.ag/projects/name-that-color/。我首先使用该工具为我使用的所有颜色命名,例如“$color-cornflower-blue: #6195ED;”然后我创建像 $nav-bg-color: $color-cornflower-blue 这样的变量。这样,如果我需要更新颜色,我只需在一个位置、一个变量文件中更新它。
哈哈!我昨天刚给一个颜色变量命名为
$cornflower
。 :)我通常坚持使用主题(通常是水果),但我真的很喜欢在后面附加实际颜色的想法——我之前没有考虑过这一点。
我也这样做,但借助于一个应用程序。Sipapp.io 默认情况下使用了许多这些颜色名称,因此我创建了一些自定义格式化程序,以便我可以只需 cmd+click 颜色面板并将它添加到我的代码中。在阅读了 David Walsh 的文章后,我放弃了命名颜色: https://davidwalsh.name/sass-color-variables-dont-suck
差不多就是这样。你可以获得最好的灵活性。
哎呀,在添加我自己的评论后才看到你的评论。我也使用这个网站(已经使用了大约 4 年了)。
我也使用这种技术。对我来说,它更容易导航,当需要稍微更改颜色时,我更改值。当需要彻底更改颜色时,我在属性中切换变量。
我以这种方式使用变量。我尽量避免使用颜色名称或位置。因此,一切都易于更改。
为了避免“看起来很像的颜色”,我多年来一直很高兴地使用 http://www.color-blindness.com/color-name-hue/。在实现这些颜色名称变量时,我使用了与 Emma 相同的策略。
我同时使用颜色名称作为变量和 UI 颜色配置变量。我的意思是
我喜欢这样,因为我可以在项目之间提取部分内容,同时更改品牌颜色。这样,我只需要在一个地方配置颜色,而不必在整个地方跟踪编译器错误。我还为变量添加前缀,以便我可以在 Visual Code 中使用自动完成功能快速查找它们。
我喜欢将我的变量文件视为具有颜色和大小的
public
和private
属性的“类”。对于颜色,我通常只会使用与品牌/主题相关的颜色、灰度调色板和状态颜色(如成功、警告、危险、信息)。在这种情况下,我仅在我的变量文件中使用的“私有”颜色将是一对一地对应命名颜色和十六进制代码,例如
或者可能还有进一步的变体,例如
然后我使用这些命名颜色来定义我的“公共”变量,例如
这样,如果需要(或在较小程度上重新着色元素类型),我可以重新设计我的整个应用程序,而不必担心颜色名称与其十六进制代码不匹配,或者必须在许多文件中将所有
$shamrock
实例更改为$spruce
。我谦卑地认为,CSS 颜色模块级别 4 可以使用 color-mod 函数解决这个常见问题,并消除对颜色变量的需求,至少对于深色、浅色、强调色、次要色等变体而言是如此…一些 mixin 可能仍然需要使某些内容(阴影、高光)正确显示,即在提高亮度时降低饱和度,反之亦然。
这绝对取决于我正在处理的项目。如果有既定的指南,我必须遵循它们,但如果我为自己玩耍,我会使用对我来说有描述性的名称,并且在 6 个月后仍然会记得。你可以观看我的最新视频,在其中我使用它们来为我正在创建的网站着色 https://youtu.be/qS2iNHQ1kZA
::)
在 AngularJS Material 团队工作过之后,我偏向于 Primary、Accent 和 Warn。但我也使用像“green-500”这样的材质颜色。但我不会使用相同的值。我使用 rgb 值来使用自定义不透明度。然后我使用 CSS 变量作为主题机制。
https://github.com/clshortfuse/materialdesignweb
我使用此网站为我的所有 SCSS 颜色变量命名—— http://chir.ag/projects/name-that-color/
我在 CSS 中为颜色想出变量名称时从未遇到太多麻烦,我在每个项目中都使用相同的原则。
对于品牌颜色,我使用以下命名:
$color-brand-1st
、$color-brand-2nd
等。当颜色有更浅和更深的变体时,我只需在后面添加-light
或-dark
。我尝试每个颜色最多有 5 种颜色变体。我的颜色定义看起来像这样
我通常尽量抽象化,因为假设我们有一个名为
$red: red
的变量。如果品牌标识更改为蓝色,我们将得到$red: blue
。这会让人困惑。我尝试过许多不同的命名约定方法,发现以下方法效果很好。
定义有意义的颜色名称 - 它们应该来自在线调色板,例如 - http://chir.ag/projects/name-that-color/#6195ED 或品牌指南,例如
$toyota-red: #fc0000;
。将有意义的名称映射到实际实现
这是一种简单的方法,但将实现颜色代理到我们定义的颜色意味着我们可以在不破坏或重命名实际颜色的情况下更改实现,只需确保不要直接使用有意义的颜色即可。
Neil
我个人更喜欢为颜色设置两个抽象级别
1. 我为所有颜色命名(
$eerie_black: #0d1321
、$mesty_rose: #ffeddf
、$flame: #d85922
等)。2. 我添加第二层:使用语义名称(
$color-primary-default: $flame
、$color-text-default: $eerie_black
等)。第一层的目标是为颜色提供更人性化的名称,并允许将其用作基础。
第二个是我将在所有 CSS 中使用的名称。为了帮助记住这些名称,我总是从更全局的到更具体的(第 1 级:颜色/大小等,第 2 级:主色/强调色/警告色等,第 3 级:默认/浅色等)。使用此方法,我可以使用自动完成功能帮助我记住名称并建议合适的变量。
这也有助于我切换主题或更改应用程序/网站的颜色。
我经常尝试使名称具有语义。例如,当我定义“accent”(强调色)时,我不希望知道它是黄色、绿色还是蓝色。我只想知道这是用于强调色的颜色。同样适用于“leading text”(引导文本)等。有时我确实会打破这条规则,并使用颜色名称来命名这些变量。但这往往会在这样做后立即让我感到困扰,尤其是在项目刚刚开始时。
我们正在使用 Sketch 插件 Prism 生成颜色名称。https://github.com/ment-mx/Prism
该插件生成颜色的名称。
另一个好处是在 Sketch 和 CSS 中使用相同的颜色命名。
我多年来一直这样做(首先使用 LESS,现在使用 SASS)
然后在组件级别(例如按钮)使用基础颜色。
我喜欢这个!
我总是使用简单的
$red
、$blue
、$dark-green
等,并将所有全局变量(通常还包括@media
断点以及常用的间距单位)放在同一个位置,如果只有一个样式表,则放在文件顶部,或者放在一个专门的变量文件中。我看到了其他命名约定的好处,但对于我的通用组织系统,这种方法效果很好。如果我需要使用品牌颜色,而不是仅仅将$primary-color
或–primaryColor
设置为十六进制值,我将像以前一样定义颜色,然后将这些 SCSS 变量分配给 CSS 变量属性。这样,我就可以为整个部分、页面或站点设置–primaryColor
,但仍然与之关联明确命名的值,并且可以轻松直观地更改–primaryColor
。我开始使用这种方式,但有时会变得太长了 =(
: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;
}
叫我老派也行,但我喜欢用颜色的名称来命名颜色。蓝色就是蓝色,红色就是红色,灰色就是浅灰色……或者中灰色。
这是我当前的项目,正在开发中的内容。所以,有一些错误
$grey-l20
应该为hsl(0, 2%, 20%)
,当然了以及
$color-secondary: $grey-l16
。我现在正在探索的是多种命名方案的混合。有时你想要特定的颜色(例如,警告的暖色),有时你只需要任何强调色。为了具有语义性,你应该能够引用两者。因此,我定义了诸如
–color-green
、–color-red
等变量,然后为它们设置别名,例如–color-accent: var(–color-red);
等。时间会证明这将如何发展,但到目前为止,它似乎比选择单个命名方案更好。
我对颜色的困扰:
我实际上并没有在我的实际 CSS 中直接引用任何颜色。我创建了与我的 ITCSS 架构平行的映射,其中后续映射尽可能仅引用前面的映射,在开始处的主题文件中,然后使用辅助函数返回任何标记(不必是颜色;我有一个包含间距、字体大小等的姐妹配置文件),将映射和字符串列表(它是映射中到值的路径)传递给它。这带来的巨大好处是允许使用默认值和对未定义值的优雅失败以及自文档级联。
关于默认值:如果某个值未定义,但路径的其余部分有效,它将查找“default”键,即使是在路径的中间。因此,我将通过该组件的映射引用组件颜色,但它将引用填充映射或类型映射等,最终将引用通用颜色映射,其中每个值的命名方式与其文字颜色相同。
所以
token($btn, fill)
会解析为#00f
,假设有以下映射并且设置主题所需的全部操作是在某个前面的自定义主题文件中声明一个重复的结构(或需要的任何部分),并在基本主题文件中执行以下操作
我使用 Chirag Mehta 的
name-that-color
,它绝对棒极了。我多年来一直苦于为颜色变量命名 - 自从我发现了命名+抽象颜色后,我就再也没有回头。我通常使用我经常听的专辑的歌曲标题,我发现这让我更有参与感
我觉得我经历了与你在文章开头描述的颜色变量命名相同的历程。最近有一件事帮助了我,那就是 Visual Studio Code 的 IntelliSense A)在将鼠标悬停在 Sass 变量上时告诉我它的值,以及 B)当我开始键入它们时建议变量名称。抱歉,不确定它是否是开箱即用的功能,还是我安装的 Sass 插件。感谢这篇文章!
你好!
感谢分享!
几年前,我设计了一个企业级颜色框架,用于我们所有的应用程序。这个想法非常简单,颜色名称不应指的是特定的颜色或 UI 元素。所以我将颜色分解成几种有意义的类型
– 填充
– 描边
– 线条
– 文本
– 备用颜色
然后我将每种类型分解成类别
– 基本:大多数 UI 元素使用这些颜色
– 对比:所有高对比度元素的深色
– 强调:CTA 元素的颜色
– 文本:支持排版使用的颜色
– 通用:通用颜色
最后,我为每个类别引入了渐变
– 强烈
– 中等
– 基础
– 浅色
– 柔和
所以最终我为整个调色板创建了一种分层命名空间。
我们支持浅色和深色颜色主题,颜色框架运行良好。每个调色板都定义在 XML 文件中,并在项目构建期间转换为相应的 *.scss 文件。
这种方法在大型项目中证明了其灵活性和节省时间的能力。顺便说一句,Microsoft 为他们的 UWP 应用程序引入了非常类似的东西 - https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/xaml-theme-resources#the-xaml-color-ramp-and-theme-dependent-brushes
鉴于命名事物很困难,我为此创建了一个 npm 库
https://github.com/reneroth/colornamify
以及一个 VS Code 扩展
https://marketplace.visualstudio.com/items?itemName=reneroth.colornamify-code
也许这对其他人有所帮助 :)