Загрузка данных
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Каталог — Flex и Grid</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h2>Flex</h2>
<div class="catalog catalog-flex">
<!-- Строка 1 -->
<div class="row">
<div class="card">
<h3>Товар 1</h3>
<div class="card-image" style="background:#e0526a;"></div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<div class="card">
<h3>Товар 2</h3>
<div class="card-image" style="background:#e08a4f;"></div>
<p>Sed do eiusmod tempor incididunt ut labore et dolore.</p>
</div>
<div class="card">
<h3>Товар 3</h3>
<div class="card-image" style="background:#4e9f5e;"></div>
<p>Ut enim ad minim veniam, quis nostrud exercitation.</p>
</div>
</div>
<!-- Строка 2 -->
<div class="row">
<div class="card">
<h3>Товар 4</h3>
<div class="card-image" style="background:#c3d92e;"></div>
<p>Duis aute irure dolor in reprehenderit in voluptate.</p>
</div>
<div class="card">
<h3>Товар 5</h3>
<div class="card-image" style="background:#4bbfa7;"></div>
<p>Excepteur sint occaecat cupidatat non proident.</p>
</div>
<div class="card">
<h3>Товар 6</h3>
<div class="card-image" style="background:#2f5fdb;"></div>
<p>Sunt in culpa qui officia deserunt mollit anim.</p>
</div>
</div>
<!-- Строка 3 -->
<div class="row">
<div class="card">
<h3>Товар 7</h3>
<div class="card-image" style="background:#7b2a8a;"></div>
<p>Curabitur pretium tincidunt lacus, sed sagittis.</p>
</div>
<div class="card">
<h3>Товар 8</h3>
<div class="card-image"></div>
<p>Nulla quis sem at nibh elementum imperdiet.</p>
</div>
<div class="card">
<h3>Товар 9</h3>
<div class="card-image" style="background:#4a4a4a;"></div>
<p>Fusce nec tellus sed augue semper porta.</p>
</div>
</div>
</div>
<h2>Grid</h2>
<div class="catalog catalog-grid">
<!-- Строка 1: 4 товара, все на одинаковом расстоянии друг от друга -->
<div class="card">
<h3>Товар 1</h3>
<div class="card-image" style="background:#e0526a;"></div>
<p>Lorem ipsum dolor sit amet, consectetur.</p>
</div>
<div class="card">
<h3>Товар 2</h3>
<div class="card-image" style="background:#e08a4f;"></div>
<p>Sed do eiusmod tempor incididunt.</p>
</div>
<div class="card">
<h3>Товар 3</h3>
<div class="card-image" style="background:#4e9f5e;"></div>
<p>Ut enim ad minim veniam.</p>
</div>
<div class="card">
<h3>Товар 4</h3>
<div class="card-image" style="background:#c3d92e;"></div>
<p>Duis aute irure dolor.</p>
</div>
<!-- Строка 2: слева и справа обычные, посередине длинный -->
<div class="card">
<h3>Товар 5</h3>
<div class="card-image" style="background:#4bbfa7;"></div>
<p>Excepteur sint occaecat cupidatat.</p>
</div>
<div class="card item-wide">
<h3>Товар 6 (широкий)</h3>
<div class="card-image" style="background:#2f5fdb;"></div>
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum, lorem ipsum dolor sit amet.</p>
</div>
<div class="card">
<h3>Товар 7</h3>
<div class="card-image" style="background:#7b2a8a;"></div>
<p>Curabitur pretium tincidunt lacus.</p>
</div>
<!-- Строка 3: произвольные размеры -->
<div class="card item-span2">
<h3>Товар 8 (широкий)</h3>
<div class="card-image"></div>
<p>Nulla quis sem at nibh elementum imperdiet, duis sagittis ipsum praesent mauris.</p>
</div>
<div class="card">
<h3>Товар 9</h3>
<div class="card-image" style="background:#4a4a4a;"></div>
<p>Fusce nec tellus sed augue.</p>
</div>
<div class="card">
<h3>Товар 10</h3>
<div class="card-image" style="background:#e0526a;"></div>
<p>Mauris massa vitae posuere.</p>
</div>
</div>
</body>
</html>
* {
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
padding: 20px;
}
h2 {
font-size: 18px;
margin: 24px 0 12px;
}
/* ==== Общий вид карточки товара (используется и во Flex, и в Grid) ==== */
.card {
border: 1px solid #2f4f4f;
background: #fff;
padding: 12px;
display: flex;
flex-direction: column;
text-align: left;
}
.card h3 {
margin: 0 0 8px;
font-size: 15px;
}
/* Квадрат-заглушка вместо картинки товара */
.card-image {
width: 100%;
height: 100px;
background: #ddd; /* цвет по умолчанию, если не задан inline */
margin-bottom: 8px;
flex-shrink: 0;
}
.card p {
margin: 0;
font-size: 12px;
color: #555;
overflow: hidden;
}
/* ==================== FLEX ==================== */
.catalog-flex {
display: flex;
flex-direction: column;
gap: 16px;
border: 2px solid #2f4f4f;
padding: 16px;
max-width: 720px;
}
/* Каждая строка — flex-контейнер по горизонтали, всегда ровно 3 карточки */
.catalog-flex .row {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
gap: 12px;
}
/* Карточки одинакового фиксированного размера, не зависят от текста внутри */
.catalog-flex .card {
flex: 1 1 0;
min-width: 0;
width: 200px;
height: 260px;
}
/* ==================== GRID ==================== */
.catalog-grid {
display: grid;
grid-template-columns: repeat(4, 1fr); /* 4 равные колонки */
gap: 16px; /* одинаковое расстояние между всеми элементами */
border: 2px solid #2f4f4f;
padding: 16px;
max-width: 720px;
}
.catalog-grid .card {
height: 220px;
}
/* Строка 2: средний товар занимает 2 колонки — получается длинный по центру */
.item-wide {
grid-column: span 2;
}
/* Строка 3: первый товар тоже занимает 2 колонки — строка выглядит "произвольно" */
.item-span2 {
grid-column: span 2;
}