どうも!かけちまるです!
Adobe Photoshopなどのブレンドモード(乗算・スクリーン・オーバーレイなど)を表現できるmix-blend-mode
というCSSのプロパティがあります。
グラフィックツールの機能をWebでも表現できてとても便利なプロパティですが、要素がブレンドされる仕組みを知っておかないとmix-blend-mode
が効かない時に問題を解決できないかもしれません。
今回はmix-blend-mode
が効かない時にまず疑った方が良いであろうスタックコンテキストについて解説していきます。
この記事では、
がわかります。
スタックコンテキストとは、Webページ上で特定の条件を満たした要素によってZ軸に形成される階層構造のことです。
mix-blend-mode
では、ブレンドされる要素同士が同じスタックコンテキストに属している必要があります。
言葉だけだと理解しにくいと思います。
図を含めて解説しましょう。
まず、うまくいっている例から
以下のデモでは.wrapper
要素 > .inner
要素 > .box
要素の順で親子の関係になっています。
.wrapper
要素の背景画像を設定して、.box
要素とブレンドさせたい時は.box
要素にmix-blend-mode
を指定すればうまくいきます。
なぜなら同じスタックコンテキストに属しているからです。
一方でうまくいかない例がこちら
以下のデモは先程のデモと同様の構造で.inner
要素にtransform: skew(10deg);
を指定しています。
この場合は、.box
要素にmix-blend-mode
を指定してもうまくいきません。
なぜなら、.inner
要素がスタックコンテキストを形成して.wrapper
要素と.box
要素は同じスタックコンテキストに属していないからです。
transform
にnone
以外を指定するとスタックコンテキストが形成されます。
他にもスタックコンテキストを形成するCSSプロパティがあります。
position
で要素を中央に配置したい時にtransform: translate(-50%,-50%);
を活用するかたは多いと思います。
しかし、そのせいでmix-blend-mode
がうまくいかない場合は他の方法で中央に配置するようにしましょう。
実はposition
とmargin: auto;
でも要素を中央に配置することができるので試してみてください。
position
とmargin: auto;
を使って要素を中央に配置する方法は以下の記事で解説しています。
おわり
フィードバックを送信
記事についてのフィードバックはTwitterかお問い合わせフォームから受け付けております。