web-dev-qa-db-fra.com

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

J'ai le mix suivant Sass, qui est une modification à moitié complète d'un exemple RGBa:

@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 la partie $color. Les couleurs que je vais envoyer dans le mixin seront HEX et non RGB.

Mon exemple d'utilisation sera:

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

Comment puis-je utiliser les valeurs HEX dans ce mixin?

185
Rick Donohoe

La fonction rgba () peut accepter une seule couleur hexadécimale ainsi que des valeurs décimales RVB. Par exemple, cela fonctionnerait très bien:

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

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

Si vous avez besoin de couper la couleur hexadécimale en composants RVB, vous pouvez utiliser le rouge () , . vert () , et blue () fonctionne pour ce faire:

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

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

Il y a un mixin intégré: transparentize($color, $amount);

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

Le montant doit être compris entre 0 et 1;

Documentation officielle Sass (module: Sass :: Script :: Functions)

104
user3631047

SASS a une fonction intégrée rgba () pour évaluer les valeurs.

rgba($color, $alpha)

Par exemple.

rgba(#00aaff, 0.5) => rgba(0, 170, 255, 0.5)

Un exemple utilisant vos propres variables:

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

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

Les sorties:

.my-element {
  color: rgba(0, 170, 255, 0.5);
}
28
Reggie Pinkham

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);
6
m.Elouafi