22.1. Адаптивна верстка
Адаптивна верстка змінює дизайн сторінки в залежності від поведінки користувача, платформи, розміру екрану і орієнтації девайса і є невід'ємною частиною сучасної веб-розробки.
Пошукові системи використовують ряд критеріїв для оцінки адаптивності сайту при перегляді на мобільних пристроях. Google намагається спростити користування Інтернетом для власників смартфонів і планшетів, відзначаючи в мобільній видачу адаптовані під мобільні пристрої сайти спеціальною позначкою mobile-friendly.
Адаптивна верстка передбачає відсутність горизонтальної смуги прокрутки і масштабованих областей при перегляді на будь-якому пристрої, читабельний текст і великі області для клікабельних елементів.
Для чуйного дизайну ширина основного контейнера сайту задається в %, при цьому вона може бути дорівнює як 100% ширини вікна браузера, так і менше. Ширина стовпців сітки також задається в %. В адаптивному дизайні ширина основного контейнера і стовпців сітки фіксується за допомогою значень в px.
Приклад верстки головної сторінки
Сторінка складається з трьох основних блоків:
- заголовок (шапка),
- контейнер-обгортка для основного вмісту і сайдбара, і
- нижній колонтитул (футер).
1. Метатеги і розділ <head>
1) Додамо в розділ <head> необхідні файли - посилання на використовувані шрифти, бібліотеку jQuery, а також плагін prefixfree (щоб не писати для властивостей браузерні префікси):
<!DOCTYPE html>
<Html>
<Head>
<Meta charset = "utf-8">
<Meta name = "viewport" content = "width = device-width, initial-scale = 1">
<title> Адаптивна верстка сайту </title>
<Link rel = "stylesheet" type = "text / css" href = "https://fonts.googleapis.com/css?family=Open+Sans:400,400italic,600,600italic,700,700italic|Playfair+Display:400,700&subset = latin, cyrillic ">
<Link rel = "stylesheet" type = "text / css" href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.css">
<Link rel = "stylesheet" type = "text / css" href = "1.css">
<Script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"> </script>
<Script src = "https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"> </script>
</Head>
<Body>
2. Шапка сторінки
У шапці сторінки <header> помістимо наступні елементи-контейнери:
- логотип <a class="logo">;
- кнопку для показу / приховування головного меню <div class="nav-toggle">;
- головне меню <ul id="menu">;
- форму пошуку по сайту <form id="searchform">.
<Header>
<Nav class = "container">
<a class="logo" href="">
<Span> L </span>
<Span> O </span>
<Span> G </span>
<Span> O </span>
</a>
<Div class = "nav-toggle"> <span> </span> </div>
<Form action = "" method = "get" id = "searchform">
<Input type = "text" placeholder = "Шукати на сайті ...">
<Button type = "submit"> <i class = "fa fa-search"> </i> </button>
</Form>
<Ul id = "menu">
<Li> <a href=""> Блог </a> </li>
<Li> <a href=""> Портфоліо </a> </li>
<Li> <a href=""> Про автора </a> </li>
</Ul>
</Nav>
</Header>
3. Блок з коротким змістом статті
Анонс статей задамо елементом <article id="post-1" class="post">:
<Div class = "container">
<Div class = "posts-list">
<Article id = "post-1" class = "post">
<Div class = "post-image"> <a href=""> <img src = "https://allatravesti.com/assets/uploads/images/materials/a0e04-%5Ea07e48e72af174e259a5b65efad143def1dbe3b804c1d7dc59%5Epimgpsh_fullsize_distr.jpg"> </a> </div>
<Div class = "post-content">
<Div class = "category"> <a href=""> Дизайн </a> </div>
<H2 class = "post-title"> Зима </h2>
<P> Мій перший сайт</p>
<Div class = "post-footer">
<a class="more-link" href=""> Продовжити читання </a>
<Div class = "post-social">
<a href="" target="_blank"> <i class = "fa fa-facebook"> </i> </a>
<a href="" target="_blank"> <i class = "fa fa-twitter"> </i> </a>
<a href="" target="_blank"> <i class = "fa fa-pinterest"> </i> </a>
</Div>
</Div>
</Div>
</Article>
<Article id = "post-2" class = "post">
...
</Article>
</Div>
4. Бічна колонка
У бічну колонку <aside> додамо список категорій, останні записи і форму підписки на розсилку:
<Aside>
<Div class = "widget">
<H3 class = "widget-title"> Категорії </h3>
<Ul class = "widget-category-list">
<Li> <a href=""> Дизайн </a> (2) </li>
<Li> <a href=""> Верстка </a> (5) </li>
<Li> <a href=""> Відео </a> (1) </li>
</Ul>
</Div>
<Div class = "widget">
<H3 class = "widget-title"> Останні записи </h3>
<Ul class = "widget-posts-list">
<Li>
<Div class = "post-image-small">
<a href=""> <img src = "https://www.segodnya.ua/img/article/11759/82_main_new.1538482973.jpg"> </a>
</Div>
<H4 class = "widget-post-title"> Весна </h4>
</ Li>
<Li>
<Div class = "post-image-small">
<a href=""> <img src = "https://ubr.ua/img/article/38670/84_main.jpeg"> </a>
</Div>
<H4 class = "widget-post-title"> Літо </h4>
</Li>
<Li>
<Div class = "post-image-small">
<a href=""> <img src = "http://ogo.ua/images/articles/1/1464776760.jpeg">
</a>
</Div>
<H4 class = "widget-post-title"> Осінь </h4>
</Li>
<Div class = "post-image-small">
<a href=""> <img src = "http://novadoba.com.ua/uploads/posts/2014-08/1409213719_osin.jpg">
</a>
</Div>
</Ul>
</Div>
<Div class = "widget">
<H3 class = "widget-title"> Підписка на розсилку </h3>
<Form action = "" method = "post" id = "subscribe">
<Input type = "email" name = "email" placeholder = "Ваш email" required>
<Button type = "submit"> <i class = "fa fa-paper-plane-o"> </i> </button>
</Form>
</Div>
</Aside>
</Div>
5. Нижній колонтитул
У підвалі сторінки розмістимо інформацію про копірайт, кнопки соціальних мереж і посилання на електронну пошту:
<Footer>
<Div class = "container">
<Div class = "footer-col"> <span> Мій сайт 2018 </span> </div>
<Div class = "footer-col">
<Div class = "social-bar-wrap">
<a title="Facebook" href="" target="_blank"> <i class = "fa fa-facebook"> </i></a>
<a title="Twitter" href="" target="_blank"> <i class = "fa fa-twitter"> </i> </a>
<a title="Pinterest" href="" target="_blank"> <i class = "fa fa-pinterest"> </i> </a>
<a title="Instagram" href="" target="_blank"> <i class = "fa fa-instagram"> </i> </a>
</Div>
</Div>
<Div class = "footer-col">
<a href="mailto:admin@yoursite.ru"> Написати листа </a>
</Div>
</Div>
</Footer>
</Body>
</Html>
6. Стилі шапки та її вмісту
header {
width: 100%;
background: white;
box-shadow: 3px 3px 1px rgba (0,0,0, .05);
padding: 15px 0;
margin-bottom: 30px;
position: relative;
}
/ * Логотип * /
.logo {
display: block;
float: left;
}
.logo span {
color: white;
display: inline-block;
width: 30px;
height: 30px;
line-height: 30px;
border-radius: 50%;
margin: 5px 0;
text-align: center;
text-shadow: 2px 2px 1px rgba (0,0,0, .4);
}
.logo span: nth-child (odd) {
background: # EF5A42;
}
.logo span: nth-child (even) {
background: # F8B763;
}
/ * Меню * /
#menu {
float: right;
}
#menu li {
display: inline-block;
margin-right: 30px;
}
#menu a {
color: # 111;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 600;
display: block;
line-height: 40px;
}
#menu a: hover {
color: # EF5A42;
}
#menu li: last-child {
margin-right: 0;
}
/ * Форма пошуку * /
#searchform {
float: right;
margin-left: 46px;
display: inline-block;
position: relative;
}
#searchform input {
width: 170px;
float: left;
border: none;
padding-left: 10px;
height: 40px;
overflow: hidden;
outline: none;
color: # 9E9C9C;
font-style: italic;
}
#searchform button {
background: transparent;
height: 40px;
border: none;
position: absolute;
right: 10px;
color: # EF5A42;
cursor: pointer;
font-size: 18px;
}
#searchform input: focus {
outline: 2px solid # EBEBE3;
}
/ * Кнопка перемикання меню, що з'являється при ширині 768px * /
.nav-toggle {
display: none;
position: relative;
float: right;
width: 40px;
height: 40px;
margin-left: 20px;
background: # EF5A42;
cursor: pointer;
}
.nav-toggle span {
display: block;
position: absolute;
top: 19px;
left: 8px;
right: 8px;
height: 2px;
background: white;
}
.nav-toggle span: before, .nav-toggle span: after {
content: "";
position: absolute;
display: block;
left: 0;
width: 100%;
height: 2px;
background: white;
}
.nav-toggle span: before {
top: -10px;
}
.nav-toggle span: after {
bottom: -10px;
}
/ * Клас, який буде додано до верхнього меню при натисканні на кнопку і покаже приховане меню * /
# Menu.active {
max-height: 123px;
}
7. Стилі для блоку з основним вмістом
/ * Лівий контейнер * /
.posts-list {
margin-bottom: 30px;
width: 64%;
float: left;
}
/ * Блок для статті * /
.post {
margin-bottom: 35px;
}
.post-content p {
line-height: 1.5;
padding-bottom: 1em;
}
.post-image {
margin-bottom: 30px;
}
.category {
margin-bottom: 15px;
}
.category a {
color: # F8B763;
text-transform: uppercase;
}
.post-title {
margin-bottom: 12px;
font-size: 26px;
}
/ * Блок з кнопкою "продовжити читання" і кнопками соціальних мереж * /
.post-footer {
border-top: 1px solid # EBEBE3;
border-bottom: 1px solid # EBEBE3;
position: relative;
margin-top: 15px;
}
.more-link {
position: relative;
display: inline-block;
font-size: 10px;
text-transform: uppercase;
color: white;
line-height: 44px;
padding: 0 22px;
background: # 3C3D41;
letter-spacing: 0.1em;
white-space: nowrap;
}
.more-link: after {
content: '';
display: block;
position: absolute;
width: 0;
height: 0;
top: 0;
right: 0;
border: solid transparent;
border-width: 22px 18px;
border-left-color: # 3C3D41;
transform: translateX (100%);
}
.post-social {
position: absolute;
left: auto;
top: 50%;
right: 0;
text-align: right;
transform: translateY (-50%);
padding: 0;
font-size: 12px;
}
.post-social a {
display: inline-block;
margin-left: 8px;
color: # F8B763;
width: 25px;
height: 25px;
line-height: 23px;
text-align: center;
border-radius: 50%;
border: 1px solid;
}
8. Стилі для бічної колонки
/ * Правий контейнер * /
aside {
width: 33%;
float: right;
}
/ * Блок для віджетів * /
.widget {
padding: 20px 15px;
background: white;
font-size: 13px;
margin-bottom: 30px;
box-shadow: 3px 3px 1px rgba (0,0,0, .05);
}
.widget-title {
font-size: 18px;
padding: 10px;
margin-bottom: 20px;
text-align: center;
border: 2px solid # F8B763;
box-shadow: 3px 3px 0 0 # F8B763;
}
.widget-category-list li {
border-bottom: 1px solid # EBEBE3;
padding: 10px 0;
color: # c6c6c6;
font-style: italic;
}
.widget-category-list li: last-child {
border-bottom: none;
}
.widget-category-list li a {
color: # 626262;
margin-right: 6px;
font-style: normal;
}
.widget-category-list li a: before {
content: "\ f105";
display: inline-block;
font-family: 'FontAwesome';
margin-right: 10px;
color: # c6c6c6;
}
.widget-posts-list li {
border-top: 1px solid # EBEBE3;
padding: 15px 0;
}
.widget-posts-list li: nth-child (1) {
border-top: none;
}
.post-image-small {
width: 30%;
float: left;
margin-right: 15px;
}
.widget-post-title {
float: left;
}
/ * Форма підписки * /
#subscribe {
position: relative;
width: 100%;
padding: 15px 0;
}
#subscribe input {
width: 100%;
display: block;
float: left;
border: 2px solid # EBEBE3;
padding: 0 0 0 10px;
height: 40px;
position: relative;
outline: none;
color: # 9E9C9C;
font-style: italic;
}
#subscribe button {
padding: 0 15px;
background: transparent;
height: 40px;
border: none;
position: absolute;
right: 0;
color: # EF5A42;
cursor: pointer;
font-size: 18px;
}
#subscribe input: focus + button {
background: # EF5A42;
color: white;
}
aside {
width: 33%;
float: right;
}
/ * Блок для віджетів * /
.widget {
padding: 20px 15px;
background: white;
font-size: 13px;
margin-bottom: 30px;
box-shadow: 3px 3px 1px rgba (0,0,0, .05);
}
.widget-title {
font-size: 18px;
padding: 10px;
margin-bottom: 20px;
text-align: center;
border: 2px solid # F8B763;
box-shadow: 3px 3px 0 0 # F8B763;
}
.widget-category-list li {
border-bottom: 1px solid # EBEBE3;
padding: 10px 0;
color: # c6c6c6;
font-style: italic;
}
.widget-category-list li: last-child {
border-bottom: none;
}
.widget-category-list li a {
color: # 626262;
margin-right: 6px;
font-style: normal;
}
.widget-category-list li a: before {
content: "\ f105";
display: inline-block;
font-family: 'FontAwesome';
margin-right: 10px;
color: # c6c6c6;
}
.widget-posts-list li {
border-top: 1px solid # EBEBE3;
padding: 15px 0;
}
.widget-posts-list li: nth-child (1) {
border-top: none;
}
.post-image-small {
width: 30%;
float: left;
margin-right: 15px;
}
.widget-post-title {
float: left;
}
/ * Форма підписки * /
#subscribe {
position: relative;
width: 100%;
padding: 15px 0;
}
#subscribe input {
width: 100%;
display: block;
float: left;
border: 2px solid # EBEBE3;
padding: 0 0 0 10px;
height: 40px;
position: relative;
outline: none;
color: # 9E9C9C;
font-style: italic;
}
#subscribe button {
padding: 0 15px;
background: transparent;
height: 40px;
border: none;
position: absolute;
right: 0;
color: # EF5A42;
cursor: pointer;
font-size: 18px;
}
#subscribe input: focus + button {
background: # EF5A42;
color: white;
}
9. Стилі для нижнього колонтитула
Підвал сайту розділимо на три рівних стовпці:
footer {
padding: 30px 0;
background: # 3C3D41;
color: white;
}
.footer-col {
width: 33.3333333333%;
float: left;
}
.footer-col a {
color: white;
}
.footer-col: last-child {
text-align: right;
}
.social-bar-wrap {
text-align: center;
}
.social-bar-wrap a {
padding: 0 7px;
font-size: 18px;
}
footer {
padding: 30px 0;
background: # 3C3D41;
color: white;
}
.footer-col {
width: 33.3333333333%;
float: left;
}
.footer-col a {
color: white;
}
.footer-col: last-child {
text-align: right;
}
.social-bar-wrap {
text-align: center;
}
.social-bar-wrap a {
padding: 0 7px;
font-size: 18px;
}
10. Медіа-запити
@media (max-width: 768px) {
/ * Показуємо кнопку для перемикання верхньої навігації * /
.nav-toggle {
display: block;
}
header {
padding: 10px 0;
}
/ * Приховуємо верхнє меню, скасовуємо обтікання, позиціонуємо його, змістивши на висоту шапки сайту * /
#menu {
max-height: 0;
background: white;
float: none;
position: absolute;
overflow: hidden;
top: 63px;
right: 0;
left: 0;
margin: 0;
padding: 0;
z-index: 3;
}
/ * Робимо елементи списку блоковими, щоб вони розташовувалися один під одним * /
#menu li {
display: block;
padding-left: 15px;
border-bottom: 1px solid # EBEBE3;
margin-right: 0;
}
/ * Скасовуємо обтікання лівій і правій колонок, встановлюємо їм ширину 100% * /
.posts-list, aside {
width: 100%;
float: none;
}
.widget-post-title {
font-size: 1.5em;
}
}
@media (max-width: 480px) {
/ * Вирівнюванням логотип по центру * /
nav {
text-align: center;
}
/ * Скасовуємо обтікання для логотипу * /
.logo {
float: none;
margin-bottom: 15px;
}
/ * Позиціонуємо меню на збільшену висоту шапки * /
#menu {
top: 118px;
}
/ * Позиціонуємо форму пошуку по лівому краю * /
#searchform {
float: left;
margin-left: 0;
}
/ * Прибираємо верхню і нижню межі і вирівнюємо кнопку по центру * /
.post-footer {
border-top: none;
border-bottom: none;
text-align: center;
}
/ * Скасовуємо позиціонування кнопок соцмереж * /
.post-social {
position: static;
text-align: center;
transform: none;
margin-top: 20px;
}
.widget-post-title {
font-size: 1.2em;
}
/ * Скасовуємо обтікання для стовпців підвалу сторінки * /
.footer-col {
float: none;
margin-bottom: 20px;
width: 100%;
text-align: center;
}
.footer-col: last-child {
text-align: center;
margin-bottom: 0;
}
}
/ * Показуємо кнопку для перемикання верхньої навігації * /
.nav-toggle {
display: block;
}
header {
padding: 10px 0;
}
/ * Приховуємо верхнє меню, скасовуємо обтікання, позиціонуємо його, змістивши на висоту шапки сайту * /
#menu {
max-height: 0;
background: white;
float: none;
position: absolute;
overflow: hidden;
top: 63px;
right: 0;
left: 0;
margin: 0;
padding: 0;
z-index: 3;
}
/ * Робимо елементи списку блоковими, щоб вони розташовувалися один під одним * /
#menu li {
display: block;
padding-left: 15px;
border-bottom: 1px solid # EBEBE3;
margin-right: 0;
}
/ * Скасовуємо обтікання лівій і правій колонок, встановлюємо їм ширину 100% * /
.posts-list, aside {
width: 100%;
float: none;
}
.widget-post-title {
font-size: 1.5em;
}
}
@media (max-width: 480px) {
/ * Вирівнюванням логотип по центру * /
nav {
text-align: center;
}
/ * Скасовуємо обтікання для логотипу * /
.logo {
float: none;
margin-bottom: 15px;
}
/ * Позиціонуємо меню на збільшену висоту шапки * /
#menu {
top: 118px;
}
/ * Позиціонуємо форму пошуку по лівому краю * /
#searchform {
float: left;
margin-left: 0;
}
/ * Прибираємо верхню і нижню межі і вирівнюємо кнопку по центру * /
.post-footer {
border-top: none;
border-bottom: none;
text-align: center;
}
/ * Скасовуємо позиціонування кнопок соцмереж * /
.post-social {
position: static;
text-align: center;
transform: none;
margin-top: 20px;
}
.widget-post-title {
font-size: 1.2em;
}
/ * Скасовуємо обтікання для стовпців підвалу сторінки * /
.footer-col {
float: none;
margin-bottom: 20px;
width: 100%;
text-align: center;
}
.footer-col: last-child {
text-align: center;
margin-bottom: 0;
}
}
11. Скрипт для мобільного меню
За показ-приховування верхнього меню при кліці на кнопку (перемикається висота меню - від нульової до рівної її вмісту) відповідає код jQuery, який ми раніше додали в розмітку сторінки перед закриває тегом </body>:
<Script>$ ( '. Nav-toggle'). On ( 'click', function () { $ ( '# Menu'). ToggleClass ( 'active');});</ Script>
22.2. Кросбраузерна оптимізація сторінок сайту
Тестування кросбраузерної сумісності (важлива складова частина розробки сайту) – це перевірка того, як виглядають всі веб-сторінки при перегляді в різних браузерах (наприклад, в таких веб-переглядачах як Chrome, Firefox або Internet Explorer). Зрозуміло, що під абсолютно всі браузери адаптувати сайт не вийде, але можна почати з тих, якими користуються більшість відвідувачів вашого (дізнатися це можна, наприклад, зі статистики Google Analytics).
Чому важливо тестувати кросбраузерну сумісність?
Сучасні користувачі мережі Інтернет мають широкий вибір веб-переглядачів (браузерів). Якщо ви не проведете тестування та/або не проведете зміну верстки і стилів під найпопулярніші браузери, ви просто втратите багатьох потенційних відвідувачів, оскільки для них ваш сайт буде недоступним або важким для перегляду. Це ж стосується і мобільної верстки (оптимізації сайту під мобільні пристрої).
Що впливає на труднощі при перегляді мого сайту?
Існує ряд труднощів, які можуть бути у користувачів при відвідуванні вашого сайту. Зважаючи на велику кількість змінних – в тому числі і тих, що не залежать від вас, — кожен відвідувач, можливо, буде бачити ваш сайт трохи інакше, ніж ви того б хотіли.
Ось основні елементи, які можуть викликати проблеми із відображенням сайту:
апаратне забезпечення користувача, програмне забезпечення, більш ранні версії браузерів, деякі відвідувачі можуть не оновлювати свої браузери протягом дуже довгого часу, і це може викликати конфлікти сумісності при перегляді вашого сайту (особливо, якщо він виконаний з використанням найсучасніших технологій)
Основні інструменти для тестування кросбраузерної сумісності
Якщо ви не експерт з тестування у веб-розробці, не хвилюйтеся: в мережі Інтернет досить і платних, і безкоштовних ресурсів для цього, і вам не потрібно буде створювати свою власну систему тестування, «але»: україномовних ресурсів немає, всі вони на англійській мові.
Ви також можете завантажити і встановити на своєму комп’ютері всі необхідні версії браузерів, але це рішення не для людей зі слабкими нервами. Врахуйте також, що деякі браузери оновлюються у фоновому режимі і без вашого дозволу.
Для професійних цілей підійдуть тільки платні рішення. Практично всі вони вимагають наявності підписки, але надають невеликий безкоштовний тестовий період. До таких ресурсів можна віднести: BrowserStack, Cross Browser Testing, Sauce Labs.
Для визначення підтримки елементів HTML5 та CSS3 в різних версіях браузерів скористайтеся сайтом Can I use.
Якщо для вашого сайту критично важлива підтримка в старих браузерах, можете скористатися наступними плагінами і JavaScript-бібліотеками: HTML5 Shiv, Modernizr, Respond.
При підключених вищевказаних плагінах вам потрібно буде писати окремі стилі CSS, додавати потрібні медіа-запити, а в деяких випадках і браузерні префікси css-стилів. Це дозволить вам значно розширити кросбраузерну підтримку для вашого сайту.
Хоча тестування браузерної сумісності – не найприємніший або надихаючий аспект створення нового веб-сайту, але це один із наріжних каменів успішного сайту, на якому відвідувачі стають клієнтами завдяки простоті використання і професійному оформленню.
Немає коментарів:
Дописати коментар