Кратко
СкопированоСвойство width отвечает за ширину элемента. С его помощью мы можем увеличивать или уменьшать ширину строчно-блочных (inline) и блочных (block) элементов. На строчные элементы это свойство не будет иметь никакого влияния.
Строчно-блочные (inline) элементы по умолчанию подстраиваются под ширину контента, лежащего у них внутри.
Блочные (block) элементы по умолчанию имеют ширину 100%. Если представить сайт как документ с текстом, то блочный элемент займёт всю строку, на которой стоит.
Кроме фиксированной ширины можно задавать элементу минимальную ширину min или максимальную ширину max.
В современном CSS есть логический аналог этого свойства — inline.
Пример
Скопировано
<div class="block">Я — блочный элемент!</div><div class="inline-block">Я</div><div class="inline-block">строчно-блочный</div><div class="inline-block">элемент!</div>
<div class="block">Я — блочный элемент!</div>
<div class="inline-block">Я</div>
<div class="inline-block">строчно-блочный</div>
<div class="inline-block">элемент!</div>
Не меняем display для .block, поскольку <div> уже является блочным:
.block { background-color: #2E9AFF;}.inline-block { display: inline-block; background-color: #F498AD;}
.block {
background-color: #2E9AFF;
}
.inline-block {
display: inline-block;
background-color: #F498AD;
}
Благодаря фонам можно увидеть, какую ширину имеет каждый из элементов. Элемент с классом .block занял всю строку, его ширина равна 100% от ширины родителя. Элементы с классом .inline подстроились по ширине под контент и встали в одну строку.
Напишем свойство width и изменим это стандартное поведение. Ограничим ширину .block до половины окна, а каждый элемент .inline сделаем на всю ширину окна:
.block { width: 50%; background-color: #2E9AFF;}.inline-block { width: 100%; display: inline-block; background-color: #F498AD;}
.block {
width: 50%;
background-color: #2E9AFF;
}
.inline-block {
width: 100%;
display: inline-block;
background-color: #F498AD;
}
Как понять
СкопированоСвойство width позволяет управлять шириной элемента.
Как пишется
СкопированоДля фиксированной ширины пишем свойство width. Для минимальной ширины — min. Для максимальной ширины — max. Эти три свойства можно указывать по отдельности, а также комбинировать для достижения нужного результата.
В качестве значения указываем число и сразу после него без пробела пишем единицу измерения. Ширину можно указывать как в относительных единицах — процентах (%), vw, vmin и так далее, так и в абсолютных единицах — пикселях (px), rem, em и любых других единицах измерения, доступных в вебе.
В данном коде все значения будут рабочими:
selector { width: 70%; min-width: 320px; max-width: 76rem;}
selector {
width: 70%;
min-width: 320px;
max-width: 76rem;
}
Подсказки
Скопировано💡 По умолчанию у блочных (block) элементов ширина равна 100%. У строчно-блочных (inline) элементов ширина равна ширине вложенного контента.
💡 Ширина в процентах рассчитывается от ширины родительского элемента. Если родительский элемент ограничен по ширине, к примеру, 450 пикселями, то у вложенного элемента ширина в 100% будет равна 450 пикселям. То есть 100% от родительского элемента. Если при этом у родителя будут также указаны внутренние отступы (padding), то 100% ширины для ребёнка будут равны 450px минус боковые отступы.
💡 Блочный (block) элемент занимает всю строку вне зависимости от своей ширины. Оставшееся пространство займёт внешний отступ. Поэтому, ограничивая ширину блочному элементу, не ожидай, что элементы, следующие за ним, встанут с ним в одну строку. Если нужно, чтобы все элементы встали в строку, то нужно менять их с блочных (block) на строчно-блочные (inline).
💡 Ограничив ширину блочного элемента, можно очень просто выровнять его по центру экрана. Для этого пропишем внешний отступ (margin) со значениями 0 auto, где 0 отвечает за отступы сверху и снизу, а ключевое слово auto — за боковые отступы.
Именно таким образом принято выравнивать контент сайта по центру окна браузера.
На практике
Скопированосоветует
СкопированоСвойство width, пожалуй, самое часто встречающееся свойство в коде. В работе вы будете манипулировать шириной очень часто.
🛠 Поскольку строчные (inline) и строчно-блочные (inline) элементы подстраиваются по ширине под вложенный контент, то в ситуациях, когда контента внутри нет, ширина такого элемента будет равна нулю. Но часто случается, что нам нужен декоративный элемент. В этом случае без зазрения совести задавайте ширину. И не забудь про высоту (height).
К примеру, часто декоративные иконки верстаются при помощи фона для элементов <i> или <span>. Поскольку контента по факту в этих элементах нет, их ширина и высота будут равны 0. Пропишите display со значением block или inline, задайте ширину и высоту иконки и укажите путь до фонового изображения:
<div class="card"> <i class="card__icon"></i> <!-- Внимание на меня! --> <h2 class="card__title">Заголовок карточки</h2> <p class="card__text">Некий текст новостной карточки</p></div>
<div class="card">
<i class="card__icon"></i>
<!-- Внимание на меня! -->
<h2 class="card__title">Заголовок карточки</h2>
<p class="card__text">Некий текст новостной карточки</p>
</div>
.card__icon { display: inline-block; width: 50px; height: 50px; background: url('doka-eyes.svg') no-repeat center / cover;}
.card__icon {
display: inline-block;
width: 50px;
height: 50px;
background: url('doka-eyes.svg') no-repeat center / cover;
}
🛠 Часто начинающие разработчики разбивают текст заголовка или абзаца на строки при помощи тега <br> чтобы было точно, как в макете. В таких случаях стоит помнить, что сайты редко остаются неприкосновенными и чаще всего в процессе жизни сайта тексты на нём меняются многократно. Поэтому нужно писать стили так, чтобы любой текст, вставленный в блок, выглядел хорошо.
Пример макета:

Как не надо делать:
...<p class="card__text"> Get the official status of an agent<br> in the projectname and earn with us.</p>...
...
<p class="card__text">
Get the official status of an agent<br>
in the projectname and earn with us.
</p>
...
Как можно сделать:
Лучше задай максимальную ширину, которую должен занимать текст в элементе. Тогда любой текст будет смотреться хорошо. Ничего страшного, если перенос слов или строк не будет на 100% совпадать с макетом. Но такое решение будет дальновидным и владельцы сайта не столкнутся с проблемами при замене текстов.
...<p class="card__text"> Get the official status of an agent in the projectname and earn with us.</p>...
...
<p class="card__text">
Get the official status of an agent in the projectname and earn with us.
</p>
...
.card__text { max-width: 50%; margin: 0 auto; /* Для выравнивания по центру */}
.card__text {
max-width: 50%;
margin: 0 auto; /* Для выравнивания по центру */
}
Теперь любой текст будет занимать не больше, чем 50% от ширины карточки 🎉