Signatur
Beschreibung
Die Eigenschaft patternContentUnits des Interfaces SVGPatternElement gibt an, in welchem Koordinatensystem die Inhalte eines <pattern>-Elements (also die Kind-Elemente wie <rect> oder <circle>) interpretiert werden. Zurückgegeben wird ein SVGAnimatedEnumeration-Objekt, dessen Eigenschaft baseVal den im Attribut gesetzten Wert und animVal den aktuell (ggf. animierten) Wert enthält.
Mögliche Werte als numerische Konstanten von SVGUnitTypes:
SVG_UNIT_TYPE_UNKNOWN(0): unbekannter oder ungültiger Wert.SVG_UNIT_TYPE_USERSPACEONUSE(1): entsprichtuserSpaceOnUse– Koordinaten beziehen sich auf das Benutzerkoordinatensystem des Elements, das das Muster verwendet. Dies ist der Standardwert.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX(2): entsprichtobjectBoundingBox– Koordinaten sind Bruchteile (0 bis 1) der Bounding Box des gefüllten Elements.
Die Eigenschaft selbst ist schreibgeschützt, der Wert lässt sich aber über patternContentUnits.baseVal oder per setAttribute('patternContentUnits', …) ändern. Nützlich ist sie etwa, um in Skripten zu prüfen, ob Musterinhalte mit der Form skalieren, oder um Muster dynamisch zwischen festen und relativen Maßen umzuschalten.
Nicht zu verwechseln mit patternUnits: Diese Eigenschaft bestimmt das Koordinatensystem der Attribute x, y, width und height der Musterkachel selbst, während patternContentUnits nur die Inhalte betrifft.
Rückgabewert
baseVal (Attributwert, beschreibbar) und animVal (aktueller Wert, schreibgeschützt); die Werte entsprechen den Konstanten von SVGUnitTypes (0, 1 oder 2).Beispiele
Einheitensystem eines Musters auslesen
// <svg><defs><pattern id="punkte" width="0.2" height="0.2" patternContentUnits="objectBoundingBox">
// <circle cx="0.1" cy="0.1" r="0.05" fill="tomato"/></pattern></defs></svg>
const pattern = document.getElementById('punkte');
const { baseVal } = pattern.patternContentUnits;
const namen = {
[SVGUnitTypes.SVG_UNIT_TYPE_UNKNOWN]: 'unbekannt',
[SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE]: 'userSpaceOnUse',
[SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX]: 'objectBoundingBox'
};
console.log(baseVal, namen[baseVal]);
Standardwert ohne gesetztes Attribut
const svgNS = 'http://www.w3.org/2000/svg';
const pattern = document.createElementNS(svgNS, 'pattern');
// Kein Attribut gesetzt → Standardwert userSpaceOnUse
console.log(pattern.patternContentUnits.baseVal === SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE);
console.log(pattern.getAttribute('patternContentUnits'));
Musterinhalt dynamisch auf relative Einheiten umschalten
const pattern = document.querySelector('pattern#streifen');
const setzeRelativ = (relativ) => {
pattern.patternContentUnits.baseVal = relativ
? SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
: SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE;
};
setzeRelativ(true);
// Das Attribut wird automatisch aktualisiert
console.log(pattern.getAttribute('patternContentUnits'));
// Wichtig · Fallstricke
- Schreibschutz: Die Eigenschaft selbst kann nicht neu zugewiesen werden (
pattern.patternContentUnits = 2bleibt wirkungslos bzw. wirft im Strict Mode einenTypeError). Ändern Sie stattdessenbaseVal. - Das Setzen von
baseValauf0(SVG_UNIT_TYPE_UNKNOWN) oder einen ungültigen Wert löst einenTypeErroraus. - Wirkungslos bei
viewBox: Hat das<pattern>einviewBox-Attribut, wirdpatternContentUnitsignoriert. - Bei
objectBoundingBoxmüssen Inhalte in Bruchteilen (z. B.r="0.05") angegeben werden. Außerdem wirkt die Bounding Box auch auf Strichstärken – Linien können dadurch verzerrt oder unsichtbar werden. Bei Elementen ohne Fläche (z. B. horizontale Linien) wird das Muster nicht gerendert. - Über
hrefgeerbte Muster:baseValspiegelt nur das eigene Attribut wider, nicht einen über eine Vorlage geerbten Wert. - Kompatibilität: in allen modernen Browsern unterstützt; die Konstanten stehen global über
SVGUnitTypeszur Verfügung.