Поточная вёрстка — это способ компоновки элементов, когда на веб-странице элементы располагаются в том же порядке, что и в коде HTML. Этот метод вёрстки в силу своей простоты применяется к ограниченному типу макетов, где элементы идут друг за другом сверху вниз и слева направо.
На рис. 1 показан пример карточки с вертикальным расположением текста.

Рис. 1. Карточка
Прежде чем приступить к самой вёрстке, эту картинку следует сперва проанализировать и понять, из каких блоков она состоит. Затем произвести деление на эти блоки. Здесь нет чётких правил, поэтому можно придерживаться разных подходов. Вот некоторые из них.
1. Применяются крупные блоки, содержащие в себе блоки поменьше. На рис. 2 такие блоки схематично обозначены красной рамкой.

Рис. 2. Деление карточки на крупные блоки
Всего у нас здесь три блока, для каждого из них в HTML используем блочный элемент <div> с каким-нибудь классом.
<div class="card">
<div class="card-price">…</div>
<div class="card-plan">…</div>
<div class="card-offer">…</div>
</div>
2. Каждая строка считается самостоятельным блоком (рис. 3), при этом она не содержит вложений.

Рис. 3. Деление карточки на мелкие блоки
Здесь можно использовать блочные элементы <div> и <p>. Если какому-то элементу требуется задать стили, то к нему удобнее добавить стилевой класс и обращаться по имени класса.
<div class="card">
<div class="card-price">560 ₽</div>
<div class="card-month">В месяц</div>
<div class="card-plan">Бизнес</div>
<p>15 Проектов</p>
<p>40 ГБ Диск</p>
<p>Неограниченный трафик</p>
<p>AI Конструктор</p>
<p>Антивирус</p>
<p class="card-button"><button>Попробовать</button></p>
</div>
Как видите, в вёрстке практикуются разные подходы по созданию структуры HTML, и все они в целом являются корректными. Какой из них выбрать зависит в первую очередь от личных предпочтений.
Давайте более подробно рассмотрим первый подход к формированию HTML-кода, когда используются крупные блоки, содержащие внутри другие блоки. Так мы будем переходить от общего к частному, от большего к меньшему.
Начинается, естественно, с родительского элемента нашей карточки.
<div class="card">…</div>
Карточка будет содержать три блока — цена, название и список с кнопкой.
<div class="card">
<div class="card-price">…</div>
<div class="card-plan">…</div>
<div class="card-offer">…</div>
</div>
Первый блок с ценой мы разбиваем на два подблока — цена и текст.
<div class="card-price">
<div class="card-price-value">560 ₽</div>
<div class="card-price-month">В месяц</div>
</div>
Второй блок содержит только название карточки.
<div class="card-plan">Бизнес</div>
В третьем блоке будет список <ul> и кнопка <button>. Список удобен для всяческих перечислений, но следует помнить, что у него есть свой собственный стиль, который предварительно следует сбросить.
<div class="card-offer">
<ul class="card-offer-list">
<li>15 Проектов</li>
<li>40 ГБ Диск</li>
<li>Неограниченный трафик</li>
<li>AI Конструктор</li>
<li>Антивирус</li>
</ul>
<div><button class="card-offer-button">Попробовать</button></div>
</div>
Все блоки, которые мы используем для этой карточки, самостоятельно располагаются нужным нам образом. Поэтому в стилях остаётся только красиво оформить элементы — задать им шрифт, цвет текста и фона, добавить скругление кнопке и установить вертикальные промежутки (пример 1).
Пример 1. Вёрстка карточки
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Карточка</title>
<style>
body {
font-family: Arial, Helvetica, sans-serif; /* Шрифт */
}
.card {
width: 300px; /* Ширина карточки */
background: #edf6ff; /* Цвет фона */
color: #939faa; /* Цвет текста */
text-align: center; /* Выравнивание по центру */
}
.card-price, .card-plan, .card-offer, .card-offer-button {
padding: 1rem; /* Пространство вокруг текста */
}
.card-price-value {
color: #1b4268; /* Цвет текста */
font-size: 3rem; /* Размер текста */
font-weight: bold; /* Жирное начертание */
}
.card-plan, .card-offer-button {
background-color: #f60; /* Цвет фона */
color: #fff; /* Цвет текста */
}
.card-offer-list {
margin: 0; /* Обнуляем */
padding: 1rem 0; /* Расстояние сверху и снизу */
list-style: none; /* Убираем маркеры */
}
.card-offer-list > li {
padding-bottom: 0.5rem; /* Расстояние снизу */
}
.card-offer-button {
padding: 0.5rem 2rem; /* Расстояние от текста до края */
text-transform: uppercase; /* Большие буквы */
border: 0; /* Убираем рамку */
border-radius: 30px; /* Радиус скругления */
}
</style>
</head>
<body>
<div class="card">
<div class="card-price">
<div class="card-price-value">560 ₽</div>
<div class="card-price-month">В месяц</div>
</div>
<div class="card-plan">Бизнес</div>
<div class="card-offer">
<ul class="card-offer-list">
<li>15 Проектов</li>
<li>40 ГБ Диск</li>
<li>Неограниченный трафик</li>
<li>AI Конструктор</li>
<li>Антивирус</li>
</ul>
<div><button class="card-offer-button">Попробовать</button></div>
</div>
</div>
</body>
</html>
Результат данного примера показан на рис. 4.

Рис. 4. Карточка
Если требуется разместить несколько таких карточек по горизонтали, то превращаем карточки в строчно-блочные элементы через свойство display.
.card {
display: inline-block; /* Строчно-блочный элемент */
}
Они отличаются от строчных элементов тем, что для них работает свойство margin, позволяющее добавлять промежутки между карточками.
В примере 2 показано создание двух карточек, расположенных по горизонтали. Оформление карточек для разнообразия слегка изменено.
Пример 2. Вёрстка карточек
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Карточка</title>
<style>
body {
font-family: Arial, Helvetica, sans-serif; /* Шрифт */
}
.card {
display: inline-block; /* Строчно-блочный элемент */
margin-right: 1rem; /* Расстояние справа */
width: 250px; /* Ширина карточки */
background: #edf6ff; /* Цвет фона */
color: #939faa; /* Цвет текста */
text-align: center; /* Выравнивание по центру */
}
.card-price, .card-plan, .card-offer, .card-offer-button {
padding: 1rem; /* Пространство вокруг текста */
}
.card-price-value {
color: #1b4268; /* Цвет текста */
font-size: 3rem; /* Размер текста */
font-weight: bold; /* Жирное начертание */
}
.card-plan {
background-color: #1b4268; /* Цвет фона */
color: #fff; /* Цвет текста */
}
.card-offer-list {
margin: 0; /* Обнуляем */
padding: 1rem 0; /* Расстояние сверху и снизу */
list-style: none; /* Убираем маркеры */
}
.card-offer-list > li {
padding-bottom: 0.5rem; /* Расстояние снизу */
}
.card-offer-button {
padding: 0.5rem 2rem; /* Расстояние от текста до края */
text-transform: uppercase; /* Большие буквы */
border: 1px solid #d4dde5; /* Параметры рамки */
background-color: #fff; /* Цвет фона */
border-radius: 30px; /* Радиус скругления */
}
</style>
</head>
<body>
<div class="card">
<div class="card-price">
<div class="card-price-value">440 ₽</div>
<div class="card-price-month">В месяц</div>
</div>
<div class="card-plan">Стандарт</div>
<div class="card-offer">
<ul class="card-offer-list">
<li>10 Проектов</li>
<li>30 ГБ Диск</li>
<li>Неограниченный трафик</li>
<li>AI Конструктор</li>
<li>Антивирус</li>
</ul>
<div><button class="card-offer-button">Попробовать</button></div>
</div>
</div>
<div class="card">
<div class="card-price">
<div class="card-price-value">560 ₽</div>
<div class="card-price-month">В месяц</div>
</div>
<div class="card-plan">Бизнес</div>
<div class="card-offer">
<ul class="card-offer-list">
<li>15 Проектов</li>
<li>40 ГБ Диск</li>
<li>Неограниченный трафик</li>
<li>AI Конструктор</li>
<li>Антивирус</li>
</ul>
<div><button class="card-offer-button">Попробовать</button></div>
</div>
</div>
</body>
</html>
Результат данного примера показан на рис. 5.

Рис. 5. Две карточки
Схожим образом компонуются и строчные элементы. В качестве примера рассмотрим блок со списком меток (рис. 6).

Рис. 6. Блок с метками
Здесь используется три блочных элемента — заголовок, список с метками и область с кнопкой.
<div class="tags">
<h2 class="tags__title">Метки</h2>
<ul class="tags__content">…</ul>
<div class="tags__buttons">…</div>
</div>
Для создания меток можно использовать разные элементы:
- <span>;
- <div>, задав им inline-block;
- <li>, задав им inline-block и сделав сброс стилей.
Списки часто применяются для всяческих перечислений, даже если на привычный список это не очень похоже. Так что и для меток воспользуемся элементом <ul>, убрав через свойство list-style исходные маркеры, и разместив пункты списка горизонтально (пример 3).
Пример 3. Вёрстка меток
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Метки</title>
<style>
body {
background-color: #2b2f37; /* Цвет фона */
font-family: Arial, Helvetica, sans-serif; /* Шрифт */
}
.tags {
background-color: #1c2025; /* Цвет фона */
color: #fff; /* Цвет текста */
padding: 1rem; /* Расстояние от текста до края */
border-radius: 10px; /* Радиус скругления */
}
.tags__title {
font-size: 1.3rem; /* Размер шрифта */
font-weight: normal; /* Нормальное начертание */
margin-top: 0; /* Обнуляем расстояние сверху */
}
.tags__content {
border: 1px solid #4c5361; /* Параметры рамки */
border-radius: 10px; /* Радиус скругления */
padding: 0.5rem; /* Расстояние от текста до края */
margin-bottom: 1rem; /* Расстояние снизу */
list-style: none; /* Убираем маркеры */
}
.tags__content > li {
display: inline-block; /* Строчно-блочный элемент */
margin: 0.5rem; /* Внешний отступ */
}
.tags__content a {
background-color: #1e3959; /* Цвет фона */
color: rgb(255 255 255 / 40%); /* Цвет текста */
text-decoration: none; /* Убираем подчёркивание */
border-radius: 5px; /* Радиус скругления */
white-space: nowrap; /* Запрещаем переносы текста */
padding: 0.3rem 1rem; /* Внутренний отступ */
}
.tags__content a:hover {
background-color: #601717; /* Цвет фона при наведении */
}
.tags__buttons {
text-align: right; /* Выравниваем по правому краю */
}
.tags__button {
background-color: #4ea1fe; /* Цвет фона */
color: #fff; /* Цвет текста */
border: 0; /* Убираем рамку */
border-radius: 5px; /* Радиус скругления */
padding: 0.5rem 1rem; /* Расстояние от текста до края */
}
</style>
</head>
<body>
<div class="tags">
<h2 class="tags__title">Метки</h2>
<ul class="tags__content">
<li><a href="#">Афганская лисица</a></li>
<li><a href="#">Корсак</a></li>
<li><a href="#">Песец</a></li>
<li><a href="#">Песчаная лисица</a></li>
<li><a href="#">Рыжая лисица</a></li>
<li><a href="#">Тибетская лисица</a></li>
<li><a href="#">Фенек</a></li>
</ul>
<div class="tags__buttons"><button class="tags__button">Добавить</button></div>
</div>
</body>
</html>
Строчно-блочные элементы как и строчные идут по горизонтали друг за другом и при необходимости переносятся на другую строку.
Итоги
- При поточной вёрстке макет сперва разбивается на блоки, идущие сверху вниз. При необходимости один блок может содержать в себе подблоки.
- В качестве универсального блочного элемента обычно используется <div>.
- Если элементы располагаются по горизонтали, то для их компоновки используется универсальный строчный элемент <span> или другой элемент, к которому добавляется display со значением inline-block.
- Строчно-блочные элементы отличаются от строчных тем, что для них работает свойство margin.
Автор: Влад Мержевич
Последнее изменение: 07.06.2025