定义渐变色的颜色主题:我应该使用十六进制还是RGBA?

时间:2019-04-24 18:14:52

标签: css user-interface colors

我对CSS比较陌生。我试图弄清楚为什么我的UX团队有时用十六进制代码定义颜色,有时使用RGBA。

上下文:我们构建技术含量高的管理Web应用程序。我们所有的网络应用都具有白色背景,并且不会倾向于对元素进行分层(例如,不将图片作为背景进行营销)。一些设计师认为RGBA有助于控制色彩对比度。有些设计师只喜欢使用RGBA而不是十六进制。一些设计师使用十六进制。没有人给我明确的选择理由。我想了解每种技术的利弊,在哪种情况下一种方法比另一种更好,因为我正在为我们的核心框架构建颜色主题解决方案。我们希望每种原色和第二色都有渐变比例。当前没有透明度要求,但我想有一天可以做到。

我遇到了相关的UX SE帖子https://ux.stackexchange.com/questions/105503/why-isnt-primary-text-full-opacity的答案涉及RGBA有助于强制使用标准颜色。也就是说,如果您以RGB颜色开始并使用alpha值来调整明暗,则可以确保一致的颜色渐变比例。 (注意:该帖子的图片质量很好,使用十六进制显示了色阶,然后在其旁边显示了等效的alpha值:https://i.stack.imgur.com/MWust.png

但是,当您的HTML元素重叠而又不想让它们看起来部分透明但又想使用适当的颜色时,会发生什么呢?您是否使用具有alpha 1或十六进制代码的等效RGB?

关于对比度理论,这是一位UX设计人员告诉我的:RGBA颜色始终保持与放置在任何位置上相同的对比度。如果将#AAA正文文本放在#FFF背景上,而不是将其放在#EEE背景上,则#AAA文本在#EEE背景上看起来会更亮。但是,如果将rgba(0,0,0,0.33)放在#FFF与#EEE的背景上,则文本上的对比度总是总是暗33%。真的吗?使用对比度计算器(https://contrast-ratio.com/)#FFF上的rgba(0,0,0,0.33)具有2.3的比率,而#EEE上的rgba(0,0,0,0.33)具有2.26的比率。接近,但不完全相同。 #DDD降至2.23。

材料UI调色板似乎使用了十六进制代码(请参阅https://material.io/design/color/#color-theme-creation),但是我看到其他文字有时建议Material UI有时使用RGBA。并不是说材料界面总是正确的。 :)

再次,我正在寻找十六进制值与RGBA值的优缺点,以及什么时候最好使用它。

与StackOverflow相关的帖子:

Difference between hex colour, RGB, & RGBA and when should each they be used? 解释了这两个选项的技术目的,但未解决UX的目的,特别是在颜色主题的核心框架中将哪个用于基础颜色

Use HEX or RGBA 同样,尽管帖子比较老,但也谈到了浏览器支持。我的项目要求用户使用更新的浏览器,因此我对这两种解决方案的好处都更加感兴趣。

2 个答案:

答案 0 :(得分:0)

十六进制更为传统,但是很长时间以来,无法使用它定义Alpha通道。

rgba的引入是为了让人们创建半透明的颜色。

但是,CSS规范的新增功能表示十六进制颜色在包含4个或8个字符时可以包含一个alpha通道。

所以#00000055与rgba(0,0,0,0.33)相同。 #0005相似。

因此,alpha混合曾经需要rgba,但不再需要。不管使用哪个。

答案 1 :(得分:0)

好的,我制作了一个小提琴来研究上下文中的这些想法:https://jsfiddle.net/marniea/1q9adxo6/

它显示了用RGBA表示时,用不透明RGB表示的相同颜色的行为如何不同。我使用的是RGBA和RGB(而不是HEX),因为讨论实际上是关于使用部分透明的颜色代替不透明的颜色。

使用的颜色值:

  • RGB:rgb(128, 128, 128)
  • RGBA:rgba(0, 0, 0, .54)

颜色在白色背景上看起来相同(示例1 )。

RGBA说:“ 混合54%的颜色” –在这种情况下为黑色–“ 与背景无关”。

因此对于示例2 ,RBGA值将其54%的黑色与灰色背景混合。 54%黑色+灰色比54%黑色+白色更暗。 RGB值看起来与示例1相同。因为它的颜色与背景灰色几乎相同,所以我们在示例2中看不到它。

对于示例3 ,它将54%的黑色与黑色背景混合。 54%黑色+黑色就是黑色,这就是为什么在示例3中看不到RGBA文本或框的原因。

RGB颜色是可预测的;它看起来总是一样的。 RGBA颜色不是那么可预测的。 RGBA有时适应性更好(如示例2中所示),有时则没有(如示例3中所示)。

如果我们要定义已知数量的应用程序外观,则使用RGBA定义一组颜色,并希望它们适应背景颜色会给事情带来机会(或进行大量测试,尤其是检查对比度)。我觉得最好事先知道每次的颜色是什么,无论背景颜色是什么。如果颜色本来就是不透明的,为什么不做它们呢?

到目前为止,我使用RGBA可以看到的唯一优势是可以确保精确的颜色渐变/饱和度比例。但是主要的用例是使用颜色; 定义颜色是第二个用例。

因此,在遇到相反的论点之前,我认为不透明的颜色(即RGB或十六进制)最适合用于不透明的用例。