CSS <blend-mode> データ型
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2020年1月.
<blend-mode> は CSS のデータ型で、要素が重なったときにどのように色が現れるかを記述します。background-blend-mode および mix-blend-mode プロパティで使用されます。
構文
<blend-mode> データ型は、以下に挙げたキーワードのうちの一つで定義します。
値
normal-
下の色が何であるかに関わらず、上の色が最終的な色になります。 この効果は 2 枚の不透明の紙が重なっているようなものです。
multiply-
上の色と下の色を掛け合わせた結果が最終的な色になります。 黒いレイヤーは最終的に黒いレイヤーになり、白いレイヤーは変化をもたらしません。 この効果は 2 枚の透明なフィルムに印刷された画像を重ね合わせたようなものです。
screen-
色を反転して乗算を行い、さらに色を反転した結果が最終的な色になります。 黒いレイヤーは変化をもたらしません。白いレイヤーは、最終的に白いのレイヤーへ近づけます。 この効果は 2 枚の画像が画面に投影された状況に似ています。
overlay-
下の色が暗ければ
multiply、下の色が明るければscreenの結果が最終的な色になります。 この混合モードはhard-lightと同等ですが、レイヤーは逆です。 darken-
色成分ごとに最も暗い値が最終的な値になります。
lighten-
色成分ごとに最も明るい値が最終的な値になります。
color-dodge-
下の色を、反転した上の色で除算した結果が、最終的な色になります。 黒い前景は変化をもたらしません。背景色を反転した色を持つ前景は、完全に明るい色に導きます。 この混合モードは
screenに似ていますが、明るさが最大の色を生成するには、背景色を背景色を反転した色と同程度の明るさの前景色が必要です。 color-burn-
反転した下の色を上の色で除算して、さらに反転した結果が最終的な色になります。 白い背景は変化をもたらしません。背景色を反転した色を持つ前景は、最終的に黒い画像へ近づけます。 この混合モードは
multiplyに似ていますが、最終的に画像を黒くするためには、背景色を反転した色と同程度の暗さの前景色が必要です。 hard-light-
上の色が暗い色であれば
multiply、明るい色であればscreenの結果が最終的な色になります。 この混合モードはoverlayと同じですが、レイヤーが入れ替わっています。 この効果は、背景に強烈なスポットライトを当てた状況に似ています。 soft-light-
最終的な色は
hard-lightに似ていますが、よりソフトになります。 この混合モードはhard-lightに似ています。 この効果は、背景に拡散光のスポットライトを当てた状況に似ています。 difference-
2 つの色のうち明るい色から、暗い色を減算した結果が最終的な色になります。 黒いレイヤーは変化をもたらしません。白いレイヤーは、もうひとつのレイヤーの色を反転します。
exclusion-
最終的な色は
differenceに似ていますが、コントラストが低くなります。differenceと同様に、黒いレイヤーは変化をもたらしません。白いレイヤーは、もうひとつのレイヤーの色を反転します。 hue-
最終的な色は上の色の色相を持ちますが、彩度および明度は下の色の値を使用します。
saturation-
最終的な色は上の色の彩度を持ちますが、色相および明度は下の色の値を使用します。 彩度を持たない純粋なグレーの背景は、効果がありません。
color-
最終的な色は上の色の色相および彩度を持ちますが、明度は下の色の値を使用します。 この効果はグレーレベルを保持しており、前景に色をつけるために使用できます。
luminosity-
最終的な色は上の色の明度を持ちますが、色相および 彩度は下の色の値を使用します。 この混合モードは
colorと同じですが、レイヤーが入れ替わっています。
解説
混合モードは、適用されるレイヤー間のそれぞれのピクセルにおいて前景色と背景色を取り、計算を行い、新しい色の値を返します。
混合モード同士の変化は補完されません。すべての変更が直接反映されます。
形式文法
<blend-mode> =
normal |
darken |
multiply |
color-burn |
lighten |
screen |
color-dodge |
overlay |
soft-light |
hard-light |
difference |
exclusion |
hue |
saturation |
color |
luminosity
例
>"normal" の使用例
#div {
width: 150px;
height: 150px;
background: url("br.png"), url("tr.png");
background-blend-mode: normal;
}
background-blend-mode に他の値を設定すると、異なる結果が得られます。
background-blend-mode の様々な値の比較
.container {
width: 720px;
height: 760px;
display: grid;
grid: auto-flow 190px / repeat(4, 180px);
border-top: 1px solid #d8d8d8;
border-left: 1px solid #d8d8d8;
}
.container > div {
border-right: 1px solid #d8d8d8;
border-bottom: 1px solid #d8d8d8;
}
.container div div {
margin-left: 15px;
width: 150px;
height: 150px;
background: url("br.png"), url("tr.png");
}
.container div p {
line-height: 30px;
margin: 0;
color: #a33333;
text-align: center;
}
const list = [
"normal",
"multiply",
"screen",
"overlay",
"darken",
"lighten",
"color-dodge",
"color-burn",
"hard-light",
"soft-light",
"difference",
"exclusion",
"hue",
"saturation",
"color",
"luminosity",
];
const containerElem = document.querySelector(".container");
list.forEach((item) => {
const innerElem = document.createElement("div");
innerElem.style.backgroundBlendMode = item;
const textElem = document.createElement("p");
textElem.innerText = item;
const outerElem = document.createElement("div");
outerElem.appendChild(textElem);
outerElem.appendChild(innerElem);
containerElem.appendChild(outerElem);
});
リストを走査して複数の div 要素を生成し、それぞれの backgroundBlendMode の値を異なる値に設定します。
mix-blend-mode の様々な値の比較
次の例では、リストを走査して複数の <div> 要素を作成し、それぞれの mixBlendMode の値を異なる値で設定します。
混合モードの比較
次の例の <div> には、 Firefox のロゴと線形グラデーションの 2 つの背景画像を設定してあります。その下に <select> メニューがあって background-blend-mode を変更することができ、それが <div> に適用されますので、様々な混合モードの効果を比較することができます。
HTML
<div></div>
<p>混合モードを選択してください。</p>
<select>
<option selected>normal</option>
<option>multiply</option>
<option>screen</option>
<option>overlay</option>
<option>darken</option>
<option>lighten</option>
<option>color-dodge</option>
<option>color-burn</option>
<option>hard-light</option>
<option>soft-light</option>
<option>difference</option>
<option>exclusion</option>
<option>hue</option>
<option>saturation</option>
<option>color</option>
<option>luminosity</option>
</select>
CSS
div {
width: 300px;
height: 300px;
background:
url("https://mdn.dev/archives/media/attachments/2020/07/29/17350/3b4892b7e820122ac6dd7678891d4507/firefox.png")
no-repeat center,
linear-gradient(to bottom, blue, orange);
}
JavaScript
const selectElem = document.querySelector("select");
const divElem = document.querySelector("div");
selectElem.addEventListener("change", () => {
divElem.style.backgroundBlendMode = selectElem.value;
});
結果
仕様書
| Specification |
|---|
| Compositing and Blending Module Level 2> # ltblendmodegt> |
ブラウザーの互換性
関連情報
- CSS 合成と混合モジュールで、
<blend-mode>の値を定義しています。 - このデータ型を使用するプロパティ:
background-blend-mode,mix-blend-mode
様々な混合モードの他のウェブサイトにおける解説:
- ブレンドモード(ウィキペディア)
- Adobe Photoshop における描画モード (Adobe)