Signatur
Beschreibung
Die Eigenschaft y gibt die vertikale Koordinate des Ursprungs eines Rechtecks zurück. Rechtecke dieser Art liefert zum Beispiel Element.getBoundingClientRect(). Dort bezieht sich der Wert auf den Viewport, also den sichtbaren Bereich des Fensters. Bei einem ResizeObserverEntry.contentRect ist der Wert dagegen relativ zur Padding-Box des beobachteten Elements.
Der Ursprung ist nicht immer die obere Kante. Ist die Höhe (height) negativ, dann liegt der Ursprung unten und y ist nicht gleich top. Wer sicher die obere Kante braucht, nimmt top. Das ist immer Math.min(y, y + height).
Bei DOMRectReadOnly lässt sich y nur lesen. Die abgeleitete Klasse DOMRect erlaubt dagegen auch das Schreiben. Typische Einsatzfälle sind Positionsberechnungen für Tooltips und Pop-ups, Kollisionsprüfungen, Scroll-Logik und die Ausrichtung von Elementen zueinander.
Rückgabewert
double). Sie kann auch Nachkommastellen haben oder negativ sein.Beispiele
Rechteck direkt erzeugen und y auslesen
const rect = new DOMRectReadOnly(10, 40, 200, 100);
console.log(rect.y); // Ursprung
console.log(rect.top); // obere Kante
// Schreiben hat keine Wirkung (im Strict Mode: TypeError)
rect.y = 99;
console.log(rect.y);
Negative Höhe: y ist nicht gleich top
const rect = DOMRectReadOnly.fromRect({ x: 0, y: 100, width: 50, height: -30 });
console.log(rect.y); // Ursprung unten
console.log(rect.top); // tatsächliche obere Kante
console.log(rect.bottom);
Tooltip unter einem Element platzieren
const button = document.querySelector('#hilfe');
const tooltip = document.querySelector('#tooltip');
const positionTooltip = () => {
const { x, y, height } = button.getBoundingClientRect();
// Viewport-Koordinaten plus Scroll-Offset ergeben Dokument-Koordinaten
tooltip.style.left = `${x + window.scrollX}px`;
tooltip.style.top = `${y + height + window.scrollY + 8}px`;
};
button.addEventListener('mouseenter', positionTooltip);
Prüfen, ob ein Element oberhalb des Viewports liegt
const istUeberViewport = (el) => {
const rect = el.getBoundingClientRect();
return rect.y + rect.height < 0;
};
window.addEventListener('scroll', () => {
const header = document.querySelector('header');
document.body.classList.toggle('sticky-nav', istUeberViewport(header));
}, { passive: true });
// Wichtig · Fallstricke
- Bezugssystem beachten:
getBoundingClientRect().ybezieht sich auf den Viewport und ändert sich beim Scrollen. Für Koordinaten relativ zum Dokument muss manwindow.scrollYaddieren. yundtopsind nicht dasselbe: Bei negativer Höhe unterscheiden sich die beiden Werte. Für die obere Kante verwendet man daher bessertop.- Schreibschutz: Wer
yzuweist, wird im normalen Modus ignoriert. Im Strict Mode (auch in ES-Modulen) wirft die Zuweisung einenTypeError. Für veränderbare Rechtecke gibt esDOMRect. - Keine Live-Werte: Das Rechteck ist ein Schnappschuss. Nach Änderungen am Layout muss man
getBoundingClientRect()erneut aufrufen. - Performance: Wer
getBoundingClientRect()häufig aufruft, etwa in Scroll-Handlern, kann ein erzwungenes Neuberechnen des Layouts (Reflow) auslösen. Oft istIntersectionObserverdie bessere Wahl. - Kompatibilität: Alte Versionen von Internet Explorer und Edge (vor der Chromium-Basis) kannten nur
topundleft, aber keinxundy. Alle modernen Browser unterstützeny.