mask-compositeプロパティは、複数マスクの合成方法を指定する際に使用します。
mask-imageプロパティの値にカンマ区切りで複数のマスクレイヤーイメージを指定した場合、重なった複数のマスクがどのように合成されるかについて mask-compositeプロパティの値で指定し分けることができます。
このページ内のサンプルでは、マスクレイヤーとして以下の20×20ピクセルの黒丸画像、および、200×200ピクセルのハート画像の2枚を使用します。
いずれも黒丸とハートの図形部分以外は透明にしてあります。
マスク処理対象となる要素は、以下の200×200ピクセルの画像です。
■値
- add
- 結合 … 現在マスクを下層マスクの上に重ねて合体(初期値)
- subtract
- 型抜き … 現在マスクで下層マスクを型抜き
- intersect
- 交差 … 現在マスクと下層マスクが重なった部分だけがマスクとなる
- exclude
- 除外 … 現在マスクと下層マスクが重ならない部分をペイントする
※W3Cサイトに掲載されている以下の図が分かりやすいでしょう。
※この例の場合、circle.svgが上層レイヤー、rect.svgが下層レイヤーとなります。
■初期値・適用対象・値の継承
- 初期値
- add
- 適用対象
- すべての要素。 SVGでは、defs要素とすべてのグラフィックス要素を除くコンテナ要素に適用される
- 値の継承
- しない
■使用例
CSSソースは外部ファイル(sample.css)に記述
img.sample0 {
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
}
img.sample1 {
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: add;
}
img.sample2 {
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: subtract;
}
img.sample3 {
mask-image: url(‘images/heart.png’), url(‘images/maru20.png’);
mask-composite: subtract;
}
img.sample4 {
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: intersect;
}
img.sample5 {
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: exclude;
}
HTMLソース
<p>
mask-compositeプロパティの指定なし<br>
<img class=”sample0″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: add; を指定<br>
<img class=”sample1″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: subtract; を指定<br>
<img class=”sample2″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/heart.png’), url(‘images/maru20.png’); ※これだけ順序が逆<br>
mask-composite: subtract; を指定<br>
<img class=”sample3″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: intersect; を指定<br>
<img class=”sample4″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: exclude; を指定<br>
<img class=”sample5″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
ブラウザ上の表示
mask-compositeプロパティの指定なし
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: add; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: subtract; を指定
mask-image: url(‘images/heart.png’), url(‘images/maru20.png’); ※これだけ順序が逆
mask-composite: subtract; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: intersect; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: exclude; を指定
■ベンダープレフィックスを付けた場合の使用例
CSSソースは外部ファイル(sample.css)に記述
img.prefix_sample0 {
-webkit-mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
}
img.prefix_sample1 {
-webkit-mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
-webkit-mask-composite: add;
}
img.prefix_sample2 {
-webkit-mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
-webkit-mask-composite: subtract;
}
img.prefix_sample3 {
-webkit-mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
-webkit-mask-composite: subtract;
}
img.prefix_sample4 {
-webkit-mask-image: url(‘images/heart.png’), url(‘images/maru20.png’);
-webkit-mask-composite: intersect;
}
img.prefix_sample5 {
-webkit-mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
-webkit-mask-composite: exclude;
}
HTMLソース
<p>
mask-compositeプロパティの指定なし<br>
<img class=”prefix_sample0″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: add; を指定<br>
<img class=”prefix_sample1″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: subtract; を指定<br>
<img class=”prefix_sample2″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/heart.png’), url(‘images/maru20.png’);<br>
mask-composite: subtract; を指定<br>
<img class=”prefix_sample3″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: intersect; を指定<br>
<img class=”prefix_sample4″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
<p>
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);<br>
mask-composite: exclude; を指定<br>
<img class=”prefix_sample5″ src=”https://htmqcom1.wpengine.com/wp-content/themes/twentytwentyone-child/htmq-images/uirou.png”>
</p>
ブラウザ上の表示
mask-compositeプロパティの指定なし
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: add; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: subtract; を指定
mask-image: url(‘images/heart.png’), url(‘images/maru20.png’);
mask-composite: subtract; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: intersect; を指定
mask-image: url(‘images/maru20.png’), url(‘images/heart.png’);
mask-composite: exclude; を指定