首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带“RGB”前缀的SASS HEX到rgb

不带“RGB”前缀的SASS HEX到rgb
EN

Stack Overflow用户
提问于 2015-10-04 08:57:46
回答 2查看 4.4K关注 0票数 3

问题:

是否有SASS函数/技术将HEX值转换为简单的RGB字符串。

这里很简单,意思是只有一个字符串而不包含在rgb()中?

例如:#D50000 --> "213,0,0"

为什么我需要这个:

我使用材料设计作为我的UI‘框架’。更具体地说,我使用的是SASS版本,这样我就可以根据我的应用程序的样式指南来调整颜色变量。

出于某种原因,MDL的_variables.scss中的颜色变量对颜色定义采用这种格式:

代码语言:javascript
复制
$color-primary: "0,0,0" !default; // supposed to be black

这真的真的很奇怪。我充其量是预料到

代码语言:javascript
复制
$color-primary: rgba(0,0,0,1) !default;

我的颜色变量存储在另一个名为_globals.scss的文件中,在该文件中,我以普通HEX格式存储变量,以便在其他地方很容易地重用它们:

代码语言:javascript
复制
$brand-primary: #FA3166;
$brand-primary-dark: #E02C59;

我不想定义2倍我的颜色(1 HEX和1 MDL兼容的RGB字符串),因此我需要将HEX转换为RGB-字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-04 10:19:11

我用SASS函数黑了它:

代码语言:javascript
复制
@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);

}

用法:

代码语言:javascript
复制
$brand-primary: #333;
$color-primary: hexToString($brand-primary);

我认为MDL团队打算有一种不同的方式来定制调色板,而我却错过了它,所以如果有人知道更好的方法来定制MDL的调色板,我愿意接受建议。不管怎样,这解决了原来的问题。

票数 1
EN

Stack Overflow用户

发布于 2016-10-06 21:52:38

@nicholas的答案非常好,但是这里有一个使用Sass插值的更简洁的函数。

代码语言:javascript
复制
@function hexToRGBString($hexColor) {
  @return "#{red($hexColor)},#{green($hexColor)},#{blue($hexColor)}";
}

您可以传入十六进制,也可以从rgb()或rgba()传入十六进制,其不透明度为1。

例如:

代码语言:javascript
复制
$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"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32931749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档