Русский
Русский
English
Статистика
Реклама

CSS var в rgba или удобное использование цветов в Sass

Эта статья посвящена обзору моих наработок в Sass, которые облегчают жизнь при работе с цветами во время верстки. Мы рассмотрим 3 подхода, которые воедино принесут комфорт в работу с цветами.

В итоге, такая запись:

body{  color: color(primary);  background: color(primary, 0.5);}

Будет эквивалентна такой:

:root {  --color-pink: #E20071;  --color-pink--rgb: 226, 0, 113;}body {  color: var(--color-pink);  background: rgba(var(--color-pink--rgb), 0.5);}

Но, при этом в управлении вы используете только HEX формат цвета. Конвертация происходит в автоматическом режиме. Никаких танцев с бубном. Смотрим:

Автоматическое создание CSS переменных

Почему лучше использовать CSS, а не Sassпеременные, можно почитать на Хабре в этой статье.

Первое, создадим массив с нужными цветами.

$colors : (  "pink"  : #E20071,  "blue"  : #00A3DA,  "gray"  : #939394,  "white" : #FFFFFF,  "black" : #1B1B1B,);

Далее, создадим CSS переменные,перебрав в цикле созданный выше массив $colors и запишем их впсевдокласс:root.

:root{  @each $key, $value in $colors {    --color-#{$key} : #{$value};  }}

На выходе, получим это:

:root {  --color-pink: #E20071;  --color-blue: #00A3DA;  --color-gray: #939394;  --color-white: #FFFFFF;  --color-black: #1B1B1B;}

Прозрачность цвета

Для использования прозрачности в Sass необходимо использовать цвет в RGB формате, но переменные созданные выше написаны в HEX. Чтобы это исправить, напишем простую функцию:

@function HexToRGB($hex) {  @return red($hex), green($hex), blue($hex);}

Далее,запишем цвет в переменную

:root {  --color-pink-rgb: #{HexToRGB(#E20071)};}

И воспользуемся функцией rgba, где первый параметр нужный цвет, а второй прозрачность. Значение прозрачности может находиться в диапазоне от 0 (полностью прозрачный) до 1 (полностью непрозрачный):

body{  background: rgba(var(--color-pink-rgb), 0.5);}

Сокращенная запись CSS переменной

Для ускоренного написания CSS переменной, напишем функциюcolor.

@function color($name) {  @return var(--color-#{unquote($name)});}

Теперь запись:

body{  background: color(pink);}

Равнозначна такой:

body{  background: var(--color-pink);}

Простая магия

Теперь покажу пример, как используя 3 этих подхода, можно управлять цветами (CSS переменными) так, используя массив как тему:

body{  color: color(primary);  background: color(primary, 0.5);}

Вот сам код:

$colors_theme : (  "primary"   : "pink",  "secondary" : "blue");$colors : (  "pink"  : #E20071,  "blue"  : #00A3DA,  "gray"  : #939394,  "white" : #FFFFFF,  "black" : #1B1B1B,);@function HexToRGB($hex) {  @return red($hex), green($hex), blue($hex);}@function color($name, $opacity: false) {  @if $opacity {    @return rgba(var(--color-#{unquote($name)}--rgb), $opacity);  } @else {    @return var(--color-#{unquote($name)});  }}:root{  @if $colors {    @if $colors_theme {      @each $key, $value in $colors_theme {        --color-#{$key} : var(--color-#{$value});        --color-#{$key}--rgb : var(--color-#{$value}--rgb);      }    }    @each $key, $value in $colors {      --color-#{$key} : #{$value};      --color-#{$key}--rgb : #{HexToRGB($value)};    }  }}

Ну вот и все, в качестве вывода можно сказать, что благодаря подобным функциям упрощается и ускоряется работа с цветами.

Более того, с помощью данных функций, имея в качестве входного значения цвет только в HEX формате, можно легко изменить цветовую палитру сайта. И не прибегнуть к дополнительным кододвижениям.

Прошу строго не судить это первая статья на Хабре.

Источник: habr.com
К списку статей
Опубликовано: 15.12.2020 02:07:06
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Css

Лайфхаки для гиков

Sass

Css variables

Верстка сайтов

Цвета

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru