mask-type
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月.
mask-type は CSS のプロパティで、 SVG の <mask> 要素に適用されます。これは、マスクの輝度(明度)またはアルファ (透過率) のどちらのコンテンツを使用するかを定義します。このプロパティは、mask-mode プロパティによって上書きされる場合があります。 mask-type プロパティは、画像マスクやグラデーションマスクには効果はありません。
構文
/* キーワード値 */
mask-type: luminance;
mask-type: alpha;
/* グローバル値 */
mask-type: inherit;
mask-type: initial;
mask-type: revert;
mask-type: revert-layer;
mask-type: unset;
値
解説
mask-type プロパティは、 SVG の <mask> 要素にのみ関連します。 mask-type: luminance を設定すると、マスクはマスクの各部分の明るさを使用します。 mask-type: alpha を設定すると、マスクの各部分の透明度または不透明度を使用します。
既定の動作
既定では、 SVG の <mask> 要素は mask-type: luminance を使用します。これは、マスクコンテンツの色と透過率の両方がマスクに影響することを意味しています。マスクが部分的に不透明になるかどうかは、不透明領域の色の明度によって決まります。
- 完全に不透明な白色領域(輝度 100%)はマスクされ、表示されます。
- 黒(輝度 0%)または完全に透明な領域は切り取られ、表示されません。
- 輝度の値が中間である領域は、マスクの色である輝度と、マスクの各領域のアルファ透過率の両方を反映して、部分的にマスクされます。
輝度を理解する
luminance マスクの不透明度は、次の式を使用して rgb() 色の R、G、B、および A の値によって決定されます。
((0.2125 * R) + (0.7154 * G) + (0.0721 * B)) * A
例えば、色 green (#008000 または rgb(0% 50% 0% / 1))の輝度値は 35.77% です。単色の green の輝度マスクでマスクされた領域は、35.77% で表示されます。mask-type が alpha に設定されている場合、同じ完全不透明の green 色でマスクされた領域は 100% 表示されます。
SVG の <mask> 要素に、50% 透明の黒である fill="rgb(0 0 0 / 0.5)" が指定されている場合、 mask-type が alpha に設定されていると、アルファ値が 0.5 (不透明度 50%)であるため、マスクされた要素上の対応する図形は不透明度 50% で表示されます。しかし、mask-type の既定値または luminance に設定されている場合、マスクされた領域は輝度が 0 であるため、完全に切り取られ、表示されません。
mask-mode の mask-type における効果
mask-type プロパティが SVG の <mask> 要素に設定されている場合、mask-mode プロパティは、マスクされる要素(マスクを適用する要素)に設定されます。
マスク画像のソースが SVG の <mask> でない場合、このプロパティは効果はありません。
mask-mode の既定値は match-source です。これは、ブラウザーが <mask> 要素の mask-type 値を使用して、それをどのように解釈するかを決定することを意味します。mask-mode が match-source 以外の値に設定されている場合、その値が優先され、適用されたマスクの mask-type 値を上書きします。
<mask> がマスク画像のソースとして定義されており、 mask-mode が match-source に設定されているか、または既定値である場合、 mask-mode は <mask> 要素の mask-type 値(luminance または alpha)に解決されます。明示的に設定されていない場合、値は既定の luminance になります。
公式定義
| 初期値 | luminance |
|---|---|
| 適用対象 | <mask> 要素 |
| 継承 | なし |
| 計算値 | 指定通り |
| アニメーションの種類 | 離散値 |
形式文法
mask-type =
luminance |
alpha
例
>mask-type プロパティの使用
この例では、 mask-type プロパティの使用方法と、そのさまざまな値の効果について説明します。
HTML
マスクされる 2 つの画像が設置されています。2 つの画像は、クラス名以外はまったく同じです。
また、2 つの <mask> 要素を含む SVG も含まれています。2 つのマスクは、id 値以外はまったく同じです。それぞれのマスクは、緑と白のハート形と、半透明の白と黒で塗りつぶされた円から構成されています。
<img
class="alphaMaskType"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<img
class="luminanceMaskType"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<svg height="0" width="0">
<mask id="alphaMask">
<path
d="M20,70 A40,40,0,0,1,100,70 A40,40,0,0,1,180,70 Q180,130,100,190 Q20,130,20,70 Z"
fill="green"
stroke="white"
stroke-width="20" />
<circle
cx="170"
cy="170"
r="40"
fill="rgb(0 0 0 / 0.5)"
stroke="rgb(255 255 255 / 0.5)"
stroke-width="20" />
</mask>
<mask id="luminanceMask">
<path
d="M20,70 A40,40,0,0,1,100,70 A40,40,0,0,1,180,70 Q180,130,100,190 Q20,130,20,70 Z"
fill="green"
stroke="white"
stroke-width="20" />
<circle
cx="170"
cy="170"
r="40"
fill="rgb(0 0 0 / 0.5)"
stroke="rgb(255 255 255 / 0.5)"
stroke-width="20" />
</mask>
</svg>
CSS
mask-type プロパティを <mask> 要素に適用し、次に <mask> 要素とマスクソースを画像に適用します。
mask#alphaMask {
mask-type: alpha;
}
mask#luminanceMask {
mask-type: luminance;
}
img.alphaMaskType {
mask-image: url(#alphaMask);
}
img.luminanceMaskType {
mask-image: url(#luminanceMask);
}
結果
mask-mode プロパティの既定値は match-source であるため、最初のマスクはアルファチャンネルのみを使用してマスクを定義しています。白と緑は完全に不透明であり、 50% の白と黒の色は、色のアルファ値のみが重要であるため、50% 不透明です。2 つ目の例では、色の輝度を使用してマスクの不透明度を決定しています。白は緑よりも明るく、半透明の白は半透明の黒よりも明るくなります。
仕様書
| Specification |
|---|
| CSS Masking Module Level 1> # the-mask-type> |
ブラウザーの互換性
Loading…