CSSのグラデーションはRGBだと汚く、oklchはきれいに表示される

RGBだと汚く、oklchはきれい

CSSのグラデーションはRGBだと汚く、oklchではきれいに表示されます。

以下の例のようにRGBとoklchのグラデーションで見比べると一目瞭然です。

CSS
.gradient {
  background: linear-gradient(to right, #0000ff, #00ff00);
}

.oklchGradient {
  background: linear-gradient(
    to right,
    oklch(0.45 0.31 264.05),
    oklch(0.87 0.29 142.49)
  );
}
HTML
<h3 class="title">RGB グラデーション (青から緑)</h3>
<div class="bar gradient"></div>

<h3 class="title">oklch グラデーション (青から緑)</h3>
<div class="bar oklchGradient"></div>

RGB グラデーション (青から緑)

oklch グラデーション (青から緑)

oklchとは

oklchはCSSで使える色の表現方法のひとつで、より自然で直感的な色の制御が可能になる最新のカラー表現フォーマットです。

okは(オーケー)でlchはlightness (明るさ)、chroma (彩度)、hue (色相)を意味します。

詳しくは考案者のBjørn Ottossonさんの過去のインタビューに書かれています。

oklchならより自然で直感的な色の制御ができるので、tailwindcssのColorsにも採用されています。

なぜRGBのグラデーションは汚いのか

RGBのグラデーションが汚い理由は、2つの色の中間でグレーのデッドゾーンを通るからです。

例えばRGBの青 rgb(0, 0, 255) と 緑 (0, 255, 0) の中間は rgb(0, 127, 127) のくすんだ緑色なので、RGBのグラデーションだと画面上に rgb(0, 127, 127) の色が表示されて汚く見えてしまうのです。

Why use this gradient generator?

参考: Why use this gradient generator?

RGB グラデーション (青から緑)

rgb(0, 127, 127)

oklch グラデーション (青から緑)

RGBの値からoklchの値を知るには

Chromeデベロッパーツールでは16進数のRGB値をoklchの値に変換できます。

oklchはFigmaでは使用不可

2025年4月7日現在はFigmaでoklchの値を設定することができません。

そのため、Gradient Generatorを使用して分割したグラデーションにRGB値を設定して、擬似的にoklchのグラデーションのようにする必要があります。

CSS
.oklchGradient {
  background: linear-gradient(
    to right,
    oklch(0.45 0.31 264.05),
    oklch(0.87 0.29 142.49)
  );
}

.pseudoGradient {
  background: linear-gradient(
    to right,
    #0000ff,
    #0056ff,
    #0085ff,
    #00abf1,
    #00cad3,
    #00e2ab,
    #00f476,
    #00ff00
  );
}

oklch グラデーション (青から緑)

疑似oklch グラデーション (青から緑)

カテゴリーcss