Как задать размер элемента в CSS: width, height и max-width

width и height задают ширину и высоту элемента, по умолчанию оба равны auto (блочный элемент растягивается на всю ширину родителя, высота подстраивается под контент). max-width ограничивает верхнюю границу ширины - элемент не может стать шире указанного значения, даже если width явно задан бОльшим.

Попробуй прямо сейчас: увеличь max-width до 600px - блок вырастет до полных 500px, потому что max-width больше не мешает.

Как задать width и height: единицы измерения и auto по умолчанию

width и height принимают px, %, и другие единицы (о em/rem уже был отдельный урок про шрифты, они тоже подходят). Если не задать width вовсе, блочный элемент по умолчанию растягивается на всю доступную ширину родителя (значение auto) - а height по умолчанию тоже auto, но означает "подстроиться под высоту содержимого".

width: 300px; - фиксированная ширина ровно 300px, независимо от родителя.

Ожидание, что блочный div без width сам "сожмётся" по содержимому - по умолчанию он растягивается на всю ширину родителя, а не подстраивается под текст, как строчный элемент.

Почему height в процентах часто "не работает"

Процентная ширина всегда считается от ширины родителя и работает предсказуемо. А вот процентная высота - только если у родителя ЯВНО задана своя высота (числом, а не auto). Если у родителя height: auto (то есть высота сама зависит от содержимого), процентная высота ребёнка просто игнорируется и ведёт себя как auto - подстраивается под контент, а не под какой-либо процент.

Родителю задан height: 400px, ребёнку height: 50% - у ребёнка получится ровно 200px.

У родителя height: auto, ребёнку задан height: 50% - процент просто не сработает, высота ребёнка определится по его собственному содержимому.

Что делает max-width и как он побеждает width

max-width ограничивает элемент сверху: он не может стать шире указанного значения, даже если width явно задан бОльшим - в этом случае реально используется именно max-width. У min-width обратная роль - не даёт элементу стать УЖЕ указанного значения. Если min-width и max-width конфликтуют между собой, побеждает именно min-width - это заложено в самом порядке применения правил.

width: 100%; max-width: 800px; - классический приём для адаптивности: элемент растягивается, но никогда не превышает 800px.

width: 500px; max-width: 300px;, ожидая увидеть именно 500px - реально отрендерится 300px, max-width побеждает.

Из истории В отличие от находок в предыдущих уроках этой группы (padding, margin - там правила оказывались частью CSS с самого 1996 года), min-width и max-width - это реально более поздняя добавка: в CSS1 (декабрь 1996) их не было вовсе, они появились только в CSS2, 12 мая 1998 года, вместе с width и height, которые в CSS1 уже существовали.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Задают height в процентах, рассчитывая, что сработает всегда Работает только если у родителя явно задана высота - иначе процент игнорируется Задать родителю явную высоту, либо использовать единицы вроде vh (отдельная тема)
Задают width больше max-width, ожидая, что победит width Реально используется max-width, а не width Закладывать в расчёты именно max-width как верхнюю границу
Забывают, что при конфликте min-width всегда побеждает max-width Элемент может оказаться шире, чем задумывалось через max-width Проверять, что min-width не превышает max-width
Путают min/max-width с обычным width, ожидая фиксированного размера min/max только ограничивают диапазон, а не задают конкретное значение Для точного фиксированного размера использовать именно width/height

Шпаргалка

Что нужноКак сделать
Точный размерwidth: 300px; height: 150px;
По умолчанию (блочный элемент)width: auto; (вся ширина родителя)
Ограничить максимумmax-width: 600px;
Ограничить минимумmin-width: 200px;
Высота в процентахработает только если у родителя задана явная высота
При конфликте побеждаетmin-width, затем max-width, затем width

Коротко: отвечаем на вопросы

Почему height: 100% не работает?

Процентная высота работает, только если у родителя явно задана своя высота. Если родитель, а тем более его собственный родитель, использует height: auto (по умолчанию), процент просто не от чего считать - высота ведёт себя так, будто её вообще не задавали. Нужно явно задать высоту всей цепочке родителей до нужного уровня, либо использовать другой подход, например единицы vh.

Зачем ставить max-width: 100% у картинок для адаптивности?

Это не даёт картинке "вылезти" за пределы своего контейнера на узких экранах - изображение уменьшается вместе с контейнером, но никогда не становится шире него, оставаясь при этом в своём естественном размере, если места достаточно.

Категория
css
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×