Sass - Преобразование Hex в RGBa для непрозрачности фона
У меня есть следующий Sass mixin, который представляет собой половину полной модификации примера RGBa:
@mixin background-opacity($color, $opacity: .3) {
background: rgb(200, 54, 54); /* The Fallback */
background: rgba(200, 54, 54, $opacity);
}
Я применил $opacity
ok, но теперь я застрял с частью $color
.
Цвета, которые я буду отправлять в mixin, будут HEX, а не RGB.
Мой пример использования будет:
element {
@include background-opacity(#333, .5);
}
Как я могу использовать значения HEX в этом mixin?
Ответы
Ответ 1
Функция rgba() может принимать один шестнадцатеричный цвет, а также десятичные значения RGB. Например, это будет хорошо работать:
@mixin background-opacity($color, $opacity: 0.3) {
background: $color; /* The Fallback */
background: rgba($color, $opacity);
}
element {
@include background-opacity(#333, 0.5);
}
Если вам когда-нибудь понадобится разбить шестнадцатеричный цвет на компоненты RGB, вы можете использовать red(), green() и blue() функции для этого:
$red: red($color);
$green: green($color);
$blue: blue($color);
background: rgb($red, $green, $blue); /* same as using "background: $color" */
Ответ 2
Существует встроенный mixin: transparentize($color, $amount);
background-color: transparentize(#F05353, .3);
Сумма должна быть от 0 до 1;
Официальная документация Sass (модуль: Sass:: Script:: Функции)
Ответ 3
SASS имеет встроенную функцию rgba() для оценки значений.
rgba($color, $alpha)
Э.Г.
rgba(#00aaff, 0.5) => rgba(0, 170, 255, 0.5)
Пример использования ваших собственных переменных:
$my-color: #00aaff;
$my-opacity: 0.5;
.my-element {
color: rgba($my-color, $my-opacity);
}
Выходы:
.my-element {
color: rgba(0, 170, 255, 0.5);
}
Ответ 4
вы можете попробовать это решение, это лучший... url (github)
// Transparent Background
// From: http://stackoverflow.com/questions/6902944/sass-mixin-for-background-transparency-back-to-ie8
// Extend this class to save bytes
.transparent-background {
background-color: transparent;
zoom: 1;
}
// The mixin
@mixin transparent($color, $alpha) {
$rgba: rgba($color, $alpha);
$ie-hex-str: ie-hex-str($rgba);
@extend .transparent-background;
background-color: $rgba;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie-hex-str},endColorstr=#{$ie-hex-str});
}
// Loop through opacities from 90 to 10 on an alpha scale
@mixin transparent-shades($name, $color) {
@each $alpha in 90, 80, 70, 60, 50, 40, 30, 20, 10 {
.#{$name}-#{$alpha} {
@include transparent($color, $alpha / 100);
}
}
}
// Generate semi-transparent backgrounds for the colors we want
@include transparent-shades('dark', #000000);
@include transparent-shades('light', #ffffff);
Ответ 5
Если вам нужно смешать цвета из переменной и альфа-прозрачности, а также с решениями, которые включают функцию rgba()
, вы получите ошибку вроде
background-color: rgba(#{$color}, 0.3);
^
$color: #002366 is not a color.
╷
│ background-color: rgba(#{$color}, 0.3);
│ ^^^^^^^^^^^^^^^^^^^^
Нечто подобное может быть полезно.
$meeting-room-colors: (
Neumann: '#002366',
Turing: '#FF0000',
Lovelace: '#00BFFF',
Shared: '#00FF00',
Chilling: '#FF1493',
);
$color-alpha: EE;
@each $name, $color in $meeting-room-colors {
.#{$name} {
background-color: #{$color}#{$color-alpha};
}
}