Ars*_*ram 5 javascript sass luminance material-design
我正在尝试基于 Google 的 Material Theme Builder 3在 SASS/JS 中生成调色板,它要求根据相对亮度而不是亮度/亮度函数生成色调调色板。
我可以使用 SCSS 中的以下函数获取亮度值:
@function get-luminance($color) {
$colors: (
'red': red($color),
'green': green($color),
'blue': blue($color),
);
@each $name, $value in $colors {
$adjusted: 0;
$value: $value / 255;
@if $value < 0.03928 {
$value: $value / 12.92;
} @else {
$value: ($value + 0.055) / 1.055;
$value: math.pow($value, 2.4);
}
$colors: map-merge($colors, ($name: $value));
}
@return (map-get($colors, 'red') * 0.2126) + (map-get($colors, 'green') * 0.7152) + (map-get($colors, 'blue') * 0.0722);
}
Run Code Online (Sandbox Code Playgroud)
但我正在寻找的是创建一个可以调整某种颜色的亮度的函数,例如
@function adjust-luminance($color, $luminance-value) {
// Calculations required to adjust luminance here
@return $adjusted-luminance-color;
}
$seed-color: #6750A4;
.color-tone-99 {
background: adjust-luminance($seed-color, 97.4); // Output: #FFFBFE
}
Run Code Online (Sandbox Code Playgroud)
我一直无法弄清楚上面的计算部分。我还遇到过这个Color Luminance Figma 插件,它可以在 Figma 中实现此功能,但问题是它是如何实现的。
任何帮助将不胜感激!
谢谢
事实证明,谷歌平台与生态系统颜色科学家 James O'Leary 开发了一种全新的、感知准确的颜色系统,称为 HCT,代表色调、彩度、色调。
他写了一篇很棒的文章,解释了为什么以及如何在这里创建它: 色彩与设计的科学。
Material Foundation 还在这里发布了他们的 TypeScript 代码库: Material Color Utilities GitHub Repo。
1.通过NPM安装Material Color Utilities:
npm i @material/material-color-utilities
2. 导入实用程序:
import { argbFromHex, hexFromArgb, themeFromSourceColor, TonalPalette } from '@material/material-color-utilities';
3. 获取主题JSON:
const m3ThemeColorsJSON = themeFromSourceColor(argbFromHex('#6750A4'), []);
4. 这将返回 ARGB 颜色的 JSON 映射,要将其转换为十六进制颜色,请使用 hexFromArgb() 函数。例子:
const primary = hexFromArgb(theme.schemes.light.primary);
5. 如果您想从色调调色板中获取颜色,请使用以下命令:
const primary98 = TonalPalette.fromInt(primary).tone(98);
Material Foundation 打算在未来发布 SCSS 版本,但任何人都可以在 JavaScript 中使用它来生成 SCSS 文件。