Signatur
Beschreibung
Die schreibgeschützte Eigenschaft clipPathUnits des Interfaces SVGClipPathElement gibt ein SVGAnimatedEnumeration-Objekt zurück. Es spiegelt das Attribut clipPathUnits des <clipPath>-Elements wider. Das Attribut legt fest, in welchem Koordinatensystem die Formen innerhalb des Beschneidungspfads gelesen werden.
Es gibt zwei gültige Werte:
userSpaceOnUse(Standard, KonstanteSVG_UNIT_TYPE_USERSPACEONUSE=1): Die Koordinaten beziehen sich auf das Benutzerkoordinatensystem des Elements, das auf den Beschneidungspfad verweist.objectBoundingBox(KonstanteSVG_UNIT_TYPE_OBJECTBOUNDINGBOX=2): Die Koordinaten sind Anteile (0 bis 1) am umschließenden Rechteck (Bounding Box) des beschnittenen Elements. Dadurch lässt sich ein einzigerclipPathfür Elemente jeder Größe verwenden.
Die Eigenschaft selbst ist schreibgeschützt, der Wert jedoch nicht: Über clipPathUnits.baseVal kannst du ihn lesen und ändern, über clipPathUnits.animVal liest du den aktuell (ggf. animierten) Wert. Im Alltag nutzt man sie vor allem, um per Skript zu prüfen, wie ein vorhandener Beschneidungspfad ausgelegt ist, oder um zwischen absoluten und relativen Koordinaten umzuschalten.
Rückgabewert
baseVal (lesbar und schreibbar) und animVal (nur lesbar). Beide enthalten eine Zahl: 0 (SVG_UNIT_TYPE_UNKNOWN), 1 (userSpaceOnUse) oder 2 (objectBoundingBox).Beispiele
Aktuellen Einheitentyp auslesen
// <svg><clipPath id="clip" clipPathUnits="objectBoundingBox">
// <circle cx="0.5" cy="0.5" r="0.5" /></clipPath></svg>
const clip = document.getElementById('clip');
const { baseVal } = clip.clipPathUnits;
const names = {
[SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE]: 'userSpaceOnUse',
[SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX]: 'objectBoundingBox'
};
console.log(baseVal, names[baseVal]);
Standardwert ohne Attribut
const svgNS = 'http://www.w3.org/2000/svg';
const clip = document.createElementNS(svgNS, 'clipPath');
// Kein Attribut gesetzt → Standard userSpaceOnUse
console.log(clip.clipPathUnits.baseVal === SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE);
Auf relative Koordinaten umschalten
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.querySelector('svg');
const clip = document.createElementNS(svgNS, 'clipPath');
clip.id = 'rundClip';
const circle = document.createElementNS(svgNS, 'circle');
circle.setAttribute('cx', '0.5');
circle.setAttribute('cy', '0.5');
circle.setAttribute('r', '0.5');
clip.append(circle);
svg.append(clip);
// baseVal ist schreibbar – Eigenschaft selbst nicht
clip.clipPathUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
console.log(clip.getAttribute('clipPathUnits'));
// Jedes Element wird nun passend zu seiner Größe rund beschnitten
svg.querySelectorAll('image').forEach((img) => {
img.setAttribute('clip-path', 'url(#rundClip)');
});
// Wichtig · Fallstricke
- Kein direktes Zuweisen:
clip.clipPathUnits = 2hat keine Wirkung (im Strict Mode gibt es einenTypeError). Ändere stattdessenclipPathUnits.baseValoder rufesetAttribute('clipPathUnits', …)auf. - Ein ungültiger Wert für
baseVal(z. B.0oder3) löst einenTypeErroraus. - Bei
objectBoundingBoxbrauchen die Formen Werte zwischen 0 und 1. Übernimmst du Pixelwerte wiecx="50", liegt der Pfad weit außerhalb, und das Element verschwindet vollständig. - Bei
objectBoundingBoxwird ein Element ohne Fläche (Breite oder Höhe 0, z. B. eine waagerechte Linie) nicht dargestellt. - Die Konstanten findest du im globalen Objekt
SVGUnitTypes. Ältere Browser stellen sie teilweise nur auf dem Element bereit. - Kompatibilität: wird in allen modernen Browsern unterstützt.