Как проверить фактические размеры (width/height) HTML-элемента на веб-странице?

«Как проверить фактические размеры (width/height) HTML-элемента на веб-странице?» — вопрос из категории Веб-тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Фактические размеры элемента могут отличаться от значений в CSS из-за box model, вычисленных стилей, трансформаций и контента. Вот методы проверки:

1. Инструменты разработчика браузера (DevTools) — основной метод:

  • Откройте DevTools (F12 или Cmd+Opt+I / Ctrl+Shift+I).
  • Выберите элемент с помощью инструмента Inspect (Ctrl+Shift+C).
  • Во вкладке "Computed" найдите свойства width и height. Это окончательные, вычисленные браузером размеры content area.
  • В панели "Box Model" (обычно рядом с "Computed") наглядно отображается полная разбивка:
    • Content (ширина/высота из width/height)
    • Padding
    • Border
    • Margin
  • Важно: Размеры в панели "Box Model" показывают width/height внутри border. Чтобы получить полные внешние размеры (включая border), нужны другие свойства.

2. JavaScript для программной проверки: Свойства объекта Element возвращают разные значения:

const el = document.querySelector('.my-element');

// 1. offsetWidth / offsetHeight (НАИБОЛЕЕ ПОЛЕЗНЫ ДЛЯ ВИЗУАЛЬНОЙ ПРОВЕРКИ)
// Возвращают ширину/высоту ВКЛЮЧАЯ padding, border и полосы прокрутки (scrollbar), НО БЕЗ margin.
console.log('Внешняя ширина (border+padding+content):', el.offsetWidth, 'px');
console.log('Внешняя высота (border+padding+content):', el.offsetHeight, 'px');

// 2. clientWidth / clientHeight
// Возвращают ширину/высоту ВКЛЮЧАЯ padding, НО БЕЗ border, margin и scrollbar.
// Это размер видимой области контента внутри border.
console.log('Внутренняя ширина (padding+content):', el.clientWidth, 'px');

// 3. getBoundingClientRect()
// Возвращает объект DOMRect с точными координатами и размерами ОТНОСИТЕЛЬНО ВЬЮПОРТА.
// Свойства width/height здесь — это offsetWidth/offsetHeight (включая border).
const rect = el.getBoundingClientRect();
console.log('Ширина (getBoundingClientRect):', rect.width);
console.log('Высота (getBoundingClientRect):', rect.height);
console.log('Положение сверху:', rect.top);

3. Учет box-sizing: Ключевой CSS-параметр, влияющий на расчет:

.my-element {
  box-sizing: border-box; /* width/height ВКЛЮЧАЮТ padding и border */
  /* или */
  box-sizing: content-box; /* width/height относятся ТОЛЬКО к контенту (по умолчанию) */
}

При border-box заданный width: 300px будет включать padding и border, а offsetWidth будет равен ~300px (за вычетом возможного scrollbar). При content-box padding и border добавляются к заданному width.

4. Визуальная/пиксельная проверка:

  • Overlay: Наложение скриншота элемента на макет из Figma/Zeplin в графическом редакторе.
  • Rulers & Guides: Использование расширений для браузера (например, "Page Ruler") или встроенных линеек в DevTools (в режиме Ctrl+Shift+P -> "Show Rulers").

Рекомендация: Для большинства задач QA достаточно DevTools (вкладка Computed + Box Model). offsetWidth/Height или getBoundingClientRect() используются для автоматизированных проверок в скриптах.