[257] [[CSS]] における [CODE(CSS)@en[[[]]]] で利用できる構文 [DFN[[CODE(CSS)@en[[[rgb()]]]]]]、[DFN[[CODE(CSS)@en[[['''#'''[VAR[rgb]]]]]]]]、 [DFN[[CODE(CSS)@en[[['''#'''[VAR[rrggbb]]]]]]]] は、 [[RGB値]] ([[赤]]、[[緑]]、[[青]]の[[光の三原色]]の値の組) による[[色]]の指定を表します。 * 仕様書 - [256] [CITE@en[CSS Color Module Level 3]] ([TIME[2011-06-07 21:54:38 +09:00]] 版) * [CODE(CSS)[#[VAR[rrggbb]]]] [265] [CODE(CSS)@en[[['''#''']]]] の後に[[十六進数字]]6桁が続く形式 ([CODE(CSS)[#[VAR[rrggbb]]]]) は、[[赤]]、[[緑]]、[[青]]の値を[[十六進数字]]2桁ずつ順に並べたものとなっています。 各色 00 から FF まで256段階を表現できます。 [270] [[大文字]]と[[小文字]]は区別されません。 * [CODE(CSS)[#[VAR[rgb]]]] [262] [CODE(CSS)@en[[['''#''']]]] の後に[[十六進数字]]3桁が続く形式 ([CODE(CSS)[#[VAR[rgb]]]]) は、3桁の数字をそれぞれ重ねた物 ([CODE(CSS)[#[VAR[rrggbb]]]]) と等価です。 [SRC[>>256]] ;; [263] 例えば [CODE(CSS)[#fb0]] は [CODE(CSS)[#ffbb00]] と等価です。 [SRC[>>256]] ;; [264] 従って[[白]]は [CODE(CSS)@en[#ffffff]] とも [CODE(CSS)@en[#fff]] とも表すことができ、 [[表示装置]]の[[色深度]]に依存することなく表現できます。 [SRC[>>256]] [271] [[大文字]]と[[小文字]]は区別されません。 * [CODE(CSS)@en[rgb()]] [266] [[RGB]] 値の[[関数的記法]]では、 - [CODE(CSS)@en[rgb(]] - 3つの[[整数値]]、または3つの[[百分率値]]を[[読点]]で区切ったもの - [CODE(CSS)[)]] ... という構文で[[色]]を表します。[[整数値]]の 0 と[[百分率値]]の 0% (と[[十六進数]]表記の 00)、 [[整数値]]の 255 と[[百分率値]]の 100% (と[[十六進数]]表記の FF) が対応します。 [SRC[>>256]] ;; [267] 従って[[白]]は [CODE(CSS)@en[rgb(255,255,255)]], [CODE(CSS)@en[rgb(100%,100%,100%)]], [CODE(CSS)[#fff]], [CODE(CSS)[#ffffff]] などと表せます。 [268] [[整数値]]や[[百分率値]]の前後には[[空白]]を入れることができます。 [SRC[>>256]] ;; [269] しかし [CODE(CSS)@en[(]] の前や [CODE(CSS)@en[%]] の前には入れてはいけません。 [272] [[関数名]]では[[大文字]]と[[小文字]]は区別されませんし、 [[escape]] することもできます。 * 色空間 [273] [[RGB値]]は [[sRGB]] [[色空間]]における[[色]]を表します。 [SRC[>>256]] [274] 実際には[[利用者エージェント]]がどの程度その[[色]]を忠実に再現できるかはそれぞれに依って[['''構いません''']]。 [SRC[>>256]] [275] [[装置]]の[RUBYB[[[色域]]]@en[gamut]]が分かっている場合には、 その範囲内に[RUBYB[[[くりぬく]]]@en[clip]]か[RUBYB[[[写像]]]@en[map]]するかする[['''べきです''']]。 [[利用者エージェント]]は[[赤]]、[[緑]]、[[青]]の各色の指定をその[[装置]]において対応している範囲内に収まるように変更しなければ[['''なりません''']]。 [[利用者エージェント]]はより高品質な[[色域]]間の変換を施しても[['''構いません''']]。 いずれにせよ、 [[CSS]] の仕様書においては[[くりぬき]]の正確な動作は定義されていません。 [SRC[>>256]] ;; [276] 一般的な [[CRT]] [[モニター]]で [[sRGB]] と同じ[[色域]]を持つものでは、 [[整数値]]で 0 から 255 までの範囲である必要があり、 - [CODE(CSS example code)[rgb(300,0,0)]] - [CODE(CSS example code)[rgb(255,-10,0)]] - [CODE(CSS example code)[rgb(110%, 0%, 0%)]] ... はいずれも[[くりぬかれ]]て [CODE(CSS example code)[rgb(255,0,0)]] と指定したのと同じこととなります。 [SRC[>>256]] ;; [277] [[印刷機]]など他の[[装置]]では違った[[色域]]を持っており、 [[sRGB]] でいう 0 から 255 までの範囲の外の[[色]]を表すことができたり、その中の[[色]]を表すことができなかったりしますが、 その場合も適当に[[装置]]の[[色域]]内に置き換えられます。 [278] この[[くりぬき]]が [[CSS]] の解釈のどの時点で行われるのかは仕様上不明確です。 一般的な[[Webブラウザー]]では [[CSSOM]] の時点で既にくりぬかれた後の値になっているようです。 * 構文解析 ** 実例 [1] [CODE(CSS example)@en[rgb(1,2,3)]] ([[名無しさん]]) [2] [CODE(CSS example)@en[rgb(1,2,-3)]] ([[名無しさん]]) [3] >>2 [[Firefox]] 2, [[Opera]] 9, [[WinIE 6]] のいずれも、[[負]]の[[数]]は[[零]]に[[正規化]]した上で [[CSSOM]] 上に現れます。 ([[名無しさん]]) [4] [CODE(CSS example)@en[rgb(1,2,300)]] ([[名無しさん]]) [5] >>4 [[Firefox]] 2, [[Opera]] 9, [[WinIE 6]] のいずれでも、[CODE(CSS)[255]] 以上の[[数]]は [CODE(CSS)[[[255]]]] に[[正規化]]した上で [[CSSOM]] 上に現れます。 ([[名無しさん]]) [6] [CODE(CSS example)@en[rgb(1,2,3.6)]] ([[名無しさん]]) [7] >>6 は [[CSS 3]] によれば [CODE(CSS)@en[[[rgb]]()]] [[関数]]で使えるのは[[整数]]なので、 [[前方互換構文解析規則]]により[[無視]]するのが正しいです。 ([[名無しさん]]) [8] >>6 は [[Firefox]] 2 では無視されますが、[[Opera]] 9 と [[WinIE 6]] では [[CSSOM]] の段階で[[切り捨て]]られます ([[負]]の[[数]]は[[零]]になります)。 ([[名無しさん]]) [9] [CODE(CSS example invalid)@en[rgb(1,2,3%)]] ([[名無しさん]]) [10] >>9 [[CSS 2.1]], [[CSS 3]] によれば3[[整数]]か3[[百分率値]]のどちらかしか認められていないので、混在しているこれは[[無視]]するのが正しいです。 ([[名無しさん]]) [11] >>9 は [[Firefox]] 2 と [[Opera]] 9 に[[無視]]されますが、 [[WinIE 6]] には[[無視]]されません ([[CSSOM]] 上の値は[[整数]]に[[正規化]]されます ([CODE(CSS)@en[3%]] = [CODE(CSS)@en[7]]))。 ([[名無しさん]]) [12] [CODE(CSS example)@en[rgb(1%,2%,3%)]] ([[名無しさん]]) [13] >>12 [[Opera]] 9, [[Firefox]] 2, [[WinIE 6]] とも、 [[CSSOM]] 上は[[整数]]表記 ([[Opera]] 9 は[[十六進数]]表記) になります。 ([[名無しさん]]) [14] >>12 3ブラウザとも、[[負]]の[[百分率値]]は [CODE(CSS)[[[0]]]] に、 [CODE(CSS)[100%]] [[以上]]の[[百分率値]]は [CODE(CSS)[[[255]]]] になるようです。 ([[名無しさん]]) [15] [CODE(CSS)@en[rgb(0%,0.4%,0%)]] ([[名無しさん]]) [16] >>15 [[Firefox]] 2 と [[WinIE 6]] は[[実数]]に変換してから[[整数]]に[[切り捨て]]ているようです。この例では [CODE(CSS)[[[1]]]] になります。 [[Opera]] 9 は[[百分率値]]の段階で[[切り捨て]]てから[[整数]]に変換しているようです。 この例では [CODE(CSS)[[[0]]]] になります。 ([[名無しさん]]) [17] [CODE(CSS)@en[rgb(1,2,3;]] ([[名無しさん]]) [18] [CODE(CSS)@en[rgb(1,2,3;]] ([[名無しさん]]) [19] [CODE(CSS)@en[rgb(1,2,3;]] ([[名無しさん]]) [20] >>19 [[Firefox]] 2, [[WinIE 6]], [[Opera]] 9 のいずれも、 [[括弧]]の対応関係は無視しているようで、[[赤]]になります。 ([[名無しさん]]) [21] [CODE(CSS)@en[[[rgb]](1,2,3]] ([[スタイル・シート]]末) ([[名無しさん]]) [22] >>21 [[Opera]] 9 は正しく[[括弧]]を補います ([[緑]]。) が、 [[Firefox]] 2 と [[WinIE 6]] は[[宣言]]を[[無視]]するようです ([[赤]])。 * 例 - [258] [CODE(CSS example code)[#f00]] - [259] [CODE(CSS example code)[#ff0000]] - [260] [CODE(CSS example code)[rgb(255,0,0)]] - [261] [CODE(CSS example code)[rgb(100%, 0%, 0%)]] これらはいずれも同じ[[色]] ([[赤]]) を表します。 [SRC[>>256]] * 歴史 [280] [CODE(CSS)@en[[['''#'''[VAR[rrggbb]]]]]] は古くから [[HTML]] の[[色]]を値とする[[属性]]で使うことができました。 それ以外は [[CSS1]] で追加されました。[[Webブラウザー]]によっては [[CSS1]] で追加された形式を [[HTML]] で使うことができることがあります。 * 関連 [279] [[RGB値]]に更に[[α値]]を組み合わせた [CODE(CSS)@en[[[rgba()]]]] [[関数]]もあります。