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つが挙げられます。
- 他の色空間を使用する
- JavaScriptライブラリを使用する
- プリプロセッサを使用する
他の色空間を使用する
最も簡単な代替方法は、lab()
関数ではなく、他の色空間(RGB、HSL、CMYKなど)を使用して色を指定することです。これらの色空間は、すべてのブラウザで広くサポートされています。
.example {
background-color: #FF0000; /* 赤 */
}
上記は、RGB値を使用して赤色を指定する例です。
JavaScriptライブラリを使用する
JavaScriptライブラリを使用して、lab()
値を他の色空間に変換することができます。これにより、古いブラウザでもlab()
関数と同様の色を表現することができます。
いくつかの人気のあるJavaScriptライブラリを以下に紹介します。
これらのライブラリは、npm
やyarn
などのパッケージマネージャーを使用してインストールできます。
例: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をより書きやすく、保守しやすいようにするツールです。
いくつかの人気のあるプリプロセッサを以下に紹介します。
これらのプリプロセッサは、npm
やyarn
などのパッケージマネージャーを使用してインストールできます。
例: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