Урок 17. Примеры: box-sizing, размеры и overflow
⚡ Кратко
Рядом с каждым кодом — живой «Результат». Сравни блоки content-box и border-box,
затем поменяй один overflow и предскажи, появится ли полоса прокрутки.
Рабочие примеры
В каждом примере сверху — реальный результат, ниже — код, который его создаёт. Сравнивай и экспериментируй.
1. content-box против border-box (одинаковый код, разный размер)
Оба блока: width: 240px; padding: 24px; border: 4px solid. Отличается только
box-sizing — и реальная ширина различается.
width 240 + padding 48 + border 8 = 296px на экране
всё вместе ровно = 240px на экране
.box-a { /* реальная ширина = 296px */
box-sizing: content-box; /* по умолчанию */
width: 240px;
padding: 24px;
border: 4px solid #ea580c;
}
.box-b { /* реальная ширина = 240px */
box-sizing: border-box;
width: 240px;
padding: 24px;
border: 4px solid #0f766e;
}
2. Глобальный сброс на border-box
Один раз в начале CSS — и расчёт размеров становится интуитивным для всех элементов проекта.
/* основа любого современного проекта */
*,
*::before,
*::after {
box-sizing: border-box;
}
3. overflow: четыре поведения рядом
У всех блоков одинаковая высота 90px и слишком длинный текст. Разница — только в overflow.
Текст торчит наружу за нижнюю границу блока и наезжает на соседей снизу.
Полосы прокрутки видны всегда, даже когда контента мало или он влезает.
Полоса появляется только когда содержимое реально не помещается в блок.
.box { width: 150px; height: 90px; }
.visible { overflow: visible; } /* торчит наружу */
.hidden { overflow: hidden; } /* обрезано */
.scroll { overflow: scroll; } /* полосы всегда */
.auto { overflow: auto; } /* полосы при нужде */
4. Картинка, которая не ломает макет
Большое изображение в узком контейнере без max-width вызывает горизонтальную прокрутку.
max-width: 100% ужимает его до ширины родителя.
«Картинка» сжата до ширины контейнера (200px).
.content img {
max-width: 100%; /* не шире родителя */
height: auto; /* пропорции сохраняются */
}
5. Читаемая колонка текста + перенос длинных слов
max-width: 70ch ограничивает строку для комфортного чтения, а overflow-wrap
переносит длинные ссылки, чтобы они не разрывали макет.
.content {
max-width: 70ch; /* комфортная ширина строки */
margin: 0 auto;
padding: 2rem;
overflow-wrap: break-word; /* рвём длинные слова/URL */
}
auto и удали часть текста — полоса прокрутки исчезнет сама. Затем у блока
scroll сделай то же — полоса останется.