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

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

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

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

Список тем

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

В этом задании вам дан 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` дочернего элемента, чтобы получить его смещение относительно левого и верхнего края родительского элемента.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

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

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-координаты.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

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

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` для получения координат изображения.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

Дан элемент, находящийся внутри родительского контейнера. Получите его полную ширину и высоту (включая 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`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

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

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` первого элемента. Добавьте к полученным значениям желаемое смещение и примените новые координаты ко второму элементу.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

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

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

Дан родительский элемент и дочерний элемент внутри него. Используйте 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`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

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

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

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` другого элемента, не забудьте про единицы измерения.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру
Добавить комментарий