Signatur
Beschreibung
Die Eigenschaft maskContentUnits des SVGMaskElement-Interfaces spiegelt das gleichnamige SVG-Attribut wider. Das Attribut legt fest, in welchem Koordinatensystem die Kindelemente der Maske (z. B. <rect>, <circle>) interpretiert werden.
Es gibt zwei gültige Werte:
userSpaceOnUse(Standard, numerisch1): Koordinaten beziehen sich auf das Benutzerkoordinatensystem des Elements, das die Maske verwendet.objectBoundingBox(numerisch2): Koordinaten sind Bruchteile der Bounding Box des maskierten Elements (0bis1). So lässt sich eine Maske für Elemente unterschiedlicher Größe wiederverwenden.
Die Eigenschaft selbst ist schreibgeschützt, gibt aber ein SVGAnimatedEnumeration-Objekt zurück. Über dessen baseVal kann man den Wert lesen und setzen; animVal liefert den aktuell (ggf. animierten) wirksamen Wert und ist nur lesbar. Nicht verwechseln mit maskUnits, das sich auf die Maskenregion (x, y, width, height) bezieht.
Rückgabewert
baseVal und animVal. Mögliche Zahlenwerte: 0 (SVG_UNIT_TYPE_UNKNOWN), 1 (SVG_UNIT_TYPE_USERSPACEONUSE), 2 (SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) – definiert in SVGUnitTypes.Beispiele
Aktuellen Wert auslesen
// HTML: <svg><defs><mask id="m" maskContentUnits="objectBoundingBox"><rect width="0.5" height="1" fill="white"/></mask></defs></svg>
const mask = document.getElementById('m');
const units = mask.maskContentUnits;
console.log(units.baseVal);
console.log(units.baseVal === SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
Standardwert ohne gesetztes Attribut
const svgNS = 'http://www.w3.org/2000/svg';
const mask = document.createElementNS(svgNS, 'mask');
// Kein Attribut gesetzt → Standard userSpaceOnUse
console.log(mask.maskContentUnits.baseVal);
console.log(mask.getAttribute('maskContentUnits'));
Maske per Skript auf relative Koordinaten umstellen
const svgNS = 'http://www.w3.org/2000/svg';
const mask = document.createElementNS(svgNS, 'mask');
mask.id = 'fadeMask';
// Wert über baseVal setzen – die Eigenschaft selbst ist nicht zuweisbar
mask.maskContentUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
const rect = document.createElementNS(svgNS, 'rect');
rect.setAttribute('width', '1');
rect.setAttribute('height', '0.5');
rect.setAttribute('fill', 'white');
mask.append(rect);
// Das Attribut wird automatisch synchronisiert
console.log(mask.getAttribute('maskContentUnits'));
// Wichtig · Fallstricke
- Nicht direkt zuweisbar:
mask.maskContentUnits = 2wird ignoriert (im Strict-ModeTypeError). StattdessenmaskContentUnits.baseValsetzen odersetAttribute('maskContentUnits', …)verwenden. - Wird
baseValauf0oder einen ungültigen Wert gesetzt, lösen Browser einenTypeErroraus bzw. ignorieren die Zuweisung. - Bei
objectBoundingBoxmüssen Kindkoordinaten im Bereich 0–1 liegen; Werte wiewidth=\"100\"erzeugen dann eine riesige Maske. Außerdem funktioniert die Maske nicht bei Elementen ohne Ausdehnung (z. B. horizontale Linien mit Bounding-Box-Höhe 0). - Nicht mit
maskUnitsverwechseln (Standard dort:objectBoundingBox). - Die Konstanten liegen in SVG 2 auf
SVGUnitTypes; von allen modernen Browsern unterstützt.