mask-image
Baseline
2023
Newly available
Since December 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die mask-image CSS Eigenschaft legt das Bild fest, das als Maskenebene für ein Element verwendet wird. Dabei werden Abschnitte des Elements ausgeblendet, auf dem das Maskenbild basierend auf dem Alphakanal des Maskenbildes und, abhängig vom Wert der mask-mode Eigenschaft, der Luminanz der Farben des Maskenbildes gesetzt ist.
Syntax
/* Keyword value */
mask-image: none;
/* <mask-source> value */
mask-image: url("masks.svg#mask1");
/* <image> values */
mask-image: linear-gradient(black, transparent);
mask-image: image(url("mask.png"), skyblue);
/* Multiple values */
mask-image: url("mask.png"), linear-gradient(black 25%, transparent 35%);
/* Global values */
mask-image: inherit;
mask-image: initial;
mask-image: revert;
mask-image: revert-layer;
mask-image: unset;
Werte
none-
Dieses Schlüsselwort wird als transparente schwarze Bildebene interpretiert.
<mask-source><image>-
Ein Bildwert, der als Maskenbildschicht verwendet wird.
Beschreibung
Die mask-image Eigenschaft bietet eine Maske, die einen Teil des Elements verbirgt, auf das sie angewendet wird. Der Wert ist eine kommagetrennte Liste von Maskenverweisen. Jeder Maskenverweis ist ein <image>, ein <mask-source> oder das Schlüsselwort none.
Ein <image> kann jeder Bildtyp sein, einschließlich generierter Bilder wie CSS-Verläufe.
Wenn nur ein Wert in der mask-image Eigenschaft angegeben ist und dieser Wert none ist, wird kein Maskeneffekt sichtbar sein. Wenn mehrere Werte angegeben sind, kann ein none Wert in der Liste keinen direkten Effekt haben, jedoch werden andere mask-* Werte in derselben Listenposition auf eine transparente schwarze Maskenebene angewendet und haben keinen visuellen Effekt.
Nur Bildquellen, die über HTTP- und HTTPS-Protokolle bereitgestellt werden, werden aufgrund der CORS Richtlinie als <image> Werte akzeptiert. Lokal bereitgestellte, einschließlich relativer oder absoluter file:// Protokolle, werden nicht akzeptiert und als transparentes Schwarz gerendert. Um URL-Bildquellen lokal zu testen, richten Sie einen lokalen Server ein.
Eine Maske wird in den folgenden Fällen als transparente schwarze Bildebene betrachtet, die nichts enthüllt:
- Das Maskenbild ist leer (null Breite oder null Höhe).
- Das Maskenbild kann nicht heruntergeladen werden.
- Der Browser unterstützt das Maskenbildformat nicht.
- Das Maskenbild existiert nicht.
- Der Maskenwert zeigt nicht auf ein Maskenbild.
Der Standardwert der mask-mode Eigenschaft ist match-source, was bedeutet, dass der Modus durch den Modus des Maskenbildes selbst definiert wird. Der Modus des Maskenbildes ist im Allgemeinen alpha, außer wenn die Maskenquelle ein SVG <mask> Element ist, in welchem Fall der Modus luminance ist, es sei denn, der Modus wird durch die CSS mask-type Eigenschaft oder das SVG mask-type Attribut auf alpha geändert.
Der Wert mask-mode ist signifikant, da er bestimmt, ob der Maskeneffekt allein von den Alphakanalwerten der Bildquelle abhängt oder von einer Kombination dieser und der Luminanz der Maske (die Helligkeit/Dunkelheit der Farben, die das mask-image bilden):
- In allen Fällen zählt die Alphatransparenz der Maske; Bereiche des Elements, die von undurchsichtigen Abschnitten des
mask-imagemaskiert werden, werden gerendert, während Bereiche, die von transparenten Bildabschnitten maskiert werden, verborgen bleiben. - Wenn der Wert
mask-modeeingestellt oder aufalphaaufgelöst wird, zählen nur der Alphakanal der Farben; der Farbton, die Lichtstärke usw. spielen keine Rolle. - Wenn die
mask-modeEigenschaft aufluminancegesetzt oder standardmäßigluminanceist, ist der Maskierungswert der Luminanzwert jeder Farbe multipliziert mit ihrem Alphawert. Diemask-modewird aufluminanceaufgelöst, wenn sie explizit auf diesen Wert gesetzt ist oder wenn die Eigenschaft aufmatch-sourcegesetzt ist und diemask-imageQuelle ein SVG<mask>ist, das nicht explizit seinemask-typeEigenschaft oder dasmask-typeAttribut aufalphagesetzt hat.
Formale Definition
| Anfangswert | none |
|---|---|
| Anwendbar auf | alle Elemente; In SVG gilt betrifft dies Containerelemente mit Ausnahme des <defs> Elements und allen Grafikelementen |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben, aber mit absoluten <url> Werten |
| Animationstyp | diskret |
Formale Syntax
mask-image =
<mask-reference>#
<mask-reference> =
none |
<image> |
<mask-source>
<image> =
<url> |
<image()> |
<image-set()> |
<cross-fade()> |
<element()> |
<gradient>
<mask-source> =
<url>
<image()> =
image( <image-tags>? [ <image-src>? , <color>? ]! )
<image-set()> =
image-set( <image-set-option># )
<cross-fade()> =
cross-fade( <cf-image># )
<element()> =
element( <id-selector> )
<image-tags> =
ltr |
rtl
<image-src> =
<url> |
<string>
<image-set-option> =
[ <image> | <string> ] [ <resolution> || type( <string> ) ]?
<cf-image> =
[ <image> | <color> ] &&
<percentage [0,100]>?
<id-selector> =
<hash-token>
Beispiele
>Verlauf als Maskenbild
In diesem Beispiel verwenden wir einen <image> Wert als Maske, indem wir einen CSS radialen Verlauf als unser Maskenbild definieren, um ein rundes Bild mit einem weichen Rand zu erstellen.
HTML
Wir fügen ein HTML <img> Element ein, das auch in allen anderen Beispielen verwendet wird.
<img
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
CSS
Wir verwenden die CSS radial-gradient() Funktion, um eine Maske zu erstellen, die einen schwarzen Kreis mit einem Radius hat, der halb so breit ist wie die Maske, bevor sie über 10% transparent wird.
img {
mask-image: radial-gradient(black 50%, transparent 60%);
}
Ergebnisse
Der Teil des ursprünglichen Elements, der durch den schwarzen Kreis maskiert wird, ist vollständig undurchsichtig und wird transparent, während die Maske transparent wird.
Bildressource als Maskenbild
In diesem Beispiel ist die <mask-source>, die wir als unser Maskenbild verwenden, eine externe SVG.
HTML
Wir fügen dasselbe Bild wie im vorherigen Beispiel ein. Wir haben auch das Bild eingefügt, das wir als Maske verwenden werden; ein Stern, dessen fill-opacity 0.5 beträgt, also 50% undurchsichtig ist.
<img
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<img
src="https://mdn.github.io/shared-assets/images/examples/mask-star.svg"
alt="A star" />
CSS
Wir verwenden mask-star.svg als Maskenbild auf unserem ersten Bild:
img:first-of-type {
mask-image: url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg");
}
Ergebnisse
Die Maske ist halb undurchsichtig, weshalb die Farben nicht so lebendig sind wie im vorherigen Beispiel. Der sichtbare Teil des Bildes ist 50% undurchsichtig; die Opazität der angewendeten Maske. Die Maske ist kleiner als das Bild, daher wird sie standardmäßig wiederholt. Wir hätten mask-repeat verwenden können, um das Wiederholen zu steuern, oder mask-size, um die Größe der Maske zu ändern, was wir im nächsten Beispiel tun.
Mehrere Masken
Dieses Beispiel demonstriert die Anwendung mehrerer Masken.
CSS
Wir wenden zwei Masken an — dieselbe halbtransparente SVG wie im vorherigen Beispiel und einen repeating-radial-gradient(). Wir steuern die Größe der Masken mit der mask-size Eigenschaft. Da unsere erste Maske nicht in 100% Größe ist, stellen wir mit den Eigenschaften mask-position und mask-repeat sicher, dass unsere Masken zentriert sind und sich nicht wiederholen.
img {
mask-size: 95%, 100%;
mask-position: center;
mask-repeat: no-repeat;
mask-image:
url("https://mdn.github.io/shared-assets/images/examples/mask-star.svg"),
repeating-radial-gradient(transparent 0 5px, black 5px 10px);
}
Ergebnisse
Maskierung mit SVG <mask>
Dieses Beispiel demonstriert die Verwendung von SVG <mask> Elementen als Masken. In diesem Fall zählt die Farbe der Maske, da der mask-type Wert für SVG-Masken standardmäßig auf luminance gesetzt ist, was bedeutet, dass weiße undurchsichtige Bereiche (100% Luminanz) maskiert und sichtbar sind, transparente und schwarze Bereiche (0% Luminanz) abgeschnitten werden und alles dazwischen teilweise maskiert wird.
HTML
Wir haben für jedes unserer vier Bilder eine id hinzugefügt und eine SVG, die eine gleich Anzahl von <mask> Elementen enthält.
<img
id="green"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<img
id="stroke"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<img
id="both"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<img
id="alphaMode"
src="https://mdn.github.io/shared-assets/images/examples/progress-pride-flag.jpg"
alt="Pride flag" />
<svg height="0" width="0">
<mask id="greenMask">
<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" />
</mask>
<mask id="strokeMask">
<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="none"
stroke="white"
stroke-width="20" />
</mask>
<mask id="bothMask">
<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" />
</mask>
<mask id="black">
<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="black" />
</mask>
</svg>
CSS
Wir wenden eine andere <mask> auf jede <img> an. Keiner der Teile des letzten Bildes mit der black Füllung wird standardmäßig sichtbar sein. In diesem Fall sind alle in diesem Beispiel verwendeten Farben vollständig undurchsichtig, der mask-mode standardmäßig match-type, der in diesem Fall auf luminance aufgelöst wird.
#green {
mask-image: url("#greenMask");
}
#stroke {
mask-image: url("#strokeMask");
}
#both {
mask-image: url("#bothMask");
}
#alphaMode {
mask-image: url("#black");
}
body:has(:checked) img {
mask-mode: alpha;
}
Die Luminanzwerte von black, white und green sind 0, 100 und 46.228, jeweils. Das bedeutet, dass die Bereiche, in denen die Maske weiß ist, sichtbar sein werden, während Bereiche, in denen die Maske schwarz oder vollständig transparent ist, abgeschnitten werden (nicht sichtbar). Bereiche, in denen die Maske grün ist, sind sichtbar, aber heller, gleichbedeutend mit einer weißen Maske, die 46.228% undurchsichtig ist.
Ergebnisse
Aktivieren Sie das Kontrollkästchen, um den Wert des mask-mode zwischen alpha (aktiviert) und dem Anfangswert umzuschalten, der sich auf luminance (deaktiviert) auflöst. Wenn alpha verwendet wird, spielt die Farbe der Maske keine Rolle; alles, was zählt, ist die Alphatransparenz. Wenn der Wert auf luminance aufgelöst wird, sind white Bereiche sichtbar, black Bereiche nicht, und green Bereiche sind sichtbar, aber mit einer Opazität, die der Luminanz der Farbe green entspricht. Wenn mask-mode auf alpha gesetzt ist, sind die Farben gleichwertig, da sie alle vollständig undurchsichtig sind.
Spezifikationen
| Specification |
|---|
| CSS Masking Module Level 1> # the-mask-image> |