CSS

Display и поток документа

Свойство display: block, inline, inline-block, none, flex, grid и нормальный поток документа.

Начальный (Beginner)
Нужно знать:Margin и Padding

Кратко

display — свойство, которое определяет, как элемент отображается. block — занимает всю ширину, переносит строку. inline — работает внутри текста, не переносит строку. inline-block — гибрид. none — скрывает элемент. normal flow — стандартное расположение элементов (блочные сверху вниз, строчные слева направо).


Подробно

Типы display:

block:

  • Занимает всю ширину родителя
  • Начинает новую строку
  • На padding/margin/width/height реагирует
  • Примеры: div, p, h1-h6, section, article

inline:

  • Занимает только ширину содержимого
  • НЕ переносит строку
  • Width/height НЕ работают!
  • Примеры: span, a, strong, em

inline-block:

  • Внешне — inline (внутри текста)
  • Внутри — block (width/height работают!)
  • Полезно для иконок в тексте, кнопок

display: none:

  • Полностью убирает элемент из layout
  • Не занимает место
  • Отличие от visibility: hidden (скрывает, но место сохраняет)

flex и grid:

  • Создают flex/grid контекст для дочерних элементов
  • Подробно изучим в следующих уроках

Normal flow:

  • Стандартное расположение: блочные — сверху вниз, строчные — слева направо
  • Выход из normal flow: position (absolute, fixed), float, display: flex/grid

Ментальная модель

Display — как тип «попутчика» в поезде. block — занимает целое купе (строку). inline — садится рядом с другими (внутри строки). inline-block — садится рядом, но занимает место (width/height работают).


Примеры

**Самый простой:**

css
div { display: block; }      /* По умолчанию */
span { display: inline; }     /* По умолчанию */

/* Скрываем элемент */
.hidden { display: none; }

/* Делаем inline элемент блочным */
a {
  display: inline-block;
  width: 150px;
  padding: 8px;
  text-align: center;
}

Базовые display-значения и превращение inline в inline-block.

**Простой:**

css
/* Горизонтальное меню */
nav ul {
  display: flex;
  list-style: none;
  gap: 1rem;
}

/* Кнопки-ссылки */
.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  text-decoration: none;
  border: 1px solid #333;
  border-radius: 4px;
}

/* Скрытие на мобильных */
@media (max-width: 768px) {
  .sidebar { display: none; }
  .main { width: 100%; }
}

Flex для меню, inline-block для кнопок, none для адаптива.

**Реальный пример:**

css
/*visibility vs display */
.collapsed {
  display: none; /* Не занимает место */
}

.invisible {
  visibility: hidden; /* Занимает место, но невидим */
}

/* Паттерн: показ/скрытие */
.menu-toggle:checked ~ .nav {
  display: flex;
}

/* Flex-контейнер */
.flex-container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

/* Grid-контейнер */
.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 1rem;
}

/* Inline-flex для иконок в тексте */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.25rem 0.5rem;
  background: #e3f2fd;
  border-radius: 999px;
  font-size: 0.875rem;
}

visibility vs display, flex/grid контейнеры, inline-flex. Это пример будущих тем: flexbox (C13), grid (C15) и псевдоклассы вроде :checked (C17).


Частые ошибки

**Неправильно:** Ставить width/height на inline-элементы

**Почему:** Inline-элементы ИГНОРИРУЮТ width/height. Это не работает!

**Правильно:** Для width/height на строчных элементах используйте display: inline-block.

**Неправильно:** Путать display: none и visibility: hidden

**Почему:** display: none — элемент исчезает и не занимает место. visibility: hidden — невидим, но место сохраняет.

**Правильно:** Нужно место → visibility: hidden. Нужно убрать → display: none.

**Неправильно:** Использовать float для раскладки

**Почему:** Float — устаревший способ. Modern layout: flexbox (1D), grid (2D).

**Правильно:** Для раскладки — flexbox или grid. Float — только для обтекания текста вокруг картинки.


Важно запомнить

  • Block: вся ширина, новая строка
  • Inline: ширина содержимого, width/height НЕ работают
  • Inline-block: inline + block (width/height работают)
  • display: none — скрывает без места
  • Flex/grid — современная альтернатива float для раскладки

Связь

Назад: Вы знаете margin и padding (C8) — display определяет, как элементы занимают пространство.

Вперёд: В следующем уроке (C10) вы изучите размеры элементов: width, height, min/max и стратегии задания размеров.

Материалы курса CSS — PROlab Academy.