Flexbox — это модель раскладки, которая делает выравнивание и распределение элементов в строку или колонку простым. Для DevBlog он нужен везде: навигация, карточки, хедер, футер.
Включение Flexbox
.container {
display: flex;
}
Этого достаточно, чтобы дочерние элементы выстроились в строку.
Свойства контейнера
flex-direction — направление оси
.container {
display: flex;
flex-direction: row; /* по умолчанию: слева направо */
/* flex-direction: row-reverse; справа налево */
/* flex-direction: column; сверху вниз */
/* flex-direction: column-reverse; снизу вверх */
}
justify-content — выравнивание по главной оси
Главная ось — направление flex-direction (по умолчанию горизонталь).
.container {
justify-content: flex-start; /* по умолчанию: прижать влево */
/* justify-content: flex-end; прижать вправо */
/* justify-content: center; по центру */
/* justify-content: space-between; крайние у краёв, остальные равномерно */
/* justify-content: space-around; равные отступы вокруг каждого */
/* justify-content: space-evenly; строго равные промежутки */
}
align-items — выравнивание по поперечной оси
Поперечная ось перпендикулярна главной (по умолчанию вертикаль).
.container {
align-items: stretch; /* по умолчанию: растянуть до высоты контейнера */
/* align-items: flex-start; по верхнему краю */
/* align-items: flex-end; по нижнему краю */
/* align-items: center; по центру по вертикали */
/* align-items: baseline; по базовой линии текста */
}
gap — отступы между элементами
.container {
display: flex;
gap: 16px; /* одинаковый отступ по обеим осям */
/* gap: 16px 24px; вертикальный | горизонтальный */
}
Заменяет старый подход с margin на каждом дочернем элементе.
flex-wrap — перенос на следующую строку
.cards-grid {
display: flex;
flex-wrap: wrap; /* переносить элементы если не помещаются */
/* flex-wrap: nowrap; по умолчанию: всё в одну строку */
gap: 24px;
}
Свойства дочерних элементов
flex — как элемент растягивается
Сокращение для flex-grow flex-shrink flex-basis.
.sidebar {
flex: 0 0 280px; /* не расти, не сжиматься, ширина 280px */
}
.main-content {
flex: 1; /* занять оставшееся место */
}
order — порядок отображения
.featured-post {
order: -1; /* показать первым вне зависимости от HTML-порядка */
}
align-self — выравнивание конкретного элемента
.cta-button {
align-self: flex-end; /* прижать к нижнему краю контейнера */
}
DevBlog: навигационная панель
<header class="site-header">
<a href="/" class="logo">DevBlog</a>
<nav class="site-nav">
<a href="/" class="nav-link">Главная</a>
<a href="/articles/" class="nav-link">Статьи</a>
<a href="/about/" class="nav-link">Обо мне</a>
</nav>
</header>
.site-header {
display: flex;
justify-content: space-between; /* логотип влево, nav вправо */
align-items: center;
padding: 0 24px;
height: 56px;
border-bottom: 1px solid #e5e7eb;
}
.logo {
font-weight: 700;
font-size: 1.25rem;
color: #111827;
text-decoration: none;
}
.site-nav {
display: flex;
gap: 24px;
}
.nav-link {
color: #374151;
text-decoration: none;
font-weight: 500;
}
DevBlog: ряд карточек с переносом
<section class="posts-grid">
<article class="post-card">...</article>
<article class="post-card">...</article>
<article class="post-card">...</article>
</section>
.posts-grid {
display: flex;
flex-wrap: wrap;
gap: 24px;
}
.post-card {
flex: 1 1 300px; /* минимальная ширина 300px, растягиваться */
max-width: 400px;
padding: 24px;
border: 1px solid #e5e7eb;
border-radius: 8px;
}
При широком экране — 3 карточки в ряд. При узком — каждая занимает всю ширину.
DevBlog: двух-колоночный макет статьи
<div class="article-layout">
<main class="article-content">...</main>
<aside class="article-sidebar">...</aside>
</div>
.article-layout {
display: flex;
gap: 48px;
align-items: flex-start; /* не растягивать колонки по высоте */
max-width: 1100px;
margin: 0 auto;
padding: 40px 24px;
}
.article-content {
flex: 1; /* занять оставшееся место */
min-width: 0; /* позволяет сжиматься — важно для flex! */
}
.article-sidebar {
flex: 0 0 260px; /* фиксированная ширина 260px */
}
Шпаргалка
| Свойство | На контейнере | Значения |
|---|---|---|
flex-direction |
Да | row, column, row-reverse, column-reverse |
justify-content |
Да | flex-start, center, space-between, space-evenly |
align-items |
Да | stretch, center, flex-start, flex-end |
gap |
Да | 16px, 16px 24px |
flex-wrap |
Да | nowrap, wrap |
flex |
На элементе | 1, 0 0 300px, 1 1 auto |
align-self |
На элементе | те же, что align-items |
order |
На элементе | число |
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!