Signatur
Beschreibung
Die Eigenschaft ry der Schnittstelle SVGRectElement entspricht dem Attribut ry eines <rect>-Elements. Sie legt fest, wie stark die Ecken des Rechtecks vertikal abgerundet werden. Zusammen mit rx (horizontaler Radius) ergibt sich eine elliptische Eckrundung.
Die Eigenschaft selbst ist schreibgeschützt: Man kann ihr kein neues Objekt zuweisen. Das zurückgegebene SVGAnimatedLength-Objekt bietet aber zwei Unterobjekte vom Typ SVGLength: baseVal (der im DOM gesetzte Grundwert, beschreibbar) und animVal (der aktuelle, ggf. durch SMIL-Animation veränderte Wert, nur lesbar). Über ry.baseVal.value lässt sich der Radius also sehr wohl ändern.
Einsatzgebiete sind z. B. dynamisch erzeugte Diagramme, Buttons oder Karten in SVG, bei denen die Rundung abhängig von Größe oder Zustand angepasst werden soll. Alternativ kann auch die CSS-Eigenschaft ry (SVG 2) verwendet werden, die Vorrang vor dem Attribut hat.
Rückgabewert
baseVal und animVal (jeweils SVGLength). baseVal.value liefert den Radius in Benutzereinheiten; ist das Attribut nicht gesetzt, ist der Wert 0 bzw. wird automatisch aus rx übernommen (Darstellung).Beispiele
Vertikalen Eckenradius auslesen
// <svg><rect id="karte" width="200" height="100" rx="20" ry="10" /></svg>
const rect = document.getElementById('karte');
console.log(rect.ry.baseVal.value); // Grundwert
console.log(rect.ry.animVal.value); // aktueller (animierter) Wert
console.log(rect.ry.baseVal.valueAsString);
Radius per Skript ändern (Hover-Effekt)
const rect = document.querySelector('rect.button');
rect.addEventListener('mouseenter', () => {
rect.rx.baseVal.value = 25;
rect.ry.baseVal.value = 25;
});
rect.addEventListener('mouseleave', () => {
rect.rx.baseVal.value = 5;
rect.ry.baseVal.value = 5;
});
Rechteck dynamisch erzeugen und Radius in Prozent setzen
const SVG_NS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(SVG_NS, 'svg');
svg.setAttribute('width', '300');
svg.setAttribute('height', '150');
const rect = document.createElementNS(SVG_NS, 'rect');
rect.setAttribute('width', '300');
rect.setAttribute('height', '150');
rect.setAttribute('fill', 'teal');
// ry als Prozentwert (bezogen auf die Viewport-Höhe)
rect.ry.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 10);
svg.append(rect);
document.body.append(svg);
console.log(rect.getAttribute('ry'));
console.log(rect.ry.baseVal.value); // in Benutzereinheiten umgerechnet
Zuweisung an ry selbst schlägt fehl
'use strict';
const rect = document.querySelector('rect');
try {
rect.ry = 12; // Eigenschaft ist schreibgeschützt
} catch (err) {
console.log(err instanceof TypeError);
}
// Wichtig · Fallstricke
- Schreibgeschützt:
rect.ry = 10hat keine Wirkung (im Strict ModeTypeError). Ändern Sie stattdessenrect.ry.baseVal.valueoder nutzen SiesetAttribute('ry', …). - Automatik mit
rx: Ist nur eines der Attributerx/ryangegeben, verwendet der Browser für die Darstellung denselben Wert für beide.ry.baseVal.valuemeldet in diesem Fall aber weiterhin0, da das Attribut nicht gesetzt ist. - Begrenzung: Werte größer als die halbe Höhe werden bei der Darstellung auf
height / 2gekappt; negative Werte sind ein Fehler und werden ignoriert. - CSS-Vorrang: In SVG 2 ist
ryauch eine CSS-Eigenschaft. Eine CSS-Regel überschreibt das Attribut optisch,baseValspiegelt jedoch nur das Attribut wider – für den berechneten WertgetComputedStyle(rect).rynutzen. - Kompatibilität: Die DOM-Eigenschaft wird von allen modernen Browsern unterstützt; die CSS-Eigenschaft
ryist in älteren Safari-Versionen nicht verfügbar.