138 votes

Comment convertir une couleur hexadécimale en rgba avec le compilateur Less ?

J'ai le code suivant :

@color : #d14836;

.stripes span {
    -webkit-background-size: 30px 30px;
    -moz-background-size: 30px 30px;
    background-size: 30px 30px;
    background-image: -webkit-gradient(linear, left top, right bottom,
        color-stop(.25, rgba(209, 72, 54, 1)), color-stop(.25, transparent),
        color-stop(.5, transparent), color-stop(.5, rgba(209, 72, 54, 1)),
        color-stop(.75, rgba(209, 72, 54, 1)), color-stop(.75, transparent),
        to(transparent));

Je dois convertir @color a rgba(209, 72, 54, 1) .

Je dois donc remplacer rgba(209, 72, 54, 1) dans mon code avec une fonction de Less qui génère une rgba() valeur de mon @color variable.

Comment puis-je faire cela avec Less ?

368voto

Ronald Pauffert Points 707

En fait, le langage Less est livré avec une fonction intégrée appelée fade . Vous passez un objet de couleur et le % d'opacité absolue (une valeur plus élevée signifie moins transparent) :

fade(@color, 50%);   // Return @color with 50% opacity in rgba

108voto

Soc Points 1147

Si vous n'avez pas besoin d'une clé alpha, vous pouvez simplement utiliser la représentation hexadécimale de la couleur. Une couleur rgba avec un alpha de '1' est identique à la valeur hexadécimale.

Voici quelques exemples pour le démontrer :

@baseColor: #d14836;

html {
    color: @baseColor;
    /* color:#d14836; */
}

body {
    color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 1);
    /* color:#d14836; */
}

div {
    color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 0.5);
    /* rgba(209, 72, 54, 0.5); */
}

span {
    color: fade(@baseColor, 50%);
    /* rgba(209, 72, 54, 0.5); */
}

h3 {
    color: fade(@baseColor, 100%)
    /* color:#d14836; */
}

Testez ce code en ligne : http://lesstester.com/

12voto

helpse Points 445

Mon mixin Less :

.background-opacity(@color, @opacity) {
    @rgba-color: rgba(red(@color), green(@color), blue(@color), @opacity);

    background-color: @rgba-color;

    // Hack for IE8:
    background: none\9; // Only Internet Explorer 8
    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d')", argb(@rgba-color),argb(@rgba-color))); // Internet Explorer 9 and down
    // Problem: Filter gets applied twice in Internet Explorer 9.
    // Solution:
    &:not([dummy]) {
      filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); // Only IE9
    }
}

Essayez-le.

ÉDITION : Comme vu sur Fond rgba avec filtre IE alternatif : IE9 rend les deux ! J'ai ajouté quelques lignes au mixin.

3voto

Dmitry Davydov Points 753

Il semble qu'avec la récente mise à jour de Less 3.81 vous pouvez utiliser seulement deux arguments dans la fonction rgba().

rgba(white, 0.3) or rgba(white, 30%) => rgba(255, 255, 255, 0.3)

Cela fonctionne pour moi, mais je n'arrive pas à le trouver en la documentation officielle .

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