← Назад к вопросам

Для чего нужен Display?

2.0 Middle🔥 121 комментариев
#HTML и CSS

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

CSS свойство display и его назначение

display - это одно из самых важных CSS свойств. Оно определяет, как элемент должен быть отрендерен в документе, то есть как он участвует в потоке расположения (layout flow) страницы.

Основные значения display

1. display: block

/* Элемент занимает всю ширину родителя и начинает новую строку */
body, div, p, h1, section {
  display: block; /* По умолчанию для большинства блочных элементов */
}
<!-- Блочные элементы располагаются друг под другом -->
<div>Блок 1</div>
<div>Блок 2</div>
<div>Блок 3</div>

Характеристики:

  • Занимает 100% ширины родителя
  • Начинает новую строку
  • Margin, padding и border работают полностью
  • Высота и ширина можно задать

2. display: inline

/* Элемент занимает только столько места, сколько нужно */
a, span, strong, em {
  display: inline; /* По умолчанию для встроенных элементов */
}
<!-- Встроенные элементы располагаются в одну строку -->
<p>
  Это <span>встроенный</span> текст
  и <a href="#">ссылка</a> в одной строке.
</p>

Характеристики:

  • Занимает только необходимую ширину
  • Располагается в одну строку с другими inline элементами
  • Вертикальный margin не работает
  • Высоту и ширину установить нельзя
  • Padding работает, но может перекрывать другие элементы

3. display: inline-block

/* Гибрид inline и block */
input, button, img {
  display: inline-block; /* По умолчанию для некоторых элементов */
}
<!-- Располагаются в одну строку, но можно задать размеры -->
<button>Кнопка 1</button>
<button>Кнопка 2</button>
<button>Кнопка 3</button>

Характеристики:

  • Располагается в строку (как inline)
  • Но можно задать ширину, высоту и вертикальный margin (как block)
  • Очень полезно для выравнивания элементов в ряд

4. display: none

/* Элемент полностью скрыт и не занимает место */
.hidden {
  display: none;
}

/* Может быть полезно для адаптивного дизайна */
@media (max-width: 768px) {
  .desktop-only {
    display: none;
  }
}

Характеристики:

  • Элемент не отображается
  • Не занимает место в layout
  • В отличие от visibility: hidden (которая скрывает, но оставляет место)

Современные значения display

5. display: flex

/* Гибкая система для одномерного макета (строка или столбец) */
.container {
  display: flex;
  flex-direction: row; /* или column */
  justify-content: space-between; /* выравнивание по горизонтали */
  align-items: center; /* выравнивание по вертикали */
  gap: 16px; /* расстояние между элементами */
}
<div class="container">
  <div>Элемент 1</div>
  <div>Элемент 2</div>
  <div>Элемент 3</div>
</div>

Flexbox решает множество проблем классической вёрстки:

/* Идеальное центрирование (было долгой проблемой) */
.card {
  display: flex;
  justify-content: center; /* горизонтально */
  align-items: center;     /* вертикально */
  height: 200px;
}

/* Быстро выравнять элементы */
.header {
  display: flex;
  justify-content: space-between; /* logo слева, nav справа */
  align-items: center;
}

/* Адаптивная сетка */
.grid {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.grid-item {
  flex: 1 1 calc(33.333% - 10px); /* 3 колонки */
}

6. display: grid

/* Двумерная система для сложных макетов (строки и столбцы одновременно) */
.grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* 3 равные колонки */
  grid-template-rows: auto 1fr auto;   /* заголовок, содержимое, подвал */
  gap: 20px;
}

.header {
  grid-column: 1 / -1; /* занять всю строку */
}

.sidebar {
  grid-column: 1;
  grid-row: 2;
}

.main {
  grid-column: 2 / -1;
  grid-row: 2;
}

Пример классического макета:

<div class="layout">
  <header>Заголовок</header>
  <aside>Боковая панель</aside>
  <main>Основной контент</main>
  <footer>Подвал</footer>
</div>
.layout {
  display: grid;
  grid-template-columns: 200px 1fr; /* боковая панель и основной контент */
  grid-template-rows: auto 1fr auto; /* заголовок, содержимое, подвал */
  height: 100vh;
}

header { grid-column: 1 / -1; }
footer { grid-column: 1 / -1; }
aside { grid-row: 2; }
main { grid-row: 2; }

Сравнение display значений

// Визуально это выглядит так:

// display: block
// [Элемент занимает всю ширину]
// [Элемент занимает всю ширину]

// display: inline
// [Элемент] [Элемент] [Элемент]

// display: inline-block
// [Элемент] [Элемент] [Элемент]
// (но каждый имеет ширину/высоту)

// display: flex
// ┌─────────────────────┐
// │ Item1 Item2 Item3   │
// └─────────────────────┘
// (автоматическое выравнивание)

// display: grid
// ┌───────┬───────┬───────┐
// │ Cell1 │ Cell2 │ Cell3 │
// ├───────┼───────┼───────┤
// │ Cell4 │ Cell5 │ Cell6 │
// └───────┴───────┴───────┘

Практические примеры

Хедер с выравниванием

.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px;
  background: #f5f5f5;
}

.logo {
  font-weight: bold;
}

.nav {
  display: flex;
  gap: 16px;
}

.nav-link {
  text-decoration: none;
  color: #333;
}

Адаптивная карточка

.card {
  display: flex;
  flex-direction: column;
  padding: 16px;
  border: 1px solid #ddd;
  border-radius: 8px;
}

.card-image {
  width: 100%;
  height: 200px;
  object-fit: cover;
}

.card-title {
  margin-top: 12px;
  font-weight: bold;
}

.card-footer {
  display: flex;
  justify-content: space-between;
  margin-top: auto; /* толкает footer вниз */
}

Проблемы и решения

/* Проблема: вертикальный margin collapses для блочных элементов */
.block1 { margin-bottom: 20px; }
.block2 { margin-top: 20px; }
/* Результат: 20px расстояния, не 40px */

/* Решение: используй flex */
.container {
  display: flex;
  flex-direction: column;
  gap: 20px; /* Гарантированное расстояние */
}

Заключение

display - это основа CSS макетов:

  • block - классический блочный элемент
  • inline - встроенный элемент в текст
  • inline-block - гибрид
  • none - скрытие элемента
  • flex - одномерные макеты (строки или столбцы)
  • grid - двумерные макеты (сетки)

В современной вёрстке в основном используются flex и grid. Они решают 90% задач верстки и делают код чище и более поддерживаемым.

Для чего нужен Display? | PrepBro