CSS-Maskierung
Optional Advanced hat gerade Zeitungsspalten gegossen. Diese Session ist ein anderes optionales Werkzeug: Maskierung. Du legst eine Schablone auf eine Box. Wo die Schablone voll ist, siehst du Foto oder Farbe. Wo sie leer ist, verschwindet die Box. Du zerteilst keinen Artikel in Ströme und schiebst keine Icon-Kacheln auf einem Sprite-Sheet.
Direkte Antwort
CSS-Maskierung blendet Teile eines Elements mit mask-image aus — PNG, SVG oder Verlauf. Denk an Sprühfarbe durch einen Ausschnitt. mask-size, mask-repeat und mask-position arbeiten wie die Hintergrund-Schicht: cover, no-repeat, center. mask-mode wählt Alpha (Transparenz der Maskendatei) oder Luminanz (hell gegen dunkel). Nutze eine Maske, wenn die Kante ausfaden soll. Nutze clip-path für einen harten Kreis oder ein Polygon. Labels und Buttons bleiben vollständig sichtbar.
Warum eine Maske keine Spalte und kein Sprite ist
Mehrspalten fragmentiert einen Textstrom. Ein Sprite-Sheet beschneidet eine Bitmap mit background-position, damit viele Icons eine Datei teilen. Eine Maske macht keines von beiden. Das Element behält seine Box. Layout-Breite und -Höhe schrumpfen nicht. Du änderst nur, welche Pixel dieser Box gemalt werden. Filter (blur(), grayscale()) ändern das Aussehen sichtbarer Pixel; eine Maske entscheidet, welche Pixel bleiben.
PNG als Schablone
mask-image nimmt url(...) wie background-image. Ein typisches Masken-PNG ist weiß (oder deckend), wo das Foto bleiben soll, und transparent, wo ein Loch sein soll:
.hero-photo {
width: 20rem;
height: 12rem;
background: url("/img/studio.jpg") center / cover no-repeat;
mask-image: url("/img/soft-blob.png");
mask-size: cover;
mask-repeat: no-repeat;
}
Das Foto bleibt Hintergrund (oder ein <img> mit derselben Maske). Das Blob-PNG ist nur die Schablone. Fehlt die Maskendatei, kann das ganze Element verschwinden — halte einen unmaskierten Fallback bereit oder teste die URL.
Verlauf zum Ausfaden
Du brauchst keine zweite Bilddatei. Eine Verlaufsmaske ist das alltägliche Fade am Kartenfuß:
.card-lead {
mask-image: linear-gradient(to bottom, #000 60%, transparent);
mask-repeat: no-repeat;
}
Schwarz (oder voll deckend) hält den Inhalt; transparent stanzt ein Loch. Der Verlauf lebt in CSS, also kein extra HTTP-Request — anders als ein Icon-Sprite-Sheet. Das ist nicht opacity auf der ganzen Karte: Text im soliden Teil bleibt scharf; nur der maskierte Bereich löst sich auf.
Größe, Repeat, Position
Behandle die Maske wie eine Hintergrundschicht, die du nie als Bild siehst:
.badge {
mask-image: url("/img/star-mask.svg");
mask-size: 4rem 4rem;
mask-repeat: no-repeat;
mask-position: center;
}
mask-size: cover füllt die Box; contain hält das Seitenverhältnis der Schablone; Längen pinnen eine kleine Form. repeat kachelt die Schablone (selten, schnell zu viel). Die Kurzform mask gibt es, aber Anfänger bleiben bei Longhands, bis sich die Schicht wie background anfühlt.
Alpha gegen Luminanz
mask-mode antwortet: „Lese ich Transparenz oder Helligkeit?“
.portrait {
mask-image: url("/img/gray-sculpt.jpg");
mask-mode: luminance;
mask-size: cover;
}
alpha (oft Standard bei PNG mit Transparenz) nutzt den Alpha-Kanal. luminance nutzt hell gegen dunkel: Weiß zeigt typisch, Schwarz verbirgt — nützlich, wenn die Schablone ein Graufoto ist, kein transparentes PNG. Tut eine JPEG-Maske „nichts“, brauchtest du wahrscheinlich luminance. Auf SVG-<mask> gibt es mask-type; auf HTML-Boxen starte mit mask-mode.
Harter Clip gegen weiche Maske
clip-path schneidet eine Geometrie: Kreis, inset, Polygon. Die Kante ist scharf. Eine Maske kann weich sein. Das sind nicht zwei Namen für eine Eigenschaft:
.avatar {
clip-path: circle(50%);
}
.poster {
mask-image: radial-gradient(circle, #000 55%, transparent 80%);
mask-repeat: no-repeat;
}
Avatare und Tickets wollen oft clip-path. Hero-Poster, die in die Seite auflösen, wollen eine Verlaufs-maske. Kombinieren geht, aber eine Aufgabe pro Eigenschaft ist ruhiger. overflow: hidden mit border-radius ist Werkzeug drei: es clippt Nachfahren an die Padding-Box. Eine Maske malt das Element selbst inklusive Hintergrund, ohne die Layout-Box rund zu machen.
Safari und das WebKit-Präfix
Manche Safari-Versionen wollen noch -webkit-mask-image (und Freunde) neben den Standard-Eigenschaften:
.fade-photo {
-webkit-mask-image: linear-gradient(#000 70%, transparent);
mask-image: linear-gradient(#000 70%, transparent);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
}
Präfix-Zeile und Standard-Zeile. Nicht für immer nur Präfix liefern. @supports kann Extras umschließen; die Gewohnheit: das Fade in Safari testen, nicht nur in Chromium.
Maske vs Clip vs Overflow vs Sprites
📊 Mask vs clip-path vs overflow vs sprites
| Tool | Job | Poor fit |
|---|---|---|
mask-image / mask-mode |
Soft holes, fades, shaped photos on one element | Hiding a whole form; replacing column layout |
clip-path |
Hard circle, polygon, inset silhouette | Soft dissolves; newspaper columns |
overflow: hidden |
Clip descendants to the box (often with radius) | Painting a gradient stencil on the element’s own pixels |
Sprites (background-position) |
Many icon tiles from one bitmap | Stenciling a hero photo; flowing article text |
Multi-column (column-*) |
Newspaper fill of one text stream | Visibility holes in a picture |
Optional Advanced nutzte Sprites für Icons und Spalten für Fließtext. Maskierung ist die Schablone. Alle drei auf demselben Hero: ein Foto, das wie ein Sprite beschnitten und wie eine Spalte zerschnitten wirkt.
Was du nicht maskieren sollst
Nutze keine Maske, um ein unordentliches Layout zu „retten“. Liegt ein Button oder Label unter dem Fade, kann niemand lesen oder tippen. Screenreader können den Text noch ansagen, während Sehende nichts sehen — das ist ein Bug, kein Feature. Kontrast zählt im sichtbaren Teil. Dekorative Fotos, Karten und Icons sind übliche Ziele; Login-Felder nicht.
.ok-art {
mask-image: linear-gradient(to right, #000, transparent);
}
.not-a-layout-fix {
/* don't: mask the entire toolbar because it overflowed */
}
.icons {
/* sprites still use background-position — not mask-image */
background-image: url("/img/icons.png");
background-position: 0 -32px;
}
Steht ein Kind aus der Karte, ist overflow (oder ein kleineres Kind) der Layout-Fix. Sind es zwölf HTTP-Icon-Dateien, ist ein Sprite oder SVG-Set der Asset-Fix. Maskierung ersetzt keines von beiden.
Selbst ausprobieren
- Gib einer Farbbox
mask-image: linear-gradient(to bottom, #000 50%, transparent)und sieh den Fuß auflösen. - Tausche eine kleine SVG- oder PNG-Schablone; setze
mask-sizeundmask-position: center. - Vergleiche
mask-mode: luminanceauf einem Graustufen-JPEG mitalphaauf einem transparenten PNG. - Dieselben Kreis mit
clip-path: circle(50%)— merke die harte Kante. - Ergänze
-webkit-mask-imagemit demselben Verlauf. Maskiere kein Formular.
Typische Fehler
- Maske als Seitenlayout oder als
overflow: hidden mask-sizevergessen, sodass eine Mini-Schablone in der Ecke sitzt- Löcher von einer JPEG-Maske ohne
mask-mode: luminanceerwarten -webkit-mask-imageweglassen und „CSS-Masken“ in Safari beschuldigenclip-pathundmask-imagegleichsetzen- Labels, Bildtexte oder Buttons maskieren, bis Kontrast und Klickflächen sterben
- Verwechslung mit Sprites (Kachel-Offsets) oder Mehrspalten (Textströme)
Zusammenfassung
- Eine Maske ist eine Schablone auf einem Element: hier zeigen, dort verbergen
mask-imagenimmt URL oder Verlauf; Größe, Repeat und Position spiegeln Hintergründemask-mode: Alpha gegen Luminanzclip-pathist ein harter geometrischer Schnitt; Masken können faden- Präfix für Safari; nie essenzielle UI wegmaskieren
- Optional Advanced geht als Nächstes mit Benutzeroberfläche (
user-interface) weiter
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt