Получение позиции элемента относительно родительского элемента

Тренажер по работе с HTML DOM на JavaScript для пользователей с начальным и средним уровнем подготовки.

Тренажер JavaScript: Покоряем HTML DOM

В этом тренажере вы попрактикуетесь в определении позиции HTML-элементов относительно их родительских контейнеров. Вам будут представлены различные сценарии, где потребуется использовать JavaScript для получения координат и размеров элементов. Каждое задание включает в себя готовый HTML-код, CSS (если необходимо) и JavaScript-код с пропусками, которые вам нужно заполнить. Это поможет вам лучше понять, как работают свойства `offsetLeft`, `offsetTop`, `offsetWidth`, `offsetHeight`, и как их можно применять для решения практических задач.

Список тем

Получение координат верхнего левого угла

id: 37073_offset-position-1

В этом задании вам дан div с вложенным в него элементом (например, изображением или другим div). Ваша задача — получить координаты (x, y) верхнего левого угла вложенного элемента относительно его родительского элемента. Результат (координаты) должен быть использован для изменения стилей другого элемента.

HTML
Восстановить HTML
<div id="parent" style="position: relative; width: 300px; height: 200px; border: 1px solid black;">
  <div id="child" style="position: absolute; width: 50px; height: 50px; background-color: red; top: 20px; left: 30px;"></div>
</div>
<div id="tg" style="margin-top: 20px;"></div>
JavaScript
const child = document.getElementById("child");
const target = document.getElementById("tg");

const x = child.input__1;
const y = child.input__2;

target.style.paddingLeft = x + input__3;
target.style.paddingTop = y + "px";
target.textContent = "x: " + x + ", y: " + y;
Используйте свойства `offsetLeft` и `offsetTop` дочернего элемента, чтобы получить его смещение относительно левого и верхнего края родительского элемента.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Расчет середины элемента

id: 37073_offset-position-2

Дан элемент внутри родительского контейнера. Необходимо рассчитать координаты середины этого элемента относительно родителя. Используйте полученные координаты, чтобы спозиционировать другой элемент по центру первого.

HTML
Восстановить HTML
<div id="parent" style="position: relative; width: 400px; height: 300px; border: 1px solid blue;">
  <div id="child" style="position: absolute; width: 80px; height: 60px; background-color: green; left: 50px; top: 30px;"></div>
</div>
<div id="marker" style="position: absolute; width: 10px; height: 10px; background-color: red;"></div>
JavaScript
const child = document.getElementById(input__1);
const marker = document.getElementById("marker");

const centerX = child.offsetLeft + child.input__2 / 2;
const centerY = child.offsetTop + child.offsetHeight / input__3;

marker.style.left = input__4 + "px";
marker.style.top = centerY + "px";
Используйте `offsetLeft`, `offsetTop`, `offsetWidth` и `offsetHeight` для расчета середины элемента. Сложите `offsetLeft` с половиной `offsetWidth` для получения x-координаты середины, и `offsetTop` с половиной `offsetHeight` для y-координаты.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Позиционирование картинки

id: 37073_offset-position-3

Дано изображение внутри контейнера. Получите его позицию относительно родителя и отобразите эти значения. Затем измените позицию другого элемента на странице, используя полученные значения.

HTML
Восстановить HTML
<div id="container" style="position: relative; width: 500px; height: 400px; border: 1px solid black;">
  <img id="image" src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" style="position: absolute; top: 50px; left: 100px;" alt="test image">
</div>
<div id="info" style="margin-top: 20px;"></div>
<div id="mover" style="position: absolute; width: 20px; height: 20px; background-color: blue;"></div>
JavaScript
const image = document.getElementById("image");
const info = document.getElementById("info");
const mover = document.getElementById(input__1);

const imageX = image.offsetLeft;
const imageY = input__2.offsetTop;

info.textContent = `Image position: X=${imageX}, Y=${imageY}`;

mover.style.left = imageX + input__3;
mover.style.top = imageY + "px";
Используйте `offsetLeft` и `offsetTop` для получения координат изображения.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Определение размеров и позиции

id: 37073_offset-position-4

Дан элемент, находящийся внутри родительского контейнера. Получите его полную ширину и высоту (включая padding и border), а также позицию относительно родителя. Выведите полученную информацию в текстовый элемент.

HTML
Восстановить HTML
<div id="outer" style="position: relative; width: 400px; height: 300px; border: 2px solid orange;">
  <div id="inner" style="position: absolute; width: 100px; height: 80px; background-color: lightblue; padding: 10px; border: 5px solid blue; top: 40px; left: 60px;"></div>
</div>
<p id="output"></p>
JavaScript
const inner = document.getElementById("inner");
const output = document.getElementById("output");

const width = inner.input__1;
const height = inner.offsetHeight;
const x = inner.offsetLeft;
const y = inner.input__2;

output.textContent = `Width: ${input__3}px, Height: ${height}px, X: ${x}px, Y: ${y}px`;
Используйте свойства `offsetWidth`, `offsetHeight`, `offsetLeft` и `offsetTop`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Динамическое позиционирование

id: 37073_offset-position-5

В этом задании два элемента. Нужно получить позицию первого элемента относительно родителя и использовать эти данные, чтобы динамически позиционировать второй элемент, сместив его на определенное расстояние от первого.

HTML
Восстановить HTML
<div id="parent-div" style="position: relative; width: 600px; height: 400px; border: 1px solid black;">
 <div id="element1" style="position: absolute; top: 100px; left: 150px; width: 50px; height: 50px; background-color: red;"></div>
 <div id="element2" style="position: absolute; width: 30px; height: 30px; background-color: blue;"></div>
</div>
JavaScript
const element1 = document.getElementById("element1");
const element2 = document.getElementById("element2");

const offsetX = 50; // Смещение по X
const offsetY = 20; // Смещение по Y

const newX = element1.input__1 + offsetX;
const newY = element1.offsetTop + input__2;

element2.style.left = newX + "px";
element2.style.top = input__3 + "px";
Используйте `offsetLeft` и `offsetTop` первого элемента. Добавьте к полученным значениям желаемое смещение и примените новые координаты ко второму элементу.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Позиционирование относительно другого элемента

id: 37073_offset-position-6

Даны два элемента внутри общего родителя. Задача: определить позицию первого элемента и расположить второй элемент непосредственно под ним (по вертикали, на одном уровне по горизонтали).

HTML
Восстановить HTML
<div style="position: relative; width: 300px; height: 250px; border: 1px solid #ccc;">
  <div id="first" style="position: absolute; top: 50px; left: 80px; width: 100px; height: 60px; background: lightgreen;"></div>
  <div id="second" style="position: absolute; width: 80px; height: 40px; background: lightblue;"></div>
</div>
JavaScript
const first = document.getElementById('first');
const second = document.getElementById('second');

second.style.left = first.offsetLeft + 'px';
second.style.top = input__1.offsetTop + first.offsetHeight + 'px';
Получите `offsetLeft` и `offsetTop` первого элемента. Затем, используя `offsetHeight` первого элемента, вычислите `top` для второго элемента.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Центрирование элемента с использованием offset

id: 37073_offset-position-7

Дан родительский элемент и дочерний элемент внутри него. Используйте JavaScript и свойства offset, чтобы абсолютно спозиционировать дочерний элемент строго по центру родительского. Размеры родительского и дочернего элементов могут быть разными.

HTML
Восстановить HTML
<div id="parent-container" style="position: relative; width: 400px; height: 300px; border: 1px solid tomato;">
  <div id="child-element" style="position: absolute; width: 100px; height: 80px; background-color: lightseagreen;"></div>
</div>
JavaScript
const parent = document.getElementById('parent-container');
const child = document.getElementById('child-element');

child.style.left = (parent.offsetWidth / 2) - (child.offsetWidth / 2) + 'px';
child.style.input__1 = (parent.offsetHeight / input__2) - (child.offsetHeight / 2) + 'px';
Чтобы центрировать элемент, нужно вычислить разницу между размерами родителя и дочернего элемента, а затем разделить её пополам. Используйте свойства `offsetWidth`, `offsetHeight`, `offsetLeft` и `offsetTop`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку

Изменение размеров на основе позиции

id: 37073_offset-position-8

Имеется элемент внутри контейнера. Получите его позицию и используйте эти значения, чтобы изменить ширину и высоту другого элемента.

HTML
Восстановить HTML
<div style="position: relative; width: 500px; height: 300px; border: 1px solid #888;">
  <div id="source" style="position: absolute; top: 60px; left: 80px; width: 120px; height: 90px; background: gold;"></div>
</div>
<div id="target-div" style="background: lightcoral; margin-top: 20px;">Target</div>
JavaScript
const source = document.getElementById('source');
const targetDiv = document.getElementById('target-div');

targetDiv.style.width = source.offsetLeft + "px";
targetDiv.style.height = source.input__1 + input__2;
Используйте `offsetLeft` и `offsetTop` для получения координат. Присвойте эти значения свойствам `width` и `height` другого элемента, не забудьте про единицы измерения.
Заполнить ответами все поля
Результат
Лог
Выполнить
Показать подсказку
НайтиКурс.Ру