css Sass -将十六进制转换为RGBa以实现背景不透明度

hivapdat  于 2023-06-25  发布在  其他
关注(0)|答案(6)|浏览(259)

我有下面的Sass mixin,它是一个RGBa示例的半个完整修改:

@mixin background-opacity($color, $opacity: .3) {
    background: rgb(200, 54, 54); /* The Fallback */
    background: rgba(200, 54, 54, $opacity);
}

我已经应用了$opacity可以,但现在我被$color部分卡住了。我将发送到mixin的颜色将是十六进制而不是RGB。
我的示例使用将是:

element {
    @include background-opacity(#333, .5);
}

如何在这个mixin中使用HEX值?

nr9pn0ug

nr9pn0ug1#

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(),绿色()和blue()函数来实现:

$red: red($color);
$green: green($color);
$blue: blue($color);

background: rgb($red, $green, $blue); /* same as using "background: $color" */
suzh9iv8

suzh9iv82#

有一个内置的mixin:transparentize($color, $amount);

background-color: transparentize(#F05353, .3);

金额应介于0到1之间;
官方Sass文档(模块:Sass::Script::Functions)

6g8kf2rb

6g8kf2rb3#

使用SASS内置的rgba()函数。

rgba($color, $alpha)

例如

rgba(#00aaff, 0.5) // Output: rgba(0, 170, 255, 0.5)

一个使用你自己变量的例子:

$my-color: #00aaff;
$my-opacity: 0.5;

.my-element {
  color: rgba($my-color, $my-opacity);
}

// Output: .my-element {color: rgba(0, 170, 255, 0.5);}

引用SASS文档:
transparentize()函数将alpha通道减少一个固定的量,这通常不是理想的效果。

osh3o9ms

osh3o9ms4#

你可以试试这个解决方案,是最好的... 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);
baubqpgj

baubqpgj5#

如果您需要混合可变和alpha透明度的颜色,并且使用包含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};

  }

}
kx1ctssn

kx1ctssn6#

您可以使用PostCSS及其postcss-rgb插件,该插件在rgba()规则中启用十六进制支持:arpadHegedus/postcss-rgb

相关问题