Создание переменных#
Автоматический способ - через карту и цикл#
// 1. Определяем все цвета в карте
$colors: (
'bg': #d0d0d0,
'text': #333,
'primary': #3498db,
'secondary': #6c757d,
'success': #28a745,
'danger': #dc3545
);
// 2. Автоматически создаем CSS переменные
:root {
@each $name, $value in $colors {
--#{$name}Color: #{$value};
}
}
// 3. Используем
.container {
background-color: var(--bgColor);
color: var(--textColor);
}
Еще более продвинутый способ - миксин#
// Миксин для автоматического создания CSS переменных
@mixin generate-css-vars($prefix: '', $vars-map: ()) {
@each $key, $value in $vars-map {
--#{$prefix}#{$key}: #{$value};
}
}
// Использование
:root {
@include generate-css-vars('color-', $colors);
@include generate-css-vars('size-', (
'small': 12px,
'medium': 16px,
'large': 24px
));
}
Результат:#
:root {
--color-bg: #d0d0d0;
--color-text: #333;
--color-primary: #3498db;
--size-small: 12px;
--size-medium: 16px;
--size-large: 24px;
}
Так намного удобнее - добавил новый цвет в карту, и CSS переменная создалась автоматически!
В Bootstrap именно так и сделано, только еще сложнее с учетом всех их потребностей.