Опанувати технологію CSS Flexbox для створення одновимірних макетів. Навчитися вирівнювати елементи по горизонталі та вертикалі, створити “шапку” сайту (Header) з навігацією та сітку карток товарів для інтернет-магазину.
justify-content).align-items).flex-wrap).flex-direction: column).Увага: Продовжуємо роботу над інтернет-магазином “TechShop”.
Порада: Якщо у вас ще немає репозиторію, створіть його за допомогою команди
git initта додайте файл.gitignoreз переліком папок та файлів, які не потрібно відстежувати (наприклад,node_modules,.env,dist,build). Ви також можете працювати над створенням власного сайту (наприклад, під час лабораторної роботи ми працювали над сайтом “My Portfolio”). Головна умова - виконання всіх пунктів плану.
<header> є 3 логічні блоки:
<div class="logo">TechShop</div>),<nav class="main-nav">...<ul><li><a href="#">...</nav>`),<div class="user-actions"><button class="btn">Кошик</button></div>)..header до тегу <header>.Так робити не можна: Не намагайтеся вирівнювати ці 3 блоки всередині шапки за допомогою
margin-left: 100pxабоfloat: left. Це “крихкий” спосіб, який зламається на першому ж іншому екрані.
style.css зробіть .header flex-контейнером:
.header {
display: flex;
justify-content: space-between; /* Розставляє блоки по краях */
align-items: center; /* Центрує лого та кнопки по вертикалі */
padding: 1rem 5%;
background-color: var(--bg-color);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.main-nav ul задайте display: flex; gap: 2rem; list-style: none;.Порада: Використовуйте властивість
gapзамістьmarginдля відступів між пунктами меню.gapне створює зайвих відступів по краях контейнера, що робить розрахунки чистішими.
.products-grid для всіх карток.flex-wrap: wrap;, щоб картки не стискалися в один тонкий рядок, а переходили на нові.
.products-grid {
display: flex;
flex-wrap: wrap;
gap: 20px;
justify-content: space-around; /* Рівномірний розподіл простору між картками */
}
Важливо: Без
flex-wrap: wrapваші картки будуть намагатися “втиснутися” в один рядок, навіть якщо їх там 50, що призведе до повного руйнування дизайну.
.product-card):
flex-direction: column. Це дозволяє керувати внутрішніми елементами (заголовок, ціна, кнопка) як стовпцем.
.product-card {
display: flex;
flex-direction: column;
width: calc(25% - 20px); /* Приблизно 4 картки в ряд з урахуванням gap */
min-width: 250px; /* Захист від занадто вузьких карток */
border: 1px solid #eee;
padding: 15px;
}
.product-card button {
margin-top: auto; /* МАГІЯ: штовхає кнопку в самий низ картки, незалежно від довжини тексту вище */
}
Так робити не можна: Не задавайте карткам фіксовану висоту (
height: 500px). Якщо опис товару виявиться довшим, він просто вилізе за межі картки. Картка має сама розтягуватися під контент.
Порада: Використання
margin-top: autoвсередині flex-стовпця — це найкращий спосіб вирівняти кнопки до одного рівня в усіх картках ряду, навіть якщо назви товарів мають різну кількість рядків.
git status.git add ..git commit -m "Lab 4: Accomplish header and grid layout using Flexbox".git push origin main.Головна сторінка сайту має повноцінну “шапку” (де елементи рознесені по краях), а під нею знаходиться сітка однакових карток товарів, які автоматично переносяться на новий рядок при зменшенні вікна.
align-items: center? Як вона б спрацювала без вказання height або padding у контейнера?flex-direction: column до картки товару, якщо і без неї блокові елементи (div, h3, p) стають стовпцем? (Підказка: дивіться на позиціювання кнопки внизу картки).