SASS HEX 转 RGB 不带 'rgb' 前缀
SASS HEX to RGB without 'rgb' prefix
问题:
是否有 SASS function/technique 将 HEX 值转换为 简单 RGB 字符串。
这里的简单表示只是一个字符串,没有包含在 rgb()
?
中
例如:#D50000 --> "213,0,0"
为什么我需要这个:
我正在使用 Material Design Lite 作为我的 UI 'framework'。更具体地说,我使用的是 SASS 版本,因此我可以根据我的应用程序的样式指南调整颜色变量。
出于某种原因,MDL _variables.scss
中的颜色变量采用这种颜色定义格式:
$color-primary: "0,0,0" !default; // supposed to be black
这真的很奇怪。我预计,最多,类似于
$color-primary: rgba(0,0,0,1) !default;
我的颜色变量存储在另一个名为 _globals.scss
的文件中,我在其中以常规 HEX 格式存储我的变量,以便我可以轻松地在其他地方重用它们:
$brand-primary: #FA3166;
$brand-primary-dark: #E02C59;
我不想定义 2 倍的颜色(1 个 HEX 和 1 个 MDL 兼容的 RGB 字符串),因此我需要将 HEX 转换为 RGB 字符串。
我用 SASS 函数绕过它:
@function hexToString($hexColor) {
// 0.999999 val in alpha actually compiles to 1.0
$rgbaVal: inspect(rgba($hexColor,0.9999999));
// slice substring between 'rgba(' and '1.0)'
@return str-slice($rgbaVal, 6, str-length($rgbaVal)-6);
}
用法:
$brand-primary: #333;
$color-primary: hexToString($brand-primary);
我认为 MDL 团队打算用一种不同的方式来自定义调色板,而我错过了它,所以如果有人知道自定义 MDL 调色板的更好方法,我愿意接受建议。无论哪种方式,这都解决了原始问题。
@nicholas-kyriakides 的回答非常好,但这里有一个使用 Sass 插值的更简洁的函数。
@function hexToRGBString($hexColor) {
@return "#{red($hexColor)},#{green($hexColor)},#{blue($hexColor)}";
}
您可以显式传入十六进制,也可以从不透明度为 1 的 rgb() 或 rgba() 传入。
例如:
$color-white: hexToRGBString(#fff) => "255,255,255"
$color-white: hexToRGBString(rgb(255,255,255)) => "255,255,255"
$color-white: hexToRGBString(rgba(#fff,1)) => "255,255,255"
问题:
是否有 SASS function/technique 将 HEX 值转换为 简单 RGB 字符串。
这里的简单表示只是一个字符串,没有包含在 rgb()
?
例如:#D50000 --> "213,0,0"
为什么我需要这个:
我正在使用 Material Design Lite 作为我的 UI 'framework'。更具体地说,我使用的是 SASS 版本,因此我可以根据我的应用程序的样式指南调整颜色变量。
出于某种原因,MDL _variables.scss
中的颜色变量采用这种颜色定义格式:
$color-primary: "0,0,0" !default; // supposed to be black
这真的很奇怪。我预计,最多,类似于
$color-primary: rgba(0,0,0,1) !default;
我的颜色变量存储在另一个名为 _globals.scss
的文件中,我在其中以常规 HEX 格式存储我的变量,以便我可以轻松地在其他地方重用它们:
$brand-primary: #FA3166;
$brand-primary-dark: #E02C59;
我不想定义 2 倍的颜色(1 个 HEX 和 1 个 MDL 兼容的 RGB 字符串),因此我需要将 HEX 转换为 RGB 字符串。
我用 SASS 函数绕过它:
@function hexToString($hexColor) {
// 0.999999 val in alpha actually compiles to 1.0
$rgbaVal: inspect(rgba($hexColor,0.9999999));
// slice substring between 'rgba(' and '1.0)'
@return str-slice($rgbaVal, 6, str-length($rgbaVal)-6);
}
用法:
$brand-primary: #333;
$color-primary: hexToString($brand-primary);
我认为 MDL 团队打算用一种不同的方式来自定义调色板,而我错过了它,所以如果有人知道自定义 MDL 调色板的更好方法,我愿意接受建议。无论哪种方式,这都解决了原始问题。
@nicholas-kyriakides 的回答非常好,但这里有一个使用 Sass 插值的更简洁的函数。
@function hexToRGBString($hexColor) {
@return "#{red($hexColor)},#{green($hexColor)},#{blue($hexColor)}";
}
您可以显式传入十六进制,也可以从不透明度为 1 的 rgb() 或 rgba() 传入。
例如:
$color-white: hexToRGBString(#fff) => "255,255,255"
$color-white: hexToRGBString(rgb(255,255,255)) => "255,255,255"
$color-white: hexToRGBString(rgba(#fff,1)) => "255,255,255"