Проверяет понимание различий между относительными единицами измерения rem и em в CSS, что важно для создания адаптивных и масштабируемых интерфейсов.
Единицы em и rem в CSS являются относительными, но привязаны к разным базовым значениям. em вычисляется относительно размера шрифта родительского элемента, а rem — относительно размера шрифта корневого элемента <html>. Это ключевое отличие определяет их поведение в сложных структурах.
Когда вы задаете свойство, например font-size: 1.5em, браузер умножает текущий размер шрифта родителя на 1.5. Если родитель имеет font-size: 16px, то элемент получит 24px. При вложенности нескольких уровней значение em может накапливаться: если у родителя 1.5em, а у ребенка тоже 1.5em, то итоговый размер будет 1.5 * 1.5 = 2.25 от базового. Это может привести к неожиданным результатам, но также позволяет создавать компоненты, которые масштабируются пропорционально своему контексту.
rem всегда ссылается на размер шрифта корневого элемента, который по умолчанию равен 16px в большинстве браузеров. Это делает rem предсказуемым и удобным для глобальных настроек, таких как отступы, размеры блоков или типографика. Например, margin: 2rem всегда будет равен 32px, независимо от вложенности.
html { font-size: 16px; }
.parent { font-size: 20px; }
.child-em { font-size: 1.5em; } /* 30px */
.child-rem { font-size: 1.5rem; } /* 24px */
В этом примере .child-em получит 30px, так как 1.5 умножается на 20px родителя, а .child-rem — 24px, так как 1.5 умножается на 16px корня.
rem — для глобальных размеров: отступы, ширина контейнеров, размеры шрифтов, которые должны быть одинаковыми на всей странице.em — для локальных масштабирований: например, размеры кнопок или иконок, которые должны зависеть от размера шрифта родительского блока.Понимание разницы между em и rem помогает создавать гибкие и предсказуемые стили. Используйте rem для единообразия и простоты поддержки, а em — когда нужна адаптивность внутри компонента. Это особенно важно при разработке крупных проектов с множеством вложенных элементов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию