Коротка відповідь
middlepx — абсолютна одиниця, що відповідає одному пікселю екрана. em — відносна до font-size батьківського елемента, rem — відносна до root font-size. em і rem дозволяють створювати масштабовані інтерфейси, що адаптуються до змін розміру шрифту. `font-size: 1.5rem;`
Повне пояснення
Що це і навіщо
- px (pixel) – абсолютна одиниця, що відповідає одному фізичному пікселю екрана. Вона забезпечує точну позиціювання, але не масштабується при зміні розміру шрифту.
- em – відносна одиниця, що базується на
font-sizeбатьківського елемента. Якщо батько має 16 px, то1emдорівнює 16 px; при зміні розміру шрифту батькаemмасштабуються. - rem – відносна одиниця, що базується на
font-sizeкореневого (html) елемента. Це дозволяє створювати глобально масштабовані інтерфейси.
Ключові принципи, терміни, інваріанти
- Absolute vs. Relative:
px– абсолютна,em/rem– відносна. - Inheritance:
emнаслідує розмір шрифту батька,remзавжди посилається на корінь. - Cascade: При змінах
font-sizeу батьківських елементах,emзмінюється, аremзалишаєся незмінним.
Як це працює (життєвий цикл, алгоритм)
- Браузер визначає
font-sizeкореневого елемента (наприклад, 16 px). - Для
remмножить значення на цей базовий розмір. - Для
emбраузер підраховує поточнийfont-sizeбатька і множить на задане значення.
Практика і реалізація (React/Next.js)
const Box = styled.div`
width: 10rem;
padding: 1em; // масштабується від батька
`;
Тестування
- У Jest можна перевіряти
getComputedStyle(element).fontSize. - В Cypress:
cy.get('.box').should('have.css', 'font-size', '160px').
Оптимізація продуктивності
- Використання
remзменшує кількість перерахунків при зміні розміру шрифту. emпідходить для локальних масштабованих компонентів, що не залежать від глобального розміру.
Accessibility
- Масштабовані одиниці (
em,rem) підтримують збільшення шрифту користувачами. pxможе порушувати доступність, якщо не комбіновано з відносними одиницями.
Безпека та валідація
- Немає прямого впливу на XSS, але неправильне використання
emможе призвести до непередбачуваних розмірів.
Типові помилки й edge cases
- Зміна
font-sizeу батькові без оновлення дочірніх елементів, що використовуютьem. - Використання
pxу медіа-запитах, що не масштабуються.
Cheatsheet + можливі follow-up питання
- px: точний, абсолютний.
- em: масштабується від батька.
- rem: масштабується від кореня.
Follow‑up: Як em і rem впливають на доступність? Чому rem часто вибирають для глобальних стилів?