CSS RGBA hexadécimal?


199

Je sais que tu peux écrire ...

background-color: #ff0000;

... si vous voulez quelque chose de rouge.

Et vous pouvez écrire ...

background-color: rgba(255, 0, 0, 0.5);

... si vous voulez quelque chose de rouge et de translucide.

Existe-t-il une manière concise d'écrire des couleurs partiellement transparentes en hexadécimal? Je veux quelque chose comme:

background-color: #ff000088; <--- the 88 is the alpha

... ou ...

background-color: #ff0000 50%;

Je reçois toutes mes couleurs en hexadécimal, et devoir les convertir toutes à l'échelle décimale 0-255 est ennuyeux.


1
Vous pouvez expérimenter différentes notations, mais je n'ai pas réussi. rgb(0xff,\x80,#44)étonnamment la représentation octale semble york un peu rgb(0100, 0200,0300)est#4080C0
yunzen

Vous voudrez peut-être utiliser ColorPic, qui affiche les chiffres décimaux pour une couleur choisie iconico.com/colorpic
yunzen

2
Comme l'a suggéré Slomojo, dans MOINS, vous pouvez faire la couleur de fond: # ff0000 + rgba (0, 0, 0, .8); qui convertira l'hex pour vous et appliquera toujours la transparence mais cela ne peut pas être fait en utilisant du CSS natif.
fl3x7

1
Pour être complet, comme Slomojo et fl3x7 en parlent, cela peut être fait facilement dans Sass : background-color: opacify(#ff0000, 0.5);ou background-color: transparentize(#ff0000, 0.5);Vous pouvez également fournir des variables de couleur hexadécimales Sass à ces fonctions Sass.
Adam Caviness

Réponses:


112

Le module CSS Color Level 4 prendra probablement en charge la notation RGBA hexadécimale à 4 et 8 chiffres!

Il y a trois semaines (18 décembre 2014), le projet de l'éditeur de CSS Color Module Level 4 a été soumis au groupe de travail CSS W3C. Bien que dans un état qui soit fortement susceptible de changer, la version actuelle du document implique que dans un futur assez proche, CSS supportera à la fois la notation RGBA hexadécimale à 4 et 8 chiffres.

Remarque: la citation suivante a des morceaux non pertinents et la source peut avoir été fortement modifiée au moment où vous lisez ceci (comme mentionné ci-dessus, c'est un brouillon de l'éditeur et non un document finalisé).
Si les choses ont beaucoup changé, laissez-moi un commentaire pour que je puisse mettre à jour cette réponse!

§ 4.2. Les notations hexadécimales RVB: #RRGGBB

La syntaxe de a <hex-color>est un <hash-token>jeton dont la valeur se compose de 3, 4, 6 ou 8 chiffres hexadécimaux . En d'autres termes, une couleur hexadécimale est écrite sous la forme d'un caractère de hachage, "#", suivi d'un certain nombre de chiffres 0-9ou de lettres a-f(la casse des lettres n'a pas d'importance - #00ff00est identique à #00FF00).

8 chiffres

Les 6 premiers chiffres sont interprétés de manière identique à la notation à 6 chiffres. La dernière paire de chiffres, interprétée comme un nombre hexadécimal, spécifie le canal alpha de la couleur, où 00représente une couleur entièrement transparente et ffreprésente une couleur entièrement opaque.

Exemple 3
En d'autres termes, #0000ffccreprésente la même couleur que rgba(0, 0, 100%, 80%)(un bleu légèrement transparent).

4 chiffres

Il s'agit d'une variante plus courte de la notation à 8 chiffres, "développée" de la même manière que la notation à 3 chiffres. Le premier chiffre, interprété comme un nombre hexadécimal, spécifie le canal rouge de la couleur, où 0représente la valeur minimale et freprésente le maximum. Les trois chiffres suivants représentent respectivement les canaux vert, bleu et alpha.

Qu'est-ce que cela signifie pour l'avenir des couleurs CSS?

Cela signifie qu'en supposant que cela ne soit pas complètement supprimé du document de niveau 4, nous serons bientôt en mesure de définir nos couleurs RGBA (ou couleurs HSLA, si vous êtes l'un de ces types) au format hexadécimal dans les navigateurs qui prennent en charge la couleur Syntaxe du module niveau 4.

Exemple

elem {
    background: rgb(0, 0, 0);           /* RGB notation (no alpha). */
    background: #000;                   /* 3-digit hexadecimal notation (no alpha). */
    background: #000000;                /* 6-digit hexadecimal notation (no alpha). */
    background: rgba(0, 0, 0, 1.0);     /* RGBA notation. */

    /* The new 4 and 8-digit hexadecimal notation. */
    background: #0000;                  /* 4-digit hexadecimal notation. */
    background: #00000000;              /* 8-digit hexadecimal notation. */
}

Quand pourrai-je l'utiliser dans mes produits destinés aux clients?

Tumble weed est la seule vraie réponse ...

Toutes les blagues à part: ce n'est actuellement que le début de 2015, donc elles ne seront pas prises en charge dans aucun navigateur pendant un certain temps encore - même si votre produit n'est conçu que pour fonctionner sur les navigateurs les plus à jour, vous aurez probablement ne pas voir cela en action dans un navigateur de production de sitôt.

Afficher la prise en charge actuelle du navigateur pour la notation des couleurs #RRGGBBAA

Cependant, cela dit, la façon dont CSS fonctionne signifie que nous pouvons réellement commencer à les utiliser dès aujourd'hui! Si vous voulez vraiment commencer à les utiliser dès maintenant, tant que vous ajoutez une solution de repli, tous les navigateurs non pris en charge ignoreront simplement les nouvelles propriétés jusqu'à ce qu'elles soient jugées valides:

figure {
  margin: 0;
  padding: 4px;
  
  /* Fall back (...to browsers which don't support alpha transparency). */
  background: #FEFE7F;
  color: #3F3FFE;
  
  /* Current 'modern' browser support. */
  background: rgba(255, 255, 0, 0.5);
  color: rgba(0, 0, 255, 0.75);
  
  /* Fall... foward? */
  background: #ffff007F; /* Or, less accurately, #ff08 */
  color: #0000ffbe;      /* Or #00fc */
}
<figure>Hello, world!</figure>

Tant que vous visualisez cette réponse sur un navigateur qui prend en charge les propriétés backgroundet coloren CSS, l' <figure>élément résultant de l'extrait ci-dessus sera très similaire à ceci:

Image de résultat d'extrait de code

En utilisant la version la plus récente de Chrome sur Windows (v39.0.2171) pour inspecter notre <figure>élément, nous verrons ce qui suit:

Exemple d'inspecteur d'élément

La valeur de repli hexadécimal à 6 chiffres est remplacée par les rgba()valeurs, et nos valeurs hexadécimales à 8 chiffres sont ignorées car elles sont actuellement considérées comme invalides par l'analyseur CSS de Chrome. Dès que notre navigateur prend en charge ces valeurs à 8 chiffres, celles-ci remplacent rgba()celles.

MISE À JOUR 2018-07-04: Firefox, Chrome et Safari prennent désormais en charge cette notation, Edge est toujours manquant mais suivra probablement ( https://caniuse.com/#feat=css-rrggbbaa ).


1
Je me souviens avoir vu cela apparaître dans les listes de diffusion il y a un an au plus tard (l'idée d'avoir un hex de 4 à 8 chiffres n'est pas nouveau). Heureux de voir qu'il est entré Couleurs 4 pour l'instant.
BoltClock

@BoltClock j'espère que ça va rester ici aussi!
James Donnelly

Firefox Nightly vient juste de l'implémenter :)
Florrie

/* Fall... foward? */»Je suggère d'aller de l'avant. Fallback et Jumpforward: ^ p
WoodrowShigeru

Il suffit d'ajouter un lien utile. Le lien contient la liste des valeurs d'opacité en hexadécimal. gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar

33

J'ai trouvé la réponse après avoir publié l'amélioration de la question. Désolé!

MS Excel a aidé!

ajoutez simplement le préfixe Hex à la valeur de la couleur hexadécimale pour ajouter un alpha qui a l'opacité équivalente à la valeur%.

(en rbga, le pourcentage d'opacité est exprimé en décimal comme mentionné ci-dessus)

Opacity %   255 Step        2 digit HEX prefix
0%          0.00            00
5%          12.75           0C
10%         25.50           19
15%         38.25           26
20%         51.00           33
25%         63.75           3F
30%         76.50           4C
35%         89.25           59
40%         102.00          66
45%         114.75          72
50%         127.50          7F
55%         140.25          8C
60%         153.00          99
65%         165.75          A5
70%         178.50          B2
75%         191.25          BF
80%         204.00          CC
85%         216.75          D8
90%         229.50          E5
95%         242.25          F2
100%        255.00          FF

Ne comprends pas vraiment. Voulez-vous dire #FF00000Cest équivalent à rgba(255,0,0,0.05)?
2011

c'est un préfixe pas un suffixe. Cela signifie que vous ajoutez à l'avant de votre valeur de couleur hexadécimal à 6 chiffres #000000devient #7F000000.
T9b

8
@ T9b: CSS3 ne prend pas en charge cette notation. Fin de l'histoire.
PointedEars

@PointedEars mal sur les deux points. L'OP ne mentionne pas spécifiquement CSS3, et cette question, j'aurais pensé, serait probablement plus liée à des problèmes spécifiques à IE que nous savons tous difficiles. Néanmoins, IE utilise les valeurs de transparence CSS et Hex dans son CSS.
T9b

4
@ T9b Nonsense. L'OP a une question CSS sur les valeurs RGBA. Il n'y a pas de support RGBA en CSS avant CSS3. Si IE / MSHTML prend en charge votre notation, cela est propriétaire , non compatible et intrinsèquement peu fiable. Et vous ne proposez certainement pas d'utiliser des scripts côté client pour faire fonctionner cette notation, n'est-ce pas? Car cela ne serait pas compatible et ne serait pas fiable non plus.
PointedEars

22
RGB='#ffabcd';
A='0.5';
RGBA='('+parseInt(RGB.substring(1,3),16)+','+parseInt(RGB.substring(3,5),16)+','+parseInt(RGB.substring(5,7),16)+','+A+')';

var rgb = '#ffabcd'; var a = '0.5'; var matches = rgb.match(/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/i); var rgba = 'rgba(' + matches.slice(1).map(function(m) { return parseInt(m, 16); }).concat(a) + ')';
PointedEars

2
Si vous venez d'un monde de React:<div style={ { backgroundColor: `rgba(${ parseInt(color.substring(1,3),16) }, ${ parseInt(color.substring(3,5),16) }, ${ parseInt(color.substring(5,7),16) }, 0.5)` } }></div>
Atul Yadav

14

Voir ici http://www.w3.org/TR/css3-color/#rgba-color

Ce n'est pas possible, probablement parce que 0xFFFFFFFF est supérieur à la valeur maximale pour les entiers 32 bits


28
#ffffff(six chiffres hexadécimaux) est en fait une valeur de couleur de 24 bits ; 0xFFFFFFFF est en fait 2³² − 1, et peut être représenté comme un entier 32 bits non signé . Je pense que la raison pour laquelle #ffffffff(huit chiffres hexadécimaux) n'est pas spécifié est à la fois que les couleurs CSS sont enracinées dans l'espace colorimétrique sRGB et qu'une notation à huit chiffres hexadécimaux serait ambiguë avec un périphérique d'affichage qui prend en charge une profondeur de couleur de 32 bits. N'oubliez pas qu'il y en a toujours #fffpour que cela signifie rgb(100%, 100%, 100%)- blanc - à la fois avec une profondeur de couleur de 8 bits (256 couleurs) et 16 bits (65536 ou 64K couleurs).
PointedEars

5
En fait, c'est exactement ce que l'entier 32 bits est capable de contenir. 2 chiffres hexadécimaux peuvent contenir autant de valeurs que 8 chiffres binaires. Ou ... 8 chiffres hexadécimaux peuvent contenir autant de valeurs que 32 chiffres binaires.
Pijusn

Bien qu'il n'y ait aucune raison majeure pour laquelle la fonction CSS n'aurait pas dû être conçue de cette façon dès le début (ainsi que les flotteurs rgba (0.0, 0.5, 1.0) pour que les normales correspondent aux autres fonctions de couleur). Quant à la prise en charge des couleurs d'affichage 32 bits, cela n'existe pas avec RVB à 6 chiffres pour commencer et c'est vraiment un cas de bord. Je n'ai pas de problème avec l'apprentissage de différents formats, mais il y a des cas où vous pouvez obtenir une couleur dynamique en hexadécimal et avoir besoin de créer du CSS à partir de celle-ci lors de l'exécution. Cela nécessite l'étape supplémentaire de conversion de l'hex en décimal si vous souhaitez y ajouter de l'alpha, ce qui est maladroit.
Beejor

13

Chrome 52+ prend en charge l' alpha hex:

background: #56ff0077;

4
J'étais ravi de voir cela, puis je l'ai essayé dans devtools sur Chrome 55. Pas de dés, cela ¯\_(ツ)_/¯
génère

1
Il semble qu'il y ait eu divers problèmes, voici la page d'état de la fonctionnalité.
Billy

Chrome a supprimé le support, Safari et Firefox ont un support. Ne l'utilisez pas.
Affaire

5
En juillet 2019, 84,5% de tous les navigateurs prenaient en charge cette fonctionnalité dans le monde. caniuse.com/#search=rrggbbaa
André Kuhlmann

10

Utiliser red,green , bluepour convertir en RGBA:

background-color: rgba(red($color), green($color), blue($color), 0.2);

4
SASS prend en charge la couleur de fond: rgba ($ color, .2);
djibe

ce ne sont pas des méthodes css valides - vous devez le mentionner
Piotr Karbownik


5

Si vous pouvez utiliser MOINS, il existe une fonction de fondu.

@my-opaque-color: #a438ab;
@my-semitransparent-color: fade(@my-opaque-color, 50%);

background-color:linear-gradient(to right,@my-opaque-color, @my-semitransparent-color); 

// result: 
background-color: linear-gradient(to right, #a438ab, rgba(164, 56, 171, 0.5));

et sass / scss a une fonction équivalente:rgba(base-color, 0.5)
LocustHorde

2

Prince charmant:

Seul Internet Explorer autorise la couleur hexadécimale de 4 octets au format ARGB, où A est le canal Alpha. Il peut être utilisé dans les filtres dégradés par exemple:

filter  : ~"progid:DXImageTransform.Microsoft.Gradient(GradientType=@{dir},startColorstr=@{color1},endColorstr=@{color2})";

Où dir peut être: 1 (horizontal) ou 0 (vertical) Et les chaînes de couleurs peuvent être des couleurs hexadécimales (# FFAAD3) ou des couleurs hexadécimales argb (# 88FFAAD3).



0

Eh bien, vous devrez apprendre différentes notations de couleur.
Kuler vous donne une meilleure chance de trouver la couleur et en plusieurs notations.
Hex n'est pas différent de RGB, FF = 255 et 00 = 0, mais c'est ce que vous savez. Donc, d'une certaine manière, vous devez le visualiser.
J'utilise Hex, RGBA et RGB. Sauf si une conversion de masse est requise, cette opération manuelle vous aidera à vous souvenir de quelques 100 couleurs et de leurs codes.
Pour la conversion de masse, écrivez un script comme celui donné par Alarie. Amusez-vous avec les couleurs.


-2

pourquoi ne pas utiliser background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

si vous ciblez une couleur pour un texte ou probablement un élément, cela devrait être beaucoup plus facile à faire.


9
-1 opacité affecte tout le contenu, pas seulement la couleur de fond
yunzen

alors l'objet peut être doublé, l'un doit être l'élément contenant, l'autre doit être celui à l'intérieur du conteneur qui a l'opacité. car de la question l'utilisateur veut une autre méthode que la rgba conventionnelle.
Charming Prince

1
Il veut toujours le même résultat, et je ferais mieux d'utiliser rgba () ou toute autre notation que de modifier HTML.
FelipeAls

c'est la réponse que je cherchais, laissez les couleurs hexadécimales et changez l'opacité en utilisant la opacitypropriété css.
ici
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.