How to find position of HTML elements in JavaScript?

Overview

JavaScript provides several methods to find the position of HTML elements. The two main approaches are using offset properties (offsetLeft and offsetTop) and the getBoundingClientRect() method. The offset properties return the position relative to the nearest positioned ancestor, while getBoundingClientRect() returns the position relative to the viewport.

Syntax

There are two primary ways to get element position:

Using offset Properties

element.offsetLeft  // Horizontal position
element.offsetTop   // Vertical position

Using getBoundingClientRect()

var rect = element.getBoundingClientRect();
// Returns: { top, left, right, bottom, width, height }

Using Offset Properties

The offset properties provide the element's position relative to its offset parent (nearest positioned ancestor).

<html>
<head>
   <title>Element Position with Offset</title>
</head>
<body>
   <h1 id="heading" style="margin-top: 50px; margin-left: 100px;">TutorialsPoint</h1>
   <div id="result" style="padding: 10px; background: #4CAF50; color: white; display: inline-block;"></div>
   
   <script>
      var element = document.getElementById("heading");
      var resultDiv = document.getElementById("result");
      
      var positionText = "Position: (" + element.offsetTop + ", " + element.offsetLeft + ")";
      resultDiv.innerHTML = positionText;
      
      console.log("Offset Top:", element.offsetTop);
      console.log("Offset Left:", element.offsetLeft);
   </script>
</body>
</html>

Using getBoundingClientRect()

This method returns the position relative to the viewport and provides more detailed positioning information.

<html>
<head>
   <title>Element Position with getBoundingClientRect</title>
</head>
<body>
   <h1 id="heading" style="margin-top: 50px; margin-left: 100px;">TutorialsPoint</h1>
   <div id="result" style="padding: 10px; background: #2196F3; color: white; display: inline-block;"></div>
   
   <script>
      var element = document.getElementById("heading");
      var rect = element.getBoundingClientRect();
      var resultDiv = document.getElementById("result");
      
      var positionText = "Position: (" + Math.round(rect.top) + ", " + Math.round(rect.left) + ")";
      resultDiv.innerHTML = positionText;
      
      console.log("Top:", rect.top);
      console.log("Left:", rect.left);
      console.log("Width:", rect.width);
      console.log("Height:", rect.height);
   </script>
</body>
</html>

Dynamic Position Tracking

This example demonstrates real-time position tracking as an element moves.

<html>
<head>
   <title>Dynamic Position Tracking</title>
</head>
<body>
   <h1 id="movableText" style="position: absolute; top: 50px; left: 50px;">Movable Text</h1>
   <div id="position" style="padding: 10px; background: #FF9800; color: white; display: inline-block; margin-bottom: 10px;">(50, 50)</div>
   <br>
   <button onclick="moveDown()">Move Down</button>
   <button onclick="moveRight()">Move Right</button>
   
   <script>
      function updatePosition() {
         var element = document.getElementById("movableText");
         var positionDiv = document.getElementById("position");
         positionDiv.innerHTML = "(" + element.offsetTop + ", " + element.offsetLeft + ")";
      }
      
      function moveDown() {
         var element = document.getElementById("movableText");
         element.style.top = (element.offsetTop + 20) + "px";
         updatePosition();
      }
      
      function moveRight() {
         var element = document.getElementById("movableText");
         element.style.left = (element.offsetLeft + 20) + "px";
         updatePosition();
      }
      
      // Initialize position display
      updatePosition();
   </script>
</body>
</html>

Comparison

Method Relative To Properties Use Case
offset Properties Offset parent top, left only Element positioning within container
getBoundingClientRect() Viewport top, left, right, bottom, width, height Viewport-relative positioning, animations

Key Points

  • offsetTop and offsetLeft are relative to the nearest positioned ancestor
  • getBoundingClientRect() provides viewport-relative coordinates
  • Use offset properties for layout calculations within containers
  • Use getBoundingClientRect() for viewport-based positioning and scroll effects

Conclusion

Element positioning in JavaScript is essential for creating interactive web applications, animations, and scroll effects. Choose offset properties for container-relative positioning and getBoundingClientRect() for viewport-relative calculations.

Updated on: 2026-03-15T23:19:01+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements