Signatur
Beschreibung
Die Eigenschaft rx des Interfaces SVGRectElement spiegelt das Attribut rx eines <rect>-Elements wider. Sie bestimmt den horizontalen Radius der abgerundeten Ecken. Zusammen mit ry ergibt sich eine elliptische Eckenrundung.
Die Eigenschaft selbst ist schreibgeschützt: Man kann ihr kein neues Objekt zuweisen. Der Wert lässt sich aber über das zurückgegebene SVGAnimatedLength-Objekt ändern, genauer über rx.baseVal.value, rx.baseVal.valueAsString oder rx.baseVal.newValueSpecifiedUnits(). rx.animVal liefert den aktuell angezeigten Wert, also auch während einer SMIL-Animation.
Nützlich ist rx, wenn Sie Eckenrundungen per Skript auslesen oder dynamisch anpassen möchten, etwa bei interaktiven Diagrammen, Buttons in SVG oder Animationen ohne CSS. Fehlt das Attribut, gilt auto. Dann wird der Wert von ry übernommen. Fehlen beide, gibt es keine Rundung.
Rückgabewert
baseVal (änderbarer Grundwert als SVGLength) und animVal (schreibgeschützter, aktuell animierter Wert).Beispiele
Eckenradius auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const rect = document.createElementNS(svgNS, 'rect');
rect.setAttribute('width', '200');
rect.setAttribute('height', '100');
rect.setAttribute('rx', '15');
svg.append(rect);
document.body.append(svg);
console.log(rect.rx.baseVal.value);
console.log(rect.rx.baseVal.valueAsString);
Eckenradius per Skript ändern
const rect = document.querySelector('rect');
// Neuer Wert über baseVal – das Attribut wird automatisch aktualisiert
rect.rx.baseVal.value = 30;
console.log(rect.getAttribute('rx'));
// Mit Einheit setzen (Prozent bezogen auf die Viewport-Breite)
rect.rx.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 10);
console.log(rect.getAttribute('rx'));
Button beim Hovern abrunden
const button = document.querySelector('#svg-button rect');
const original = button.rx.baseVal.value;
button.addEventListener('mouseenter', () => {
button.rx.baseVal.value = original * 2;
button.ry.baseVal.value = original * 2;
});
button.addEventListener('mouseleave', () => {
button.rx.baseVal.value = original;
button.ry.baseVal.value = original;
});
Unterschied zwischen baseVal und animVal
// <rect rx="5" ...><animate attributeName="rx" from="5" to="40" dur="2s" repeatCount="indefinite"/></rect>
const rect = document.querySelector('rect');
setInterval(() => {
console.log(`Basis: ${rect.rx.baseVal.value}, aktuell: ${rect.rx.animVal.value.toFixed(1)}`);
}, 500);
// Wichtig · Fallstricke
- Direkte Zuweisung klappt nicht:
rect.rx = 10ändert nichts und wirft im Strict Mode einenTypeError. Ändern Sie den Wert immer überrect.rx.baseVal. autound fehlendes Attribut: Ohnerx-Attribut liefertbaseVal.valuemeist0, obwohl der Browser beim Zeichnen den Wert vonryübernimmt. Den tatsächlich verwendeten Wert erhalten Sie zuverlässiger übergetComputedStyle(rect).rx.- Begrenzung: Ist
rxgrößer als die halbe Breite, wird der Wert beim Zeichnen aufwidth / 2gekürzt. Der DOM-Wert bleibt dabei unverändert. - CSS hat Vorrang: Seit SVG 2 ist
rxauch eine CSS-Eigenschaft. Eine CSS-Regel wierect { rx: 8px; }überschreibt das Attribut. Änderungen überbaseValsind dann nicht sichtbar. - Prozentwerte beziehen sich auf die Breite des Viewports, nicht auf die Breite des Rechtecks.
- Kompatibilität: Wird von allen modernen Browsern unterstützt.
animValwird nur durch SMIL-Animationen verändert, nicht durch CSS-Animationen.