CSSで「その他」のカラー値「lab」を使いこなす!詳細解説とサンプルコード


Lab 色空間とは?

Lab 色空間は、**CIE(国際照明委員会)**によって定義された色空間で、人間の目の感度を考慮して設計されています。具体的には、以下の3つの要素で構成されます。

  • b: 青黄軸(Blue-Yellow axis) - 青(+b)と黄(-b)の度合いを表す値です。
  • a: 赤緑軸(Red-Green axis) - 赤(+a)と緑(-a)の度合いを表す値です。
  • L: 明度(Lightness) - 白と黒の度合いを表す値で、0が黒、100が白となります。

これらの3つの値を組み合わせることで、人間が認識できる全ての色を表現することができます。

lab()関数の書式

lab()関数は、以下の形式で記述されます。

lab(L, a, b)
  • b: 青黄軸(-128~128)
  • a: 赤緑軸(-128~128)
  • L: 明度(0~100)

各値は、小数点を含む数値で指定できます。

以下のコードは、明度50%、赤緑軸50%、青黄軸50%の色を指定します。

p {
  color: lab(50, 50, 50);
}

この色は、中程度の明るさのグレーとなります。

lab()関数の利点

lab()関数を使用する利点は、以下の通りです。

  • 幅広い色域を表現できる: Lab 色空間は、人間の目に見える全ての色を表現することができます。
  • 色の明るさや彩度を操作しやすい: L、a、bそれぞれの値を調整することで、色の明るさや彩度を個別に操作することができます。
  • 人間の知覚に近い色を表現できる: Lab 色空間は人間の目の感度を考慮して設計されているため、他の色空間よりも自然な色表現が可能となります。

lab()関数の注意点

lab()関数を使用する際の注意点としては、以下の点が挙げられます。

  • 色の見え方がデバイスによって異なる: Lab 色空間はデバイスの色再現能力に依存するため、異なるデバイスで表示すると色が異なって見える場合があります。
  • すべてのブラウザでサポートされているわけではない: lab()関数は比較的新しい機能であり、すべてのブラウザでサポートされているわけではありません。古いブラウザでは、別の色空間で指定する必要があります。


基本的な例

以下のコードは、様々な明度、赤緑軸、青黄軸の値を設定することで、様々な色を生成します。

.example {
  display: flex;
  flex-wrap: wrap;
}

.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  border: 1px solid black;
}

.box1 {
  background-color: lab(10, 50, 50); /* 明るいグレー */
}

.box2 {
  background-color: lab(50, 100, 0); /* 緑 */
}

.box3 {
  background-color: lab(70, -50, -50); /* 青紫 */
}

.box4 {
  background-color: lab(90, 0, 100); /* ピンク */
}

色の明るさを調整する

以下のコードは、L値を変更することで、同じ色合いながら異なる明るさのバリエーションを作成します。

.example {
  display: flex;
  flex-wrap: wrap;
}

.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  border: 1px solid black;
}

.box1 {
  background-color: lab(20, 50, 50);
}

.box2 {
  background-color: lab(40, 50, 50);
}

.box3 {
  background-color: lab(60, 50, 50);
}

.box4 {
  background-color: lab(80, 50, 50);
}

色の彩度を調整する

以下のコードは、a値とb値を変更することで、同じ色相ながら異なる彩度のバリエーションを作成します。

.example {
  display: flex;
  flex-wrap: wrap;
}

.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  border: 1px solid black;
}

.box1 {
  background-color: lab(50, 20, 20); /* 落ち着いた赤 */
}

.box2 {
  background-color: lab(50, 50, 50); /* 中程度の赤 */
}

.box3 {
  background-color: lab(50, 80, 80); /* 鮮やかな赤 */
}

Lab 色空間と他の色空間の変換

lab()関数と併用することで、他の色空間(RGB、HSLなど)からLab 色空間への変換、またはLab 色空間から他の色空間への変換を行うことができます。

例:RGB 色空間から Lab 色空間への変換

以下のコードは、RGB値をlab()関数に渡して、Lab 色空間に変換します。

.example {
  background-color: rgb(255, 0, 0); /* 赤 */
}

.lab-value {
  display: block;
  margin-top: 10px;
}

.lab-value::after {
  content: attr(data-lab);
}
const element = document.querySelector('.example');
const labValueElement = document.querySelector('.lab-value');

const rgb = getRGB(element);
const lab = rgbToLab(rgb);

labValueElement.setAttribute('data-lab', `lab(${lab.L}, ${lab.a}, ${lab.b})`);

このコードは、.example要素の背景色を赤色に設定し、.lab-value要素にlab()関数で計算されたLab 色空間の値を表示します。

  • 上記のコードはあくまで例であり、実際の用途に合わせて調整する必要があります。


代替方法

lab()関数の代替方法としては、以下の3つが挙げられます。

  1. 他の色空間を使用する
  2. JavaScriptライブラリを使用する
  3. プリプロセッサを使用する

他の色空間を使用する

最も簡単な代替方法は、lab()関数ではなく、他の色空間(RGB、HSL、CMYKなど)を使用して色を指定することです。これらの色空間は、すべてのブラウザで広くサポートされています。

.example {
  background-color: #FF0000; /* 赤 */
}

上記は、RGB値を使用して赤色を指定する例です。

JavaScriptライブラリを使用する

JavaScriptライブラリを使用して、lab()値を他の色空間に変換することができます。これにより、古いブラウザでもlab()関数と同様の色を表現することができます。

いくつかの人気のあるJavaScriptライブラリを以下に紹介します。

これらのライブラリは、npmyarnなどのパッケージマネージャーを使用してインストールできます。

例:PostCSSを使用してLab値をRGB値に変換する

/* style.css */
.example {
  background-color: lab(50, 50, 50);
}
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-lab-color')({
      target: 'rgb', // 変換先のカラー空間
    }),
  ],
};
// script.js
const css = require('fs').readFileSync('style.css', 'utf8');
const transformedCSS = postcss().use(require('postcss-lab-color')({ target: 'rgb' })).process(css).css;
console.log(transformedCSS);

この例では、postcss-lab-colorというPostCSSプラグインを使用して、lab()値をRGB値に変換しています。

プリプロセッサを使用する

プリプロセッサを使用して、lab()値を他の色空間に変換することもできます。プリプロセッサは、CSSをより書きやすく、保守しやすいようにするツールです。

いくつかの人気のあるプリプロセッサを以下に紹介します。

これらのプリプロセッサは、npmyarnなどのパッケージマネージャーを使用してインストールできます。

例:Sassを使用してLab値をRGB値に変換する

// style.scss
.example {
  background-color: lab(50, 50, 50);
}

.example {
  background-color: #{lab-to-rgb(50, 50, 50)};
}

この例では、Sassのlab-to-rgb()関数を使用して、lab()値をRGB値に変換しています。

lab()関数は、人間の知覚に近い方法で色を表現できる便利な機能ですが、すべてのブラウザでサポートされているわけではありません。代替手段としては、他の色空間を使用する、JavaScriptライブラリを使用する、プリプロセッサを使用するなどの方法があります。

どの代替方法を選択するかは、プロジェクトの要件や開発者のスキルによって異なります。

  • Stylus - Stylus
  • Less - Less
  • Sass - Sass
  • PostCSS - PostCSS