267 votes

Sass - Conversion de Hex en RGBa pour une opacité de l'arrière-plan

J'ai le texte suivant mixin Sass, qui est un demi-complète de la modification d'une RGBa exemple:

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

J'ai appliqué $opacity ok, mais maintenant je suis coincé avec l' $color partie. Les couleurs je serai envoyant dans le mixin sera HEX non pas en RVB.

Mon exemple d'utilisation:

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

Comment puis-je utiliser les valeurs hexadécimales dans ce mixin?

495voto

hopper Points 3778

Le rgba() la fonction peut accepter une seule couleur hexadécimale ainsi décimal des valeurs RVB. Par exemple, ce serait très bien fonctionner:

@mixin background-opacity($color, $opacity: 0.3) {
    background: $color; /* The Fallback */
    background: rgba($color, $opacity);
}

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

Si jamais vous avez besoin pour briser le sortilège de couleur en composantes RVB, cependant, vous pouvez utiliser le rouge(), green(), et bleu() fonctions:

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

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

6voto

m.Elouafi Points 46

vous pouvez essayer cette solution, est la meilleure ... 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);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X