色
- Dart Sass
- 1.79.0以降
- LibSass
- ✗
- Ruby Sass
- ✗
LibSass、Ruby Sass、および旧バージョンのDart Sassは、rgb
とhsl
以外の色空間をサポートしていません。
新しい色空間のサポートを追加しただけでなく、このリリースでは色の処理方法に関するいくつかの詳細が変更されました。特に、レガシーのrgb
とhsl
色空間でも、もはや色域に制限されなくなりました。rgb(500 0 0)
などの範囲外の値を表すことが可能になりました。さらに、CSS仕様では可能な限り精度を維持することが求められるようになったため、rgb
の色はもはや最も近い整数に丸められなくなりました。
- Dart Sass
- 1.14.0以降
- LibSass
- ✗
- Ruby Sass
- 3.6.0以降
LibSassと旧バージョンのDartまたはRuby Sassは、アルファチャンネル付きの16進数カラーをサポートしていません。
Sassは色値を組み込みでサポートしています。CSSの色と同様に、各色はrgb
やlab
などの特定の色空間における点を表します。Sassの色は、16進コード(#f2ece4
または#b37399aa
)、CSSの色名(midnightblue
、transparent
)、またはrgb()
、lab()
、color()
などのカラー関数として記述できます。
SCSS構文
@debug #f2ece4; // #f2ece4
@debug #b37399aa; // rgba(179, 115, 153, 67%)
@debug midnightblue; // #191970
@debug rgb(204 102 153); // #c69
@debug lab(32.4% 38.4 -47.7 / 0.7); // lab(32.4% 38.4 -47.7 / 0.7)
@debug color(display-p3 0.597 0.732 0.576); // color(display-p3 0.597 0.732 0.576)
Sass構文
@debug #f2ece4 // #f2ece4
@debug #b37399aa // rgba(179, 115, 153, 67%)
@debug midnightblue // #191970
@debug rgb(204 102 153) // #c69
@debug lab(32.4% 38.4 -47.7 / 0.7) // lab(32.4% 38.4 -47.7 / 0.7)
@debug color(display-p3 0.597 0.732 0.576) // color(display-p3 0.597 0.732 0.576)
色空間色空間パーマリンク
Sassは、CSSと同じ色空間のセットをサポートしています。Sassの色は、レガシーの色空間にある場合、またはcolor.to-space()
を使用して別の空間に変換しない限り、常に記述されたのと同じ色空間で出力されます。Sassの他のすべてのカラー関数は、関数が別の空間でその色に変更を加えた場合でも、常に元の空間と同じ空間の色を返します。
各色空間には、そのチャンネルで期待される色域の上限がありますが、Sassは任意の色空間の範囲外の値を表すことができます。これにより、広色域空間の色を狭色域空間に出入りしても、情報を失うことなく安全に変換できます。
⚠️ ご注意ください!
CSSでは、一部のカラー関数が入力チャンネルをクリップする必要があります。たとえば、rgb(500 0 0)
は赤チャンネルを[0, 255]の範囲内にクリップするため、rgb(255 0 0)
と同等ですが、rgb(500 0 0)
はSassで表すことができる別の値です。Sassのcolor.change()
関数を常に使用して、任意の空間の範囲外の値を設定できます。
以下は、Sassがサポートするすべての色空間の完全なリストです。これらの空間については、MDNで学ぶことができます。
空間 | 構文 | チャンネル [最小値, 最大値] |
---|---|---|
rgb * |
rgb(102 51 153) #663399 rebeccapurple
|
赤 [0, 255];緑 [0, 255];青 [0, 255] |
hsl * |
hsl(270 50% 40%) |
色相 [0, 360];彩度 [0%, 100%];明度 [0%, 100%] |
hwb * |
hwb(270 20% 40%) |
色相 [0, 360];白さ [0%, 100%];黒さ [0%, 100%] |
srgb |
color(srgb 0.4 0.2 0.6) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
srgb-linear |
color(srgb-linear 0.133 0.033 0.319) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
display-p3 |
color(display-p3 0.374 0.21 0.579) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
a98-rgb |
color(a98-rgb 0.358 0.212 0.584) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
prophoto-rgb |
color(prophoto-rgb 0.316 0.191 0.495) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
rec2020 |
color(rec2020 0.305 0.168 0.531) |
赤 [0, 1];緑 [0, 1];青 [0, 1] |
xyz 、xyz-d65 |
color(xyz 0.124 0.075 0.309) color(xyz-d65 0.124 0.075 0.309)
|
x [0, 1];y [0, 1];z [0, 1] |
xyz-d50 |
color(xyz-d50 0.116 0.073 0.233) |
x [0, 1];y [0, 1];z [0, 1] |
lab |
lab(32.4% 38.4 -47.7) |
明度 [0%, 100%];a [-125, 125];b [-125, 125] |
lch |
lch(32.4% 61.2 308.9deg) |
明度 [0%, 100%];彩度 [0, 150];色相 [0deg, 360deg] |
oklab |
oklab(44% 0.088 -0.134) |
明度 [0%, 100%];a [-0.4, 0.4];b [-0.4, 0.4] |
oklch |
oklch(44% 0.16 303.4deg) |
明度 [0%, 100%];彩度 [0, 0.4];色相 [0deg, 360deg] |
*印の色空間は、レガシーの色空間です。
欠損チャンネル欠損チャンネルパーマリンク
CSSとSassの色には、「欠損チャンネル」があり、これはnone
と記述され、値が不明であるか、色のレンダリング方法に影響しないチャンネルを表します。たとえば、彩度が0%
の場合は色相が問題にならないため、hsl(none 0% 50%)
と記述する場合があります。ほとんどの場合、欠損チャンネルは単に0値として扱われますが、時々発生します。
-
アニメーションなどのCSS補間の部分として、またはSassの
color.mix()
関数を使用して色を混合する場合は、可能な場合は常に、欠損チャンネルは他の色のそのチャンネルの値になります。 -
類似のチャンネルを持つ別の空間に色を欠損チャンネル付きで変換する場合は、変換が完了した後にそのチャンネルが
none
に設定されます。
color.channel()
は欠損チャンネルに対して0を返しますが、color.is-missing()
を使用して常に確認できます。
SCSS構文
@use 'sass:color';
$grey: hsl(none 0% 50%);
@debug color.mix($grey, blue, $method: hsl); // hsl(240, 50%, 50%)
@debug color.to-space($grey, lch); // lch(53.3889647411% 0 none)
Sass構文
@use 'sass:color'
$grey: hsl(none 0% 50%)
@debug color.mix($grey, blue, $method: hsl) // hsl(240, 50%, 50%)
@debug color.to-space($grey, lch) // lch(53.3889647411% 0 none)
無効なチャンネル無効なチャンネルパーマリンク
特定の状況下では、色のチャンネルは「無効」と見なされ、その値は画面での色のレンダリング方法に影響しません。CSS仕様では、色を新しい空間に変換する際に、無効なチャンネルはすべてnone
で置き換える必要があります。Sassでは、レガシー空間への変換を除くすべてのケースでこれを実行して、レガシー空間への変換が常に古いブラウザと互換性のある色を生成することを保証します。
無効なチャンネルの詳細については、color.is-powerless()
を参照してください。
レガシー色空間レガシー色空間パーマリンク
従来、CSSとSassは標準RGB色域のみをサポートしており、色の定義にはrgb
、hsl
、hwb
関数のみをサポートしていました。当時はすべての色が同じ色域を使用していたため、すべてのカラー関数は色空間に関わらずすべての色で機能しました。Sassは依然としてこの動作を保持していますが、古い関数とこれらの3つの「レガシー」色空間の色に対してのみです。それにもかかわらず、カラー関数を使用する際には、作業する$space
を明示的に指定することをお勧めします。
Sassは、従来の色値をCSSに変換する際、異なるレガシーな色空間間でも自由に相互変換を行います。CSS。これは常に安全です。なぜなら、すべてが同じ基盤となるカラーモデルを使用しており、Sassが可能な限り互換性のある形式で色を出力するのに役立つからです。
カラー関数カラー関数パーマリンク
Sassは、カラー関数を多数サポートしており、色を混ぜ合わせることやチャネル値を調整することで、既存の色に基づいて新しい色を作成するために使用できます。カラー関数を呼び出す際には、CSSと合わせるため、色空間は常に引用符なしの文字列で記述し、チャネル名は引用符付きの文字列で記述する必要があります。これにより、"red"
などのチャネルが色値として解析されるのを防ぎます。
💡豆知識
Sassのカラー関数は、色空間間で自動的に色を変換できるため、Oklchなどの知覚的に均一な色空間で変換を行うのが容易になります。ただし、color.to-space()
を明示的に呼び出して変換しない限り、常に指定したのと同じ色空間で色が返されます。
SCSS構文
@use 'sass:color';
$venus: #998099;
@debug color.scale($venus, $lightness: +15%, $space: oklch);
// rgb(170.1523703626, 144.612080603, 170.1172627174)
@debug color.mix($venus, midnightblue, $method: oklch);
// rgb(95.9363315581, 74.5687109346, 133.2082569526)
Sass構文
@use 'sass:color'
$venus: #998099
@debug color.scale($venus, $lightness: +15%, $space: oklch)
// rgb(170.1523703626, 144.612080603, 170.1172627174)
@debug color.mix($venus, midnightblue, $method: oklch)
// rgb(95.9363315581, 74.5687109346, 133.2082569526)