CSS 16進数RGBA?


199

私はあなたが書くことができることを知っています...

background-color: #ff0000;

...あなたが赤い何かが欲しいなら。

そして、あなたは書くことができます...

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

...何か赤く半透明にしたい場合。

部分的に透明な色を16進数で書く簡単な方法はありますか?私は次のようなものが欲しい:

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

...または...

background-color: #ff0000 50%;

すべての色を16進数で取得しているため、すべての色を10進数の0〜255のスケールに変換するのは面倒です。


1
さまざまな表記法を試すことができますが、成功しませんでした。rgb(0xff,\x80,#44)驚くほどオクタル表現は少しはニューヨークに思えるrgb(0100, 0200,0300)される#4080C0
yunzen

選択した色の小数を表示するColorPicを使用することもできます。iconico.com/colorpic
yunzen

2
Slomojoが示唆したように、LESSではbackground-colorを実行できます。#ff0000 + rgba(0、0、0、.8); これは16進数を変換して透明度を適用しますが、ネイティブCSSを使用してこれを行うことはできません。
fl3x7 2013年

1
完全を期すために、Slomojoとfl3x7で説明されているようにこれはSassで簡単に実行できますbackground-color: opacify(#ff0000, 0.5);または、background-color: transparentize(#ff0000, 0.5);Sassの16進数の色変数をこれらのSass関数に提供することもできます。
アダムキャビネス2015年

回答:


112

CSSカラーモジュールレベル4は、おそらく 4および8桁の16進数のRGBA表記をサポートします。

3週間前(2014年12月18日)に、CSSカラーモジュールレベル4エディターのドラフトがCSS W3Cワーキンググループに提出されました。変更の影響を非常に受けやすい状態にありますが、ドキュメントの現在のバージョンは、やや近い将来、CSSが4桁と8桁の16進数のRGBA表記の両方をサポートすることを示唆しています。

注:次の引用では無関係な部分が切り取られており、これを読んだ時点でソースが大幅に変更されている可能性があります(前述のように、これは編集者の下書きであり、最終的なドキュメントではありません)。
状況が大きく変わった場合は、コメントを残してお知らせください。この回答を更新できます!

§4.2。RGB 16進表記:#RRGGBB

構文は、<hex-color>ある<hash-token>トークンの値が3、4、6、または8桁の16進数で構成され。つまり、16進数の色はハッシュ文字「#」として記述され、その後にいくつかの数字0-9または文字が続きます(文字a-fの大文字と小文字は関係ありません- #00ff00と同じです#00FF00)。

8桁

最初の6桁は6桁表記と同じように解釈されます。16進数として解釈される最後の数字のペアは、色のアルファチャネルを指定します。ここで00、完全に透明な色をff表し、完全に不透明な色を表します。

例3
言い換えると、(わずかに透明な青)#0000ffccと同じ色を表しrgba(0, 0, 100%, 80%)ます。

4桁

これは、8桁表記の短い変形で、3桁表記と同じように「拡張」されています。最初の桁は16進数として解釈され、色の赤のチャネルを指定します。ここで0、最小値とf最大値を表します。次の3桁は、それぞれ緑、青、アルファチャネルを表します。

これはCSSカラーの将来にとってどのような意味がありますか?

これは完全にレベル4の文書から削除されません(あなたのしているものならば、またはHSLAの色、我々はすぐに私たちのRGBAの色を定義できるようになりますと仮定していることこれは、これらのブラウザでは16進数でみんなが)カラーをサポートモジュールレベル4の構文。

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. */
}

クライアント向け製品でいつ使用できますか?

タンブルウィードが唯一の真の反応です...

すべてのジョークは別として、現在2015年の初めにすぎないため、これらのブラウザーはまだかなり長い間サポートされていません-製品が最新のブラウザーでのみ動作するように設計されている場合でも、おそらく実稼働ブラウザでこれが実際に動作するのをすぐに見ないでください。

#RRGGBBAAカラー表記の現在のブラウザーサポートを表示する

しかし、そうは言っても、CSSの仕組みは、実際にCSSを実際に使い始めることができることを意味します!すぐに使用を開始したい場合は、フォールバックを追加する限り、サポートされていないブラウザーは、有効であると見なされるまで、新しいプロパティを単に無視します。

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>

CSS のbackgroundおよびcolorプロパティをサポートするブラウザーでこの回答を表示している限り<figure>、上記のスニペットの結果の要素は次のようになります。

コードスニペットの結果画像

Windows上のChromeの最新バージョン(v39.0.2171)を使用して<figure>要素を検査すると、次のようになります。

要素インスペクターの例

6桁の16進数のフォールバックはrgba()値によってオーバーライドされ、8桁の16進数の値は現在ChromeのCSSパーサーによって無効と見なされているため無視されます。ブラウザーがこれらの8桁の値をサポートするとすぐに、これらの値はオーバーライドされますrgba()

UPDATE 2018-07-04: Firefox、Chrome、Safariはこの表記をサポートしていますが、Edgeはまだありませんが、おそらく続くでしょう(https://caniuse.com/#feat=css-rrggbbaa)。


1
これが遅くとも1年ほど前にメーリングリストで取り上げられたことを覚えています(4桁/ 8桁の16進数を使用するという考えは目新しいものではありません)。今のところColors 4に入っているのを見てうれしい。
BoltClock

@BoltClockうまくいけば、ここにも残ります!
James Donnelly

Firefox Nightlyはこれを実装したばかりです:)
Florrie

/* Fall... foward? */»ジャンプフォワードをお勧めします。フォールバックとジャンプフォワード:^ p
WoodrowShigeru

便利なリンクを追加するだけです。リンクには、16進数の不透明度値リストが含まれています。gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar

33

質問への強化を投稿した後、私は答えを見つけました。ごめんなさい!

MS Excelが役立ちました!

16進数のプレフィックスを16進数の色の値に追加するだけで、%値と同等の不透明度を持つアルファを追加できます。

(rbgaでは、不透明度のパーセンテージは上記のように10進数で表されます)

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

理解しすぎないでください。はと#FF00000C同等rgba(255,0,0,0.05)ですか?
yunzen

その接頭辞は接尾辞ではありません。6桁の16進数のカラー値の前に追加すると、に#000000なり#7F000000ます。
T9b

7
@ T9b:CSS3はこの表記法をサポートしていません。物語の終わり。
PointedEars

@PointedEarsは両方の点で間違っています。OPはCSS3について具体的に言及していません。この質問は、私たち全員が困難であることがわかっているIE固有の問題に関連していると思います。それにもかかわらず、IEはCSSでCSSと16進数の透明度の値の両方を使用します。
T9b

4
@ T9bナンセンス。OPには、RGBA値に関するCSSの質問があります。CSS3より前のCSSでは、RGBAはサポートされていません。IE / MSHTMLがユーザーの表記法をサポートしている場合、それは独自仕様であり、互換性がなく、本質的に信頼できません。確かに、クライアント側のスクリプトを使用してその表記法を機能させることを提案しているのではないでしょうか。そのため、互換性がなく、信頼性も低くなります。
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
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 2017

14

こちらをご覧くださいhttp://www.w3.org/TR/css3-color/#rgba-color

0xFFFFFFFFが32ビット整数の最大値より大きいため、おそらく不可能です


28
#ffffff(6桁の16進数)は、実際には24ビットのカラー値です。0xFFFFFFFFは実際には2³²−1であり、符号なし 32ビット整数として表すことができます。#ffffffff(8桁の16進数)が指定されていない理由は、CSSの色がsRGB色空間に根ざしていることと、8桁の16進数表記が32ビットの色深度をサポートするディスプレイデバイスではあいまいであることの両方だと思います。#fffそれが意味するようにまだあるrgb(100%, 100%, 100%)–白–両方とも8ビット(256色)と16ビット(65536または64K色)の色深度。
PointedEars

5
実際、これはまさに32ビット整数が保持できる機能です。2桁の16進数は、8桁の2桁までの値を保持できます。または... 8桁の16進数は32桁の2進数と同じ数の値を保持できます。
Pijusn 2013年

CSS関数が最初からこのように設計されるべきではなかった大きな理由はありませんが(法線が他のカラー関数と一致するためにrgba(0.0、0.5、1.0)が浮動しているのと同様に)。32ビットディスプレイカラーサポートに関しては、これはもともと6桁のRGBには存在せず、実際にはエッジケースです。さまざまな形式の学習に問題はありませんが、16進数で動的な色を取得し、実行時にそこからCSSを作成する必要がある場合があります。アルファを追加したい場合は、16進数から10進数に変換する追加の手順が必要ですが、これは不格好です。
Beejor

13

Chrome 52以降 16進数のアルファをサポートしています

background: #56ff0077;

4
私はこれを見て興奮し、Chrome 55のdevtoolsで試しました。サイコロはなく、無効なプロパティ値としてエラーが発生します...¯\_(ツ)_/¯
ericsoco

1
ルックスは、それが様々な問題があった好きここにある機能のステータスページ。
ビリー

Chromeはサポートを削除し、SafariとFirefoxはサポートを削除しました。これは使用しないでください。
ケース

5
2019年7月の時点で、すべてのブラウザの84.5%がこの機能をグローバルにサポートしています。caniuse.com/#search=rrggbbaa
アンドレ・KUHLMANN

10

使用redgreenblueRGBAに変換します:

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

4
SASSはbackground-colorをサポートしています:rgba($ color、.2);
djibe

これらは有効なcssメソッドではありません-言及する必要があります
Piotr Karbownik

7

それは不可能だと思います。rgbaあなたが知っているフォーマットは唯一のものです。


1
@mdmullinax:しかし、HSL表記で16進数の色を指定するのは誰か
BoltClock

1
私は人生のすべてをHSLA表記に関連付けます。これは共感覚のバージョンです:)
MikeM

@mdmullinax:ああ、それは実際にはかなり素晴らしいです!
BoltClock

6
@mdmullinax:まだ見たことがない場合は、喜ばれるかもしれません:mothereffinghsl.com
BoltClock

@BoltClock私はそのサイトが好きです、ポールアイリッシュは勝利です
MikeM

5

LESSを使用できる場合は、フェード機能があります。

@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));

そして、SASS / SCSSは、同等の機能を持っている:rgba(base-color, 0.5)
LocustHorde

2

魅力的な王子:

Internet Explorerのみが、ARGBの形式で4バイトの16進カラーを許可します。ここで、Aはアルファチャネルです。たとえば、勾配フィルターで使用できます。

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

dirには、1(水平)または0(垂直)を指定できます。色の文字列は、16進数の色(#FFAAD3)またはargbの16進数の色(#88FFAAD3)にすることができます。


0

まあ、異なる色の表記はあなたが学ぶ必要があるものです。
Kulerを使用すると、複数の表記で色を見つけることができます。
16進数はRGBと同じで、FF = 255および00 = 0ですが、それはあなたが知っていることです。つまり、ある意味では、それを視覚化する必要があります。
Hex、RGBA、RGBを使用しています。大量変換が必要でない限り、手動でこれを行うと、奇数の100色とそのコードを覚えておくのに役立ちます。
大量変換の場合は、Alarieが提供するようなスクリプトを記述します。色で爆発します。



-2

なぜ使わないの background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

テキストまたはおそらく要素の色をターゲットにする場合、これははるかに簡単です。


9
-1不透明度は、背景色だけでなく、すべてのコンテンツに影響します
yunzen

次に、オブジェクトを2倍にすることができます。1つはコンテナ要素で、もう1つはコンテナ内の不透明度を持つ必要があります。質問から、ユーザーは従来のrgba以外の方法を望んでいるからです。
チャーミングな王子

1
彼は今でも同じ結果を望んでおり、HTMLを変更するよりもrgba()または他の表記を使用する方がよいでしょう。
FelipeAls、2011年

これが私が探していた答えです。16進数の色はそのままにして、opacitycssプロパティを使用して不透明度を変更します。
こちら、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.