Чем block отличается от inline и inline-block?
Не понимаю, почему <div> занимает всю строку, а <span> — нет, и почему у ссылки не применяется заданная ширина. В чём разница между block, inline и inline-block?
2 ответа
Это три значения display, и они по-разному ведут себя со строкой и размерами:
block (div, p, h1, section):
- занимает всю доступную ширину, следующий блок встаёт на новую строку;
- можно задавать
width,height, любыеmargin/padding.
inline (span, a, strong):
- занимает только ширину содержимого, элементы идут в строку друг за другом;
widthиheightигнорируются — поэтому ваша ширина у ссылки и не применилась;- вертикальные
margin/paddingвизуально почти не раздвигают соседей.
inline-block — гибрид:
- стоит в строке рядом с другими (как inline);
- но при этом слушается
width,heightи всех отступов (как block).
.tag {
display: inline-block;
width: 100px;
padding: 6px 12px; /* теперь работает! */
}
Когда что брать: block — секции и структурные блоки; inline — кусочки текста; inline-block — когда нужно несколько элементов в ряд с заданными размерами (кнопки, теги, пункты меню). Хотя для рядов сейчас чаще берут flex — он удобнее, чем inline-block с его «прыгающим» базлайном и щелями от пробелов в HTML.
Известная боль inline-block — зазоры между элементами из-за переносов строк в HTML (пробельные символы превращаются в видимый пробел). Раньше боролись хаками вроде font-size: 0 на родителе. Сегодня проще не использовать inline-block для рядов, а взять display: flex с gap — там лишних щелей нет в принципе.