2015-10-04 3 views
1

Вопрос:SASS HEX в RGB без '' RgB префикса

Есть SASS функция/метод, который преобразует значение HEX к RGB строке простого.

Простые здесь означают только строку без ее включения в rgb()?

например: #D50000 --> "213,0,0"


Почему мне это нужно:

Я использую Material Design Lite как мой UI 'рамочным'. В частности, я использую версию SASS, поэтому я могу настроить цветовые переменные в соответствии с руководством по стилю моего приложения.

По какой-то причине цветовые переменные _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-строку.

+0

Вы должны учитывать не используя такой дерьмовая библиотека. Это ужасный анти-шаблон. Google должен стыдиться за это. – cimmanon

+0

Вы использовали его широко? Или вы судите на основе этого аспекта? Я спрашиваю, потому что я (хочу) верить, что я просто следую неправильному подходу к настройке палитры. –

+0

Я просмотрел источник.Никто в здравом уме не справится с такими цветами. То, что они делают, сродни использованию строк для обработки валюты. – cimmanon

ответ

1

Я взломал вокруг него с функцией 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, я открыт для предложений. В любом случае это решает исходный вопрос.

+0

Интересно, есть ли менее хакерский способ, чем использовать альфа-вал 0.99999. в функции 'rgba()'. У меня есть случай, когда я явно нуждаюсь в значении rgb или rgba, потому что inline svg зажимает символ unescaped '#'. –

1

@ Ответ Николаса-кириакидса прекрасно работает, но здесь представлена ​​более красная функция, использующая интерполяцию Sass.

@function hexToRGBString($hexColor) { 
    @return "#{red($hexColor)},#{green($hexColor)},#{blue($hexColor)}"; 
} 

Вы можете пройти в любом шестнадцатеричном либо в явной форме или RGB() или RGBA() с непрозрачностью в 1.

Например:

$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" 
+0

Обратите внимание, что вам может потребоваться добавить 'round', чтобы избежать недопустимых значений в' 'rgb()', если вы изменяете свои значения шестнадцатеричного значения, например, 'lighten' или' darken'. Например: '@return '# {round (red ($ hexColor))}, # {round (зеленый ($ hexColor))}, # {round (синий ($ hexColor))}"; ' – Nicd

Смежные вопросы