CSS-свойство width
определяет ширину элемента на странице. Оно позволяет управлять размером элемента и адаптировать его под разные размеры экрана.
Свойство width
записывается так:
selector {
width: значение;
}
Ширина может быть автоматической — если её не указать, то она будет иметь значение auto
. В этом случае браузер сам решит, какую ширину установить элементу на основе размеров родительского элемента и содержимого.
Если вы хотите управлять шириной, укажите значение
— определённую вами ширину элемента. Тогда она будет постоянной или будет меняться в зависимости от всего вокруг на странице. Можно использовать единицы измерения — например, px
, %
, em
, rem
.
Вот так — в пикселях, тогда ширина будет постоянной. В этом случае — 200 пикселей.
p {
width: 200px;
}
А так — в процентах, тогда ширина будет меняться при изменении размеров окна. В этом случае — 50% от ширины родительского элемента.
p {
width: 50%;
}
В любом варианте к ширине нужно относиться внимательно, чтобы всё сошлось с макетом.
Если пока не понимаете, зачем здесь фигурные скобки — прочитайте о селекторах.
Для чего использовать свойство width
Один из вариантов — чтобы ограничить ширину текстового блока и улучшить читаемость на больших экранах. Например, когда вы делаете блог и хотите, чтобы текст не растягивался на всю ширину экрана. Как на этой странице.
Вот так мы стилизуем элемент с шириной 50%, который находится по центру экрана.
p {
width: 50%;
margin: auto;
}
Относительные единицы измерения помогают создавать адаптивные страницы. Попробуйте сами — контейнер будет тянуться вместе с окном браузера.
.container {
width: 100%;
}
Другой вариант использования — создать сетку на основе флексбоксов с фиксированными размерами колонок.
.flex-container {
display: flex;
}
.flex-item {
width: 200px;
}
Это очень простой пример сеток, но если интересно, прочитайте наше пошаговое рукововодство по созданию адаптивных сеток.
С шириной всё вообще непросто — иногда с непривычки могут произойти странные ситуации, из-за которых придётся долго гуглить. Давайте о них поговорим.
Элемент на странице шире, чем вы задумали
Виновато свойство box-sizing
, которое по умолчанию имеет значение content-box
.
Почему так. Когда вы задаете ширину элемента с помощью свойства width
, она применяется только к содержимому элемента и не учитывает его отступы, поля (padding
и margin
) и границы (border
). Это может привести к тому, что общая ширина элемента будет больше, чем ожидалось.
Например, у нас есть такой элемент с классом box
:
<div class="box">Контент</div>
И мы применяем следующие стили — ширина 100 пикселей, отступы по 10 пикселей со всех сторон и вдобавок пятипиксельную границу.
.box {
width: 100px;
padding: 10px;
border: 5px solid black;
}
Тогда вспоминаем математику и считаем — общая ширина элемента с заданной шириной 100px
будет на самом деле равна 130px
.
100px + 2 × 10px (отступы) + 2 × 5px (границы) = 130px
И правда:
Как починить. Нужно включить отступы и границы в заданную ширину элемента. Для этого используйте свойство box-sizing
со значением border-box
:
.box {
width: 100px;
padding: 10px;
border: 5px solid black;
box-sizing: border-box;
}
Теперь общая ширина элемента будет равна 100px
, так как отступы и границы будут включены в указанную ширину. Такое поведение следует учитывать при вёрстке и подготовке макетов, чтобы в результате не оказалось непредвиденных сюрпризов.
Ширина элемента больше ширины родителя
Если ширина нашего элемента случайно оказалась больше, чем у родительского, то он не вместится. И будет как-то так:
Создаём два вложенных элемента с классами parent
и child
.
<div class="parent">
<div class="child">Элемент</div>
</div>
И стилизуем их. У parent
ширина 100 пикселей, а у child
— 200.
.parent {
width: 100px;
border: 1px solid black;
}
.child {
width: 200px;
background-color: lightblue;
}
Выше вы уже видели, что произойдёт в этом случае — элемент child
с синим фоном будет выходить за пределы родительского элемента с рамкой.
Конечно, иногда так поступают специально — например, чтобы иллюстрации в блоге выходили за пределы колонки с текстом и были покрупнее.
Хотя если указать только width
без ограничений, то при уменьшении окна картинка не вместится.
Как починить. Чтобы избежать таких ситуаций, используйте относительные единицы измерения (например, проценты) или свойства min-width
, max-width
для ограничения минимальной и максимальной ширины.
Например, вы можете установить максимальную ширину для дочернего элемента, чтобы он не превышал ширину родителя:
.child {
max-width: 100%;
background-color: lightblue;
}
Теперь дочерний элемент не будет выходить за пределы родительского элемента, даже если его ширина увеличивается.
Ну и не забывайте тестировать сайты и проверять их в разных браузерах — это важный навык для всех веб-разработчиков в любом году.
👉 Все браузеры поддерживают свойство width
, так что смело пользуйтесь.
Материалы по теме
- Не шириной единой — свойство height ещё запутаннее, но тоже важное
- Чем отличаются margin и padding (и как их больше никогда не перепутать)
- Как создавать адаптивные сетки