При створенні CSS складність макетів була не такою, якою вона буває в наші дні. Раніше макети були з фіксованою шириною і невеликими варіаціями розташування блоків, а сьогодні макети сайтів можуть набувати практично будь-яких обрисів.
Колись існував золотий стандарт макету веб-сайту, який намагалися створити, але це було важко зробити правильно: Макет Святого Грааля.
Макет дотримувався наступних правил:
- «Плаваюча» ширина центральної частини та фіксована ширина сайдбарів
- Центральна частина в розмітці повинна йти раніше, ніж два сайдбари (але після header'а)
- Усі три колонки повинні бути однакової висоти, незалежно від вмісту
- Футер повинен бути завжди притиснутий до низу, навіть якщо контент не заповнює в'юпорт
- Макет має бути чуйним, всі розділи повинні схлопуватися в один стовпчик на маленьких екранах
Інструментами для роботи були таблиці і float, і жоден з них не підходив для цього завдання. Технічно це було можливо, але були потрібні деякі прийоми. Після того, як flexbox отримав підтримку в основних браузерах, цей макет перетворився зі "святого Грааля" на загальнодоступний; він був скрізь, тому що пропонував відмінний інтерфейс користувача і був доступний для всіх розробників.
Flexbox – це відносно новий режим розмітки в CSS3, призначений для поліпшення вирівнювання, напрямку та порядку елементів в контейнері, навіть якщо він є динамічним або з невідомими розмірами.
Приклад реалізації макету Грааля за допомогою технології Flexbox:
See the Pen maket Graalya by kravets (@raisa69) on CodePen.
Верстка макету адаптивної веб-сторінки
- макет сторінки на екранах більше 980px
- макет на екранах більше 580px і менше 980px
- макет на екранах менше 580px
Вихідний код веб-сторінки:
See the Pen flexbox maket2 task by kravets (@raisa69) on CodePen.
Реалізація структури веб-сторінки за допомогою html-коду виглядає так:
<nav class="col-1">Nav</nav>
<div class="col-2">
<header>Header</header>
<main class="content">
<article>Article</article>
<aside>Aside</aside>
</main>
<footer>Footer</footer>
</div>
</body>
Тіло веб-сторінки <body> </body> є флекс-контейнером, а блоки col-1 col-2 є флекс-елементами
Флекс-елементи потрібно розташувати у рядок у флекс-контейнері:
min-height: 100vh;
flex-direction: row;
margin: 0;
}
Ширина флекс-елементів col-1, col-2 буде умовно дорівнювати 1 частині ширини екрану і 5 частинам відповідно.
Блок .col-2 містить вкладені блоки header, content, footer, тому для гнучкості цих блоків на малих екранах, .col-2 потрібно зробити флекс-контейнером, у якому вкладені блоки розміщуються у колонку:
display: flex;
flex-direction: column;
flex: 5;
}
Блок .content теж містить вкладені блоки article, aside, тому потрібно блок .content зробити флекс-контейнером у якому флекс-елементи розташовуються в рядок:
display: flex;
flex-direction: row;
}
Ширину флек-елементів article, aside задати відповідно у співвідношенні 3:1 до ширини екрану
flex: 3;
min-height: 60vh;
}
.content > aside {
background: beige;
flex: 1;
}
Вистоту блоків header, content, footer можна розподілити, виходячи із загальної висоти екрану 100vh: 20vh header, 40vh content, 20vh footer
background: yellowgreen;
height: 20vh;
}
За допомогою медіа-запитів можна змінити поведігку блоків на екранах менших за 980px, щоб тіло веб-сторінки розмістило блоки у колонку, а блок col-1 зайняв всю доступну ширину 100%:
{
body{
flex-direction:column;
}
.col-1{
width:100%;
}
На екранах розміром менше 580px всі блоки мають вишикуватись у колонку:
Реалізувати макет сторінки з вихідним кодом, згідно зразка:
See the Pen maket-block_flex-task by kravets (@raisa69) on CodePen.
Завдання 2
Створити макет веб-сторінки такого зразка:
Завдання 3
Створити макет веб-сторінки згідно зразка
Завдання 4
See the Pen Flexbox Basic task by kravets (@raisa69) on CodePen.
g