← Все вопросы

Чем block отличается от inline и inline-block?

Задан 3 месяца назад1к просмотров2 ответа
11

Не понимаю, почему <div> занимает всю строку, а <span> — нет, и почему у ссылки не применяется заданная ширина. В чём разница между block, inline и inline-block?

2 ответа

15
✓ Принятый ответ — помог автору

Это три значения 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.

6

Известная боль inline-blockзазоры между элементами из-за переносов строк в HTML (пробельные символы превращаются в видимый пробел). Раньше боролись хаками вроде font-size: 0 на родителе. Сегодня проще не использовать inline-block для рядов, а взять display: flex с gap — там лишних щелей нет в принципе.

Ваш ответ

Войдите, чтобы ответить на вопрос.