Grid и Flex — это два мощных инструмента CSS для создания макетов, но с разными подходами:
/* Flexbox — для одномерных макетов */
.container {
display: flex;
justify-content: space-between;
}
/* Grid — для двумерных макетов */
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto auto;
}CSS Grid и Flexbox — это два современных инструмента для создания макетов, каждый со своими сильными сторонами. Понимание их различий поможет выбрать правильный инструмент для конкретной задачи. 🎯
| Характеристика | Flexbox | Grid |
|---|---|---|
| Размерность | Одномерный (строка или столбец) | Двумерный (строки и столбцы) |
| Направление | Основная и поперечная оси | Строки и столбцы одновременно |
| Контроль | Контроль над элементами | Контроль над всей сеткой |
| Выравнивание | Распределение пространства | Точное позиционирование |
| Сложность | Проще для начинающих | Мощнее, но сложнее |
Flexbox идеален для одномерных макетов и компонентов:
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
}
.card-content {
display: flex;
flex-direction: column;
gap: 10px;
}<nav class="navbar">
<div class="logo">Logo</div>
<ul class="menu">
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
</nav>Grid превосходен для двумерных макетов и сложных структур:
.dashboard {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto 1fr auto;
gap: 20px;
}
.header {
grid-column: 1 / -1;
}
.sidebar {
grid-row: 2 / 3;
}<div class="dashboard">
<header class="header">Заголовок</header>
<aside class="sidebar">Боковая панель</aside>
<main class="content">Основной контент</main>
<footer class="footer">Подвал</footer>
</div>.menu {
display: flex;
justify-content: space-between;
align-items: center;
}.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}.product-card {
display: flex;
flex-direction: column;
}
.product-features {
display: grid;
grid-template-columns: repeat(2, 1fr);
}Часто лучшее решение — использовать оба инструмента:
.page-layout {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-rows: auto 1fr auto;
}
.navigation {
display: flex;
justify-content: space-between;
}Используйте Flexbox для:
Используйте Grid для:
Комбинируйте их:
Выбор между Grid и Flex зависит от конкретной задачи:
Понимание сильных сторон каждого инструмента позволит создавать более эффективные, гибкие и поддерживаемые макеты. 🚀