Коротка відповідь
juniorБлокова модель CSS — це спосіб, як браузер розраховує розміри елементів: content + padding + border + margin. Вона визначає, як блоки вписуються в контейнер і взаємодіють з сусідами. Приклад: `div { width: 200px; padding: 10px; border: 2px solid; margin: 5px; }`
Повне пояснення
Що це і навіщо
Блокова модель CSS описує, як браузер розраховує фізичні розміри елементів на сторінці. Вона визначає, що кожен блок складається з content, padding, border і margin, що разом утворюють його box.
Ключові принципи, терміни, інваріанти
- Content – внутрішній вміст елемента.
- Padding – відступ між content і border, заповнює внутрішній простір.
- Border – рамка навколо padding.
- Margin – зовнішній простір між border і сусідніми елементами.
- Box-sizing – властивість, що визначає, чи враховуються padding і border у ширину/висоту.
Як це працює (життєвий цикл, алгоритм)
- Браузер читає CSS‑правила.
- Для кожного елемента обчислюється content width/height (за замовчуванням
widthіheight). - Додаються padding та border, що збільшує розміри box.
- Додається margin, що визначає простір між сусідніми блоками.
- Якщо
box-sizing: border-box, то ширина/висота включають padding і border.
Практика і реалізація (React/Next.js)
<div style={{ width: 300, padding: 20, border: '1px solid #000', margin: 10 }}>
Контент
</div>
У Next.js можна встановити глобальний box-sizing через CSS‑модулі або styled-components.
Тестування (Jest, Testing Library)
Перевірка розмірів можна виконати через getComputedStyle:
const box = screen.getByText('Контент').parentElement;
expect(getComputedStyle(box).width).toBe('340px'); // 300 + 20*2
Оптимізація продуктивності
- Уникайте надмірних margin‑collapses, що збільшують кількість перерисовок.
- Використовуйте
box-sizing: border-boxдля простіших розрахунків. - Застосовуйте
will-change: transformдля елементів, що часто змінюються.
Accessibility
Використовуйте семантичні елементи (<section>, <article>), щоб ARIA‑читачі правильно інтерпретували структуру.
Безпека та валідація
- Уникайте
styleатрибутів, що приймають користувацькі дані без санітізації. - Перевіряйте
box-sizingу сторонніх бібліотеках, щоб уникнути непередбачуваних розмірів.
Типові помилки й edge cases
margin: autoне працює у flex‑контейнерах безdisplay:flex.- Переважання
width: 100%у контейнері зpaddingможе викликати переповнення.
Cheatsheet + можливі follow‑up питання
- box-sizing:
content-box(за замовчуванням) vsborder-box. - margin collapse: коли вертикальні margin з суміжних блоків об’єднуються.
- Flexbox: як margin auto працює у flex‑контейнері.
Питання для глибшого розуміння: «Як margin‑collapse впливає на layout у Flexbox?», «Чому box-sizing: border-box часто рекомендується в проекті?»