Signatur
Beschreibung
Die schreibgeschützte Eigenschaft left liefert die horizontale Position der linken Kante eines DOMRectReadOnly bzw. DOMRect. Intern wird sie als Math.min(x, x + width) berechnet. Bei einer negativen Breite ist left deshalb nicht gleich x.
Solche Rechtecke bekommen Sie in der Praxis meist über Element.getBoundingClientRect(), Range.getBoundingClientRect(), IntersectionObserverEntry.boundingClientRect oder ResizeObserverEntry.contentRect. Bei getBoundingClientRect() bezieht sich der Wert auf den Viewport, nicht auf das Dokument. Wer eine absolute Position im Dokument braucht, muss window.scrollX addieren.
Mit left positionieren Sie zum Beispiel Tooltips oder Popover, erkennen Kollisionen oder berechnen Abstände zwischen Elementen. Zusammen mit top, right und bottom beschreibt die Eigenschaft die Kanten des Rechtecks unabhängig vom Vorzeichen der Breite und Höhe.
Rückgabewert
Math.min(x, x + width).Beispiele
Linke Kante eines Elements im Viewport auslesen
const box = document.querySelector('#box');
const rect = box.getBoundingClientRect();
console.log(`Linke Kante: ${rect.left}px`);
// Absolute Position im Dokument
console.log(`Im Dokument: ${rect.left + window.scrollX}px`);
Unterschied zwischen x und left bei negativer Breite
const rect = new DOMRectReadOnly(100, 50, -40, 30);
console.log(rect.x); // Ursprung
console.log(rect.left); // tatsächliche linke Kante
console.log(rect.right);
Tooltip bündig unter einem Button positionieren
const button = document.querySelector('#hilfe');
const tooltip = document.querySelector('#tooltip');
const positionTooltip = () => {
const { left, bottom } = button.getBoundingClientRect();
tooltip.style.position = 'fixed';
tooltip.style.left = `${left}px`;
tooltip.style.top = `${bottom + 8}px`;
};
button.addEventListener('mouseenter', positionTooltip);
window.addEventListener('resize', positionTooltip);
Schreibversuch wird ignoriert
'use strict';
const rect = new DOMRectReadOnly(10, 0, 50, 20);
try {
rect.left = 999;
} catch (err) {
console.log(err instanceof TypeError);
}
console.log(rect.left);
// Wichtig · Fallstricke
- Viewport-Bezug: Werte aus
getBoundingClientRect()ändern sich beim Scrollen. Für Dokument-Koordinaten addieren Siewindow.scrollX. leftist nicht immerx: Bei negativerwidthunterscheiden sich die beiden Werte. Für Kantenberechnungen istleftdie sicherere Wahl.- Schreibschutz:
leftist ein reiner Getter, auch bei einem veränderbarenDOMRect. Wenn Sie das Rechteck ändern wollen, setzen SiexoderwidtheinesDOMRect. Im Strict Mode wirft eine Zuweisung anlefteinenTypeError, ansonsten wird sie stillschweigend ignoriert. - Transformationen: CSS-
transformfließt ingetBoundingClientRect()ein. Das Ergebnis ist das umschließende Rechteck des transformierten Elements, nicht seine Layout-Box. - Performance: Wenn Sie Layout-Werte direkt nach DOM-Änderungen auslesen, erzwingen Sie einen synchronen Reflow. Lese- und Schreibzugriffe sollten Sie deshalb bündeln, zum Beispiel mit
requestAnimationFrame. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Der Internet Explorer kannte nur
ClientRect, dasleftebenfalls bereitstellte, aber keinx.