Signatur
Beschreibung
Die Eigenschaft height des Interfaces SVGFilterElement spiegelt das Attribut height eines <filter>-Elements wider. Gemeint ist die vertikale Ausdehnung des Filterbereichs (engl. filter region), also des Rechtecks, auf das der Filter wirkt und auf das sein Ergebnis zugeschnitten wird. Anders als die Kurzbeschreibung nahelegt, geht es nicht um eine einzelne Filterprimitive. Die Primitiven wie <feGaussianBlur> haben eigene height-Eigenschaften über SVGFilterPrimitiveStandardAttributes.
Zurückgegeben wird ein SVGAnimatedLength-Objekt mit zwei Werten:
baseVal: ein veränderbaresSVGLength, das dem Attributwert entspricht. Eine Änderung schreibt das Attribut automatisch zurück.animVal: ein schreibgeschütztesSVGLengthmit dem aktuellen Wert, falls eine SMIL-Animation läuft.
Wie der Wert zu lesen ist, hängt von filterUnits ab. Beim Standard objectBoundingBox ist er ein Bruchteil oder Prozentwert der Bounding Box des gefilterten Elements. Bei userSpaceOnUse ist er eine Länge im Benutzerkoordinatensystem. Praktisch braucht man die Eigenschaft vor allem, um den Filterbereich per Skript zu vergrößern, etwa damit Schlagschatten, Weichzeichner oder Glow-Effekte nicht am Rand abgeschnitten werden.
Rückgabewert
baseVal (veränderbares SVGLength, entspricht dem Attribut) und animVal (schreibgeschütztes SVGLength, animierter Wert). Ohne gesetztes Attribut gilt der Standardwert 120%.Beispiele
Höhe des Filterbereichs auslesen
const svgNS = "http://www.w3.org/2000/svg";
const filter = document.createElementNS(svgNS, "filter");
filter.setAttribute("height", "150%");
const h = filter.height.baseVal;
console.log(h.valueAsString);
console.log(h.valueInSpecifiedUnits);
console.log(h.unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE);
Filterbereich vergrößern, damit ein Schlagschatten nicht abgeschnitten wird
const svgNS = "http://www.w3.org/2000/svg";
const svg = document.createElementNS(svgNS, "svg");
const filter = document.createElementNS(svgNS, "filter");
filter.id = "schatten";
const shadow = document.createElementNS(svgNS, "feDropShadow");
shadow.setAttribute("dx", "0");
shadow.setAttribute("dy", "20");
shadow.setAttribute("stdDeviation", "8");
filter.append(shadow);
svg.append(filter);
document.body.append(svg);
// Großer vertikaler Versatz: Bereich nach unten erweitern
filter.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, -20);
filter.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 200);
console.log(filter.getAttribute("height"));
Absolute Höhe bei filterUnits="userSpaceOnUse"
const svgNS = "http://www.w3.org/2000/svg";
const filter = document.createElementNS(svgNS, "filter");
filter.setAttribute("filterUnits", "userSpaceOnUse");
// Wert als Zahl in Benutzereinheiten setzen
filter.height.baseVal.value = 300;
console.log(filter.getAttribute("height"));
// Die Eigenschaft selbst ist schreibgeschützt
try {
"use strict";
(() => { "use strict"; filter.height = 500; })();
} catch (e) {
console.log(e instanceof TypeError);
}
// Wichtig · Fallstricke
- Schreibgeschützt heißt nur die Referenz:
filter.height = …wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus (also auch in ES-Modulen) einenTypeErroraus. Werte ändert man überfilter.height.baseValodersetAttribute("height", …). - Standardwert: Ohne Attribut gilt
120%, zusammen mitx/y=-10%. Das ist ein Rand von 10 % oben und unten. Für große Weichzeichnungsradien oder Versätze reicht das oft nicht, sodass der Effekt sichtbar abgeschnitten wird. - Einheiten hängen von
filterUnitsab: BeiobjectBoundingBoxbedeutet1.5dasselbe wie150%. BeiuserSpaceOnUseist1.5eine absolute Länge und damit meist viel zu klein. - Ein negativer Wert ist ein Fehler, und der Wert
0schaltet das Rendern des gefilterten Elements ab. animValweicht nur bei SMIL-Animationen (<animate>) vonbaseValab. CSS-Animationen wirken sich hier nicht aus.- Die Eigenschaft wird von allen modernen Browsern unterstützt. Elemente müssen mit
createElementNSim SVG-Namensraum erzeugt werden, sonst gibt es die Eigenschaft nicht.