Signatur
Beschreibung
Die Eigenschaft width eines SVGRect enthält die Breite eines Rechtecks als Gleitkommazahl in Benutzereinheiten (user units) des jeweiligen SVG-Koordinatensystems. In aktuellen Spezifikationen (SVG 2 / Geometry Interfaces) ist SVGRect kein eigenes Interface mehr, sondern ein Alias für DOMRect. Deshalb verhält sich SVGRect.width genau wie DOMRect.width.
Solche Objekte bekommen Sie vor allem von SVGGraphicsElement.getBBox() (Begrenzungsrahmen eines Elements), von svgElement.viewBox.baseVal bzw. animVal (die viewBox eines <svg>- oder <symbol>-Elements) und von SVGSVGElement.createSVGRect().
Die Eigenschaft ist grundsätzlich les- und schreibbar. Ob sich eine Änderung auf das Dokument auswirkt, hängt davon ab, woher das Objekt stammt: Ein Wert aus viewBox.baseVal ist „live“ – wenn Sie width ändern, wird das Attribut viewBox sofort aktualisiert. Das Ergebnis von getBBox() ist dagegen nur eine Momentaufnahme. Wenn Sie es ändern, passiert im Dokument nichts.
Rückgabewert
unrestricted double). Beim Setzen wird der Wert in eine Zahl umgewandelt.Beispiele
Breite eines Elements mit getBBox() messen
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
rect.setAttribute('x', '10');
rect.setAttribute('width', '120');
rect.setAttribute('height', '40');
svg.append(rect);
document.body.append(svg); // getBBox() braucht ein gerendertes Element
const box = rect.getBBox();
console.log(box.width);
viewBox-Breite live ändern (Zoom)
const svg = document.querySelector('svg'); // <svg viewBox="0 0 200 100">
const vb = svg.viewBox.baseVal;
console.log(vb.width); // 200
// Um Faktor 2 hineinzoomen: sichtbarer Bereich halbiert
vb.width /= 2;
vb.height /= 2;
console.log(svg.getAttribute('viewBox'));
Textbreite messen und Hintergrund anpassen
const label = document.querySelector('#label'); // <text>
const bg = document.querySelector('#label-bg'); // <rect>
const { x, y, width, height } = label.getBBox();
const padding = 4;
bg.setAttribute('x', x - padding);
bg.setAttribute('y', y - padding);
bg.setAttribute('width', width + padding * 2);
bg.setAttribute('height', height + padding * 2);
console.log(`Textbreite: ${width.toFixed(1)}`);
Neues Rechteck mit createSVGRect()
const svg = document.querySelector('svg');
const r = svg.createSVGRect();
r.width = 50;
r.height = 25;
console.log(r.width, r instanceof DOMRect);
// Wichtig · Fallstricke
- Nicht mit
SVGRectElement.widthverwechseln: Beim Element<rect>liefertrectEl.widtheinSVGAnimatedLength-Objekt und keine Zahl. Den Zahlenwert bekommen Sie überrectEl.width.baseVal.value. - Werte aus
getBBox()sind Momentaufnahmen: Wenn Siewidthändern, ändert sich das Element nicht. Die Box enthält außerdem weder Transformationen noch Strichbreite (stroke-width). Für Bildschirmmaße einschließlich Transformationen nutzen SiegetBoundingClientRect(). getBBox()braucht ein gerendertes Element: Nicht eingehängte Elemente oder Elemente mitdisplay: noneliefern je nach Browser0oder werfen einen Fehler (ältere Firefox-Versionen).- Negative Werte: Anders als bei
DOMRect-Werten aus dem Layout sind negative Breiten möglich. EineviewBoxmit negativer Breite ist aber ungültig, und das Element wird dann nicht gerendert. - Kompatibilität: Die Eigenschaft wird von allen modernen Browsern unterstützt. In älteren Browsern war
SVGRectein eigenes Interface, deshalb kanninstanceof DOMRectdortfalseergeben.