← Back to all snippets
JAVASCRIPT

Accurate Element Position and Dimensions with getBoundingClientRect()

Discover how to precisely retrieve the size and position of any DOM element relative to the viewport using `getBoundingClientRect()` for dynamic layouts, overlays, and collision detection.

// Assume an element on the page, e.g., a button
// <button id="myButton" style="position: absolute; top: 100px; left: 200px; padding: 10px;">Get Rect</button>

const myElement = document.getElementById('myButton');

if (myElement) {
    const rect = myElement.getBoundingClientRect();

    console.log('Element dimensions and position relative to viewport:');
    console.log('Left:', rect.left, 'px');      // X-coordinate of the left edge
    console.log('Top:', rect.top, 'px');        // Y-coordinate of the top edge
    console.log('Right:', rect.right, 'px');    // X-coordinate of the right edge
    console.log('Bottom:', rect.bottom, 'px');  // Y-coordinate of the bottom edge
    console.log('Width:', rect.width, 'px');    // Width of the element (content + padding + border)
    console.log('Height:', rect.height, 'px');  // Height of the element (content + padding + border)
    console.log('X:', rect.x, 'px');            // Alias for left
    console.log('Y:', rect.y, 'px');            // Alias for top

    // Example: Position a tooltip directly below the element
    const tooltip = document.createElement('div');
    tooltip.textContent = 'This is a tooltip!';
    tooltip.style.position = 'absolute';
    tooltip.style.backgroundColor = '#333';
    tooltip.style.color = 'white';
    tooltip.style.padding = '5px';
    tooltip.style.borderRadius = '3px';
    tooltip.style.top = `${rect.bottom + 5}px`; // 5px below the button
    tooltip.style.left = `${rect.left}px`;
    document.body.appendChild(tooltip);

} else {
    console.error('Element #myButton not found.');
}
How it works: The `getBoundingClientRect()` method returns a `DOMRect` object providing the size and position of an element relative to the viewport. It includes properties like `left`, `top`, `right`, `bottom` (coordinates relative to the viewport), `width`, and `height`. This method is extremely valuable for accurately positioning overlay elements, calculating collision detection, or performing any layout-dependent operations where precise pixel values are required without needing to manually calculate offsets or scroll positions.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs