В 1996 году W3C в спецификации CSS предложил модель, в которой ширина элемента — это ширина его content-области.
Пограничные случаи этой модели начали сыпаться уже к 2002-му:
— дизайнер просит блок шириной 300px с 10px padding и 1px border;
— вы пишете width: 300px; padding: 10px; border: 1px solid;
— браузер выдаёт блок шириной 322px и ломает макет. Это не баг — это content-box в действии.
А border-box — это патч, который выправляет поведение. Давайте разберёмся детально. Что происходит внутри?
— width: 200px задаёт ширину только контентной области;
— padding и border добавляются снаружи;
— итоговая занимаемая ширина = 200 + 2×20 + 2×5 = 250px. 🎯 Представьте, что вы заказываете рамку для картины размером 200×200 мм.
Мастер делает холст размером 200 мм, а потом прибивает вокруг него багет шириной 25 мм.
Итоговая рамка — 250 мм. Вы удивлены — ведь вы же просили «200 мм»! Итог: ширина визуального блока ≠ та, что вы указали в width. Что происходит теперь?
— width: 200px задаёт ширину все