Створюємо фільтрівне портфоліо з адаптивним веб-дизайном
() translation by (you can also view the original English article)
Сьогодні ми будемо використовувати макет Портфоліо в форматі PSD (* PhotoShop Drawing/PhotoShop Document – формат графічного файлу в Adobe Photoshop (розширення файлу), документ Photoshop. Тут і надалі примітка перекладача) з ThemeForest, верстаючи його тільки за допомогою HTML та CSS та роблячи його дизайн адаптивним. Потім ми підемо ще далі та додамо плаґін jQuery Isotope для того, щоб зробити наш макет повнофункціональним фільтрівним портфоліо.
Крок 1: Задаємо організацію проекту
Ми почнемо зі створення простої структури проекту, щоб все було на своїх місцях. Ми створимо три папки:
- css - для розташування файлів CSS
- images - для розташування всіх зображень
- js - для розташування плаґінів jQuery та наших власних скриптів



Крок 2: Документ
Перед тим як взятися за написання коду, ми створимо файл index.html, який можна розташувати кореневій папці вашого проекту. Ми додамо базовий шаблон HTML5, у заголовку якого підключимо файл CSS. Також нам потрібно буде підключити ще деякі файли:
- jQuery Library – нам потрібна буде підключена бібліотека jQuery пізніше, коли будемо використовувати плаґін Isotope; ми же додамо її зараз. Я підключив бібліотеку, що розташовується на серверах Google (дуже рекомендую).
- HTML5 Shiv – оскільки ми будемо використовувати елементи HTML5, то нам потрібно буде впевнитися, що ми підключили прокладку (* додає до старих браузерів підтримку можливостей, які вбудовано до сучасних браузерів) HTML5 Shiv, що дозволяє раннім версіям Internet Explorer розпізнавати теги HTML5.
- Google Web Fonts – якщо ви поглянете на файл PSD, то помітите, що у ньому використовується шрифт PT Sans. Оскільки цей шрифт не буде доступний локально для багатьох користувачів, то ми підключимо його з сервісу Google Web Fonts.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
|
6 |
<!--Meta tags-->
|
7 |
<meta charset="utf-8"> |
8 |
|
9 |
<!--Title-->
|
10 |
<title>Hipstar Tutorial</title> |
11 |
|
12 |
<!--Stylesheets-->
|
13 |
<link rel="stylesheet" href="css/styles.css"> |
14 |
|
15 |
<!--Google Web Fonts-->
|
16 |
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans+Narrow|PT+Sans+Caption:400,700"> |
17 |
|
18 |
<!--jQuery-->
|
19 |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> |
20 |
|
21 |
<!--HTML5 Shiv-->
|
22 |
<!--[if lt IE 9]>
|
23 |
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
24 |
<![endif]-->
|
25 |
|
26 |
</head>
|
27 |
<body>
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
</body>
|
36 |
</html>
|
Крок 3: Додаємо загальне стильове оформлення
Тепер нам потрібно буде додати деяке загальне стильове оформлення у нашому файлі CSS. Воно включає лише просте скидання значень стилів, код CSS для виконання якого ви можете додати зверху вашого файлу CSS.
1 |
|
2 |
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,and,address,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,input,textarea,select{background:transparent;border:0;font-size:100%;margin:0;outline:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}del{text-decoration:line-through}hr{background:transparent;border:0;clear:both;color:transparent;height:1px;margin:0;padding:0}mark{background-color:#ffffb3;font-style:italic}input,select{vertical-align:middle}ins{background-color:red;color:white;text-decoration:none}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}a{text-decoration:none;} |
3 |
.clear{clear:both;display:block;height:0;overflow:hidden;visibility:hidden;width:0}.clearfix:after{clear:both;content:' ';display:block;font-size:0;height:0;line-height:0;visibility:hidden;width:0}* html .clearfix,:first-child+html .clearfix{zoom:1} |
Крок 4: Починаємо з додавання Шапки
Тепер ми приступаємо до створення структури сайту! Ми почнемо із заголовка та додамо його за допомогою елементу HTML5 header.
1 |
|
2 |
<header class="header clearfix"> |
3 |
|
4 |
|
5 |
</header>
|
Далі ми додамо деякі стильові правила для нашого заголовка. Ми додамо тут деякі головні стилі, проте головне, на що вам варто звернути увагу, – позиціонування. Тут ми використовуємо фіксоване позиціонування та потім задаємо 0 у якості значення властивостей top, left та right. Завдяки цьому буде гарантовано, що наш заголовок розташовується поверх інших елементів вікна при прокручуванні та знаходиться вгорі вікна перегляду.
1 |
|
2 |
.header { |
3 |
height:69px; |
4 |
background:url(../images/header.png) repeat; |
5 |
border-bottom:1px solid #fff; |
6 |
-webkit-box-shadow:0 0 7px rgba(0,0,0,.25); |
7 |
-moz-box-shadow:0 0 7px rgba(0,0,0,.25); |
8 |
box-shadow:0 0 7px rgba(0,0,0,.25); |
9 |
position:fixed; |
10 |
top:0; |
11 |
left:0; |
12 |
right:0; |
13 |
z-index:101; |
14 |
}
|
Крок 5: Логотип та емблема "Hire Me"
Для простоти обидва ці елементи будуть реалізовані завдяки використанню зображень, проте ми також обернемо ці зображення у теги а та додамо їм клас, щоб ми змогли встановити для цих елементів деякі стильові правила для їх позиціонування.
1 |
|
2 |
<header class="header clearfix"> |
3 |
|
4 |
<a href="#" class="logo"><img src="images/logo.png" alt="Hipstar"></a> |
5 |
|
6 |
<a href="#" class="hire-me"><img src="images/hire_me.png" alt="Hire Me"></a> |
7 |
|
8 |
</header>
|
Для обох цих елементів використовується подібне стильове оформлення, для обох використовується абсолютне позиціонування (причому у якості батьківського елементу виступає елемент header), при якому в якості значення властивості top використовується 0. У якості значення left логотипа встановлено 0 для розміщення його зліва та для "Hire Me" у якості значення right встановлено 20px для невеликого зсуву його від лівого краю сторінки.
1 |
|
2 |
.logo { |
3 |
position:absolute; |
4 |
top:0; |
5 |
left:0; |
6 |
}
|
7 |
|
8 |
.hire-me { |
9 |
position:absolute; |
10 |
top:0; |
11 |
right:20px; |
12 |
}
|
У результаті повинно вийти дещо на зразок наступного:



Крок 6: Бокова панель
Знову ми скористаємося можливостями розмітки HTML5 та створимо нашу бокову панель за допомогою елемента aside
.
1 |
|
2 |
<aside class="sidebar clearfix"> |
3 |
|
4 |
|
5 |
</aside>
|
Серед коду CSS для бокової панелі ви помітите, що ми знову використали фіксоване позиціонування, проте формально це стильове правило тут не застосовується, оскільки бокова панель буде починатися зверху сторінки.
1 |
|
2 |
.sidebar { |
3 |
width:149px; |
4 |
position:fixed; |
5 |
top:70px; |
6 |
left:0; |
7 |
bottom:0; |
8 |
right:0; |
9 |
z-index:1; |
10 |
float:left; |
11 |
border-right:1px solid #a13d36; |
12 |
margin-right:-1px; |
13 |
-webkit-box-shadow:inset -1px 0 0 #ff786b; |
14 |
-moz-box-shadow:inset -1px 0 0 #ff786b; |
15 |
box-shadow:inset -1px 0 0 #ff786b; |
16 |
}
|
Крок 7: Фон бокової панелі!
Ви помітите, що ми відмовилися від встановлення фону для бокової панелі... Ми додамо фон для бокової панелі, проте не за допомогою стильових правил, що застосовуються до неї; ми додамо фон до тіла документа та задамо для нього повторення по осі у, завдяки чому він буде простиратися зверху донизу. Також ми встановимо у якості значення його позиції left
, щоб гарантувати, що фон розташовується зліва сторінки для бокової панелі.
Оскільки це стильове правило задається для тіла, то, можливо, є сенс прокрутити ваш файл CSS та розмістити це правило ближче до його верху. Я також завчасно додав властивість для вирівнювання шрифту для браузерів, що працюють на основі движка webkit.
1 |
|
2 |
body { |
3 |
background:#f8faf4 url(../images/sidebar_body.png) fixed left repeat-y; |
4 |
-webkit-font-smoothing:antialiased; |
5 |
}
|
Тепер ми маємо основу нашої бокової панелі!



Крок 8: Приступаємо до реалізації навігаційного меню
Тепер, коли бокова панель готова, ми можемо додати до неї навігаційне меню. Ми створимо невпорядкований список та обернемо його за допомогою елемента HTML5 nav.
1 |
|
2 |
<nav class="primary clearfix"> |
3 |
<ul>
|
4 |
<li><a href="#">All</a></li> |
5 |
<li><a href="#">Web Design</a></li> |
6 |
<li><a href="#">Illustration</a></li> |
7 |
<li><a href="#">Logo</a></li> |
8 |
<li><a href="#">Video</a></li> |
9 |
<li><a href="#">Print Design</a></li> |
10 |
</ul>
|
11 |
</nav>
|
Тепер додаємо деяке стильове оформлення для навігаційного меню, фон, стильові правила для шрифту та сімейство шрифту з Google Web Fonts – PT Sans.
1 |
|
2 |
nav.primary ul li a { |
3 |
background:url(../images/nav.png) repeat-x center top; |
4 |
height:39px; |
5 |
width:149px; |
6 |
display:block; |
7 |
border-bottom:1px solid #ba4b42; |
8 |
font-family:'PT Sans Narrow', Helvetica, Arial, sans-serif; |
9 |
font-size:18px; |
10 |
color:#fff; |
11 |
text-indent:20px; |
12 |
text-shadow:0 -1px 0 #BA1E1A; |
13 |
text-decoration:none; |
14 |
line-height:39px; |
15 |
}
|
16 |
nav.primary ul li a:hover { |
17 |
color:#E9EBE5; |
18 |
background-position:center bottom; |
19 |
}
|
Крок 9: Створюємо область з головним контентом
1 |
|
2 |
<section class="main clearfix"> |
3 |
|
4 |
|
5 |
</section>
|
Тепер нам потрібно буде створити обертаючий контейнер, у якому будуть розташовуватися проекти портфоліо. Також нам потрібно буде встановити деякі відступи та поля, щоб гарантувати вірне розташування проектів. Цього можна досягти для початку завдяки зміщенню цілого елемента від заголовка та бокової панелі.
Враховуючи, що заголовок у висоту займає 70px, нам потрібно буде задати відступ зверху величиною 70px. Ширина бокової панелі складає 150px, так що ми встановимо відступ зліва величиною 150px. Наприкінці ми додаємо поля від верхнього та лівого краю величиною 20px, щоб здвинути проекти від заголовка та бокової панелі.
1 |
|
2 |
.main { |
3 |
padding:20px 20px 0; |
4 |
margin:70px 0 0 150px; |
5 |
}
|
Крок 10: Додаємо проект портфоліо
Настав час взятися за проекти портфоліо. Вперед, створіть елемент div с класом portfolio
всередині нашої головної області; за допомогою нього будуть об'єднані записи портфоліо. Запис нашого портфоліо реалізується за допомо figure (знав-таки елемента HTML5), що використовується для вказання того, що елемент є контейнером для якоїсь інформації.
Далі ми додамо зображення та два рядкові елементи; один для реалізації стрічки та один для додавання стильового оформлення, що застосовується при наведенні курсору поверх запису портфоліо. Ви також могли би скористатися псевдо-елементами для реалізації цього, завдяки чому зменшився би розмір розмітки, проте зменшилася би сумісність сторінки з браузерами.
1 |
|
2 |
<section class="main clearfix"> |
3 |
|
4 |
<div class="portfolio"> |
5 |
|
6 |
<figure class="entry"> |
7 |
<span class="ribbon"></span> |
8 |
<img src="images/portfolio-image.jpg" alt=""> |
9 |
<span class="hover"></span> |
10 |
</figure>
|
11 |
|
12 |
</div>
|
13 |
|
14 |
</section>
|
Крок 11: Додаємо стильове оформлення для запису портфоліо
Стильове оформлення для проекту портфоліо не становить собою нічого особливого. Ми задамо вирівнювання для елемента за лівим краєм та встановимо відступ справа та знизу величиною 20px. Для додавання білої границі ми просто додамо деякі поля та потім фон, які будуть закруглено за допомогою властивості border-radius, значення якої складає 5px (при цьому враховуючи префікси для браузерів). Нарешті, до елемента буде додано тінь.
1 |
|
2 |
.entry { |
3 |
position:relative; |
4 |
float:left; |
5 |
margin-right:20px; |
6 |
margin-bottom:20px; |
7 |
cursor:pointer; |
8 |
|
9 |
background:#fff; |
10 |
padding:10px; |
11 |
width:440px; |
12 |
|
13 |
-webkit-border-radius:5px; |
14 |
-moz-border-radius:5px; |
15 |
border-radius:5px; |
16 |
|
17 |
-webkit-box-shadow:0 0 7px rgba(0,0,0,.1); |
18 |
-moz-box-shadow:0 0 7px rgba(0,0,0,.1); |
19 |
box-shadow:0 0 7px rgba(0,0,0,.1); |
20 |
}
|
Оскільки ми застосовуємо відступ величиною 20px для правого боку записів, нам потрібно буде відняти це значення у відступу для правого боку батьківського контейнера (елемента div портфоліо).
1 |
|
2 |
.portfolio { margin-right:-20px; } |
Крок 12: Додаємо стрічку для запису портфоліо
Ми створили розмітку для стрічки, коли додавали запис портфоліо (хоча, знов-таки, ви могли би скористатися псевдо-елементами); тепер же нам потрібно додати для неї стильове оформлення.
1 |
|
2 |
.ribbon { |
3 |
background:url(../images/camera_ribbon.png) no-repeat; |
4 |
width:31px; |
5 |
height:47px; |
6 |
position:absolute; |
7 |
top:-4px; |
8 |
right:11px; |
9 |
z-index:9999; |
10 |
}
|
Крок 13: Додаємо стильове оформлення, що змінюється при наведенні курсору поверх запису портфоліо
Останнє, що нам тепер потрібно виконати для нашого портфоліо, – додати стильове оформлення, що застосовується при наведенні курсору поверх запису портфоліо. Це буде виконано за допомогою вже створеного нами рядкового елемента; все, що тепер потрібно, – додати для нього стильове оформлення. Ми будемо використовувати зображення та фон чорного кольору, у якості значення компонента кольору альфа (* кольору, використовуваний для контролю змішування кольорів з фоном або підлеглим об'єктом. У цьому разі його значення, що дорівнює 1,0, означає цілковиту непрозорість, а 0,0 - цілковиту прозорість) якого задано 70%. Також ми додали деякі переходи CSS3, щоб стилі, використовувані при наведенні курсору поверх елемента, застосовувалися плавно. Останнє, що потрібно виконати, – додати opacity:1;
на той випадок, коли курсор розташовується поверх запису портфоліо, завдяки чому поступово проявиться елемент із застосовуваним при цьому оформленням.
1 |
|
2 |
.hover { |
3 |
background:rgba(0,0,0,.7) url(../images/hover.png) no-repeat center; |
4 |
position:absolute; |
5 |
top:10px; |
6 |
left:10px; |
7 |
bottom:13px; |
8 |
right:10px; |
9 |
opacity:0; |
10 |
-webkit-transition:all .3s ease-in-out; |
11 |
-moz-transition:all .3s ease-in-out; |
12 |
-ms-transition:all .3s ease-in-out; |
13 |
-o-transition:all .3s ease-in-out; |
14 |
transition:all .3s ease-in-out; |
15 |
}
|
16 |
|
17 |
.entry:hover .hover { opacity:1; } |
Тепер запис нашого портфоліо готовий, ви запросто можете додавати свої власні зображення та змінювати їх!



Крок 14: Робимо дизайн портфоліо адаптивним
Тепер, коли ми відтворили на основі PSD-файла робочий макет, то візьмемо та зробимо його дизайн адаптивним. Ми не використовуємо повністю гнучку сітку, через що наявний у нас дизайн формально не є чутливим. Ми скористаємося медіа-запитами CSS3 для зміни макета при його перегляду у вікнах різних розмірів. Ми задамо приблизні значення розмірів пристроїв, при яких можна приблизно вважати, що пристроєм є або планшет з портретною орієнтацією екрана, або планшет з альбомною орієнтацією екрана, або мобільний пристрій з портретною орієнтацією екрана або, нарешті, мобільний пристрій з альбомною орієнтацією екрана.
Перед тим як взятися за редагування макета нам потрібно виконати два моменти. Для початку потрібно буде додати мета-тег viewport, завдяки чому наш веб-сайт буде коректно відображуватися на мобільних пристроях та планшетах; якщо ви хочете дізнатися більше про це, то обов'язково ознайомтеся з цією статтею, написаною Ian Yates. Потім потрібно додати трохи коду CSS, щоб наші зображення стали чутливими.
1 |
|
2 |
img { |
3 |
max-width:100%; |
4 |
}
|
Крок 15: Задаємо стильове оформлення для планшетів з портретною орієнтацією екрана
Ми почнемо з додавання стильового оформлення для планшетів з портретною орієнтацією екрана. Потрібно внести лише пару змін, щоб підладити наш макет до цього варіанта. Головне, на що варто звернути увагу, – запис портфоліо; його розмір буде меншим, щоб у кожному ряду могло вміститися більше записів.
1 |
|
2 |
@media only screen and (min-width: 768px) and (max-width: 959px) { |
3 |
.content { padding:20px 0 0 20px; } |
4 |
.entry { width:258px; } |
5 |
}
|
Крок 16: Задаємо стильове оформлення для планшетів з альбомною орієнтацією екрана
Звичайно ви не турбувалися би про стильове оформлення для планшетів з альбомною орієнтацією екрана, поки вам це дійсно не буде потрібно, проте у випадку дизайну нашої сторінки це точно стане у пригоді. Ми не будемо вказувати мінімальну та максимальну ширину для визначення розміру вікна перегляду – ми встановимо стильове оформлення для розглядуваного у цьому кроці випадку залежно від орієнтації. У цей раз ми використовуємо це менше коду, змінюю чи лише ширину запису портфоліо.
1 |
|
2 |
@media only screen and (max-device-width: 1024px) and (orientation:landscape) { |
3 |
.entry { width:386px; } |
4 |
}
|
Крок 17: Додаємо стильове оформлення для мобільних пристроїв із портретною орієнтацією екрана
Тепер приступимо до мобільних пристроїв, починаючи з портретної орієнтації екрана. Цього разу нам потрібно буде внести трохи більше змін. Тепер ми підлагодимо наш макет, оскільки через невеликий розмір екрана ми більше не можемо розміщувати бокову панель зліва та проекти портфоліо справа. Ми перемістимо бокову панель уверх перед проектами та зробимо так, щоб вона заповнювала всю ширину екрана.
Також через великий розмір заголовка, під яким розташовується бокова панель/навігаційне меню, ви не зможете побачити ту саму кількість проектів, як і раніше. Ми видалимо властивість position: fixed
та замість неї застосуємо absolute
, завдяки чому заголовок тепер буде прокручуватися, а не залишатися наверху сторінки.
1 |
|
2 |
@media only screen and (max-width: 767px) { |
3 |
body { background-image:none; } |
4 |
|
5 |
.header { |
6 |
position:absolute; |
7 |
float:left; |
8 |
width:100%; |
9 |
}
|
10 |
|
11 |
.logo { float:left; } |
12 |
.hire-me { float:right; } |
13 |
|
14 |
#wrapper { |
15 |
float:left; |
16 |
width:100%; |
17 |
}
|
18 |
|
19 |
.sidebar { |
20 |
width:100%; |
21 |
position:relative; |
22 |
z-index:1; |
23 |
float:left; |
24 |
border-right:1px solid #a13d36; |
25 |
margin-right:-1px; |
26 |
-webkit-box-shadow:none; |
27 |
-moz-box-shadow:none; |
28 |
box-shadow:none; |
29 |
}
|
30 |
|
31 |
nav.primary li { |
32 |
float:left; |
33 |
width:100%; |
34 |
background:url(../images/sidebar.png); |
35 |
}
|
36 |
|
37 |
nav.primary ul li a {width:100%; } |
38 |
|
39 |
nav.primary ul li a:active, nav.primary ul li a.selected { background:url(../images/mobile_nav_active.png); } |
40 |
|
41 |
.page { |
42 |
float:left; |
43 |
width:100%; |
44 |
}
|
45 |
|
46 |
.main { |
47 |
float:left; |
48 |
padding:20px 20px 0; |
49 |
margin:70px 0 0 0; |
50 |
}
|
51 |
|
52 |
.entry { width:260px; } |
53 |
}
|
Крок 18: Вирішуємо деякі проблеми з позиціонуванням
Що ж, тепер у нас з'явилися деякі проблеми. Бокова панель підлагодилася чудово під розмір екрана, проте проекти портфоліо розташовуються некоректно. Нам потрібно буде повернутися до макету та додати два додаткові елементи div, один з id (* identifier – ідентифікатор) wrapper, що оберне всі елементи, за виключенням заголовка, та інший з класом page, який оберне область з головним контентом.
1 |
|
2 |
<div id="wrapper"> |
3 |
|
4 |
<aside class="sidebar clearfix"> |
5 |
|
6 |
<nav class="primary clearfix"> |
7 |
<ul>
|
8 |
<li><a href="#" class="selected" data-filter="*">All</a></li> |
9 |
<li><a href="#" data-filter=".web">Web Design</a></li> |
10 |
<li><a href="#" data-filter=".ill">Ilustration</a></li> |
11 |
<li><a href="#" data-filter=".logo">Logo</a></li> |
12 |
<li><a href="#" data-filter=".video">Video</a></li> |
13 |
<li><a href="#" data-filter=".print">Print Design</a></li> |
14 |
</ul>
|
15 |
</nav>
|
16 |
|
17 |
</aside>
|
18 |
|
19 |
<div class="page"> |
20 |
|
21 |
<section class="main clearfix"> |
22 |
|
23 |
<div class="portfolio"> |
24 |
|
25 |
<figure class="entry"> |
26 |
<span class="ribbon"></span> |
27 |
<img src="images/portfolio-image.jpg" alt=""> |
28 |
<span class="hover"></span> |
29 |
</figure>
|
30 |
|
31 |
<figure class="entry"> |
32 |
<span class="ribbon"></span> |
33 |
<img src="images/portfolio-image.jpg" alt=""> |
34 |
<span class="hover"></span> |
35 |
</figure>
|
36 |
|
37 |
<figure class="entry"> |
38 |
<span class="ribbon"></span> |
39 |
<img src="images/portfolio-image.jpg" alt=""> |
40 |
<span class="hover"></span> |
41 |
</figure>
|
42 |
|
43 |
<figure class="entry"> |
44 |
<span class="ribbon"></span> |
45 |
<img src="images/portfolio-image.jpg" alt=""> |
46 |
<span class="hover"></span> |
47 |
</figure>
|
48 |
|
49 |
<figure class="entry"> |
50 |
<span class="ribbon"></span> |
51 |
<img src="images/portfolio-image.jpg" alt=""> |
52 |
<span class="hover"></span> |
53 |
</figure>
|
54 |
|
55 |
<figure class="entry"> |
56 |
<span class="ribbon"></span> |
57 |
<img src="images/portfolio-image.jpg" alt=""> |
58 |
<span class="hover"></span> |
59 |
</figure>
|
60 |
|
61 |
<figure class="entry"> |
62 |
<span class="ribbon"></span> |
63 |
<img src="images/portfolio-image.jpg" alt=""> |
64 |
<span class="hover"></span> |
65 |
</figure>
|
66 |
|
67 |
<figure class="entry"> |
68 |
<span class="ribbon"></span> |
69 |
<img src="images/portfolio-image.jpg" alt=""> |
70 |
<span class="hover"></span> |
71 |
</figure>
|
72 |
|
73 |
</div>
|
74 |
|
75 |
</section>
|
76 |
|
77 |
</div>
|
78 |
<!-- page -->
|
79 |
|
80 |
</div>
|
81 |
<!-- wrapper -->
|
Після додавання потрібної розмітки нам потрібно буде додати деяке стильове оформлення. Прокрутіть доверху код CSS-файлу та додайте наступний:
1 |
|
2 |
#wrapper { |
3 |
height:auto; |
4 |
margin:0; |
5 |
overflow:hidden; |
6 |
padding:0; |
7 |
}
|
8 |
|
9 |
.page { |
10 |
position:relative; |
11 |
overflow:hidden; |
12 |
top:0px; |
13 |
margin:0px; |
14 |
padding:0px; |
15 |
border-left:1px solid #a13d36; |
16 |
}
|
Крок 19: Додаємо стильове оформлення для мобільних пристроїв із альбомною орієнтацією екрана
Добре, нарешті приступаємо до мобільних пристроїв з альбомною орієнтацією екрана. Якщо ви розмістите наступний код після тільки-но створеного нами стильового оформлення для мобільних пристроїв з портретною орієнтацією, то для розглядуваного у цьому кроці варіанта буде успадковано ті стилі, тобто ширина панелі на весь екран тощо. Все що нам тут потрібно – змінити ширину проекту.
1 |
|
2 |
@media only screen and (min-width: 480px) and (max-width: 767px) { |
3 |
.entry { width:190px; } |
4 |
}
|



Крок 20: Знайомимося з Isotope
Тепер, коли ми розглянули створення дизайну, то можемо перейти до додавання деякого функціоналу! Ми будемо використовувати надзвичайний плаґін Isotope, розроблений David DeSandro. Isotope використовується для додавання макетів, можливості фільтрації та сортування. Він часто використовується у портфоліо для фільтрації робіт за різними категоріями, наприклад Веб-дизайн, Фотографія, Ілюстрації. А тепер давайте почнемо!
Перед тим як додати плаґін до нашого документа нам потрібно завантажити його. Перейдіть за http://isotope.metafizzy.co/jquery.isotope.min.js. Тепер ви побачите JavaScript-файл Isotope; просто виберіть File > Save та збережіть його у папці js, яку створили напочатку. Далі нам потрібно буде підключити скрипт у нашому HTML-файлі.
1 |
|
2 |
<script src="js/jquery.isotope.min.js"></script> |
Крок 21: Фільтрація
Для того щоб додати для записів нашого портфоліо можливість фільтрації, нам потрібно знову змінити нашу розмітку. Ми почнемо з навігаційного меню, яке будемо використовувати для фільтрації. Isotope використовуються власні атрибути HTML5 Data, а саме data-filter=""
. Ми встановлюємо значення залежно від категорії; наприклад для категорії Web Design використовується .web
(зверніть увагу, що нам потрібно додати крапку перед значенням категорії). Тим не менше в якірному елементів для категорії All використовується не .all
, а зірочка.
1 |
|
2 |
<nav class="primary clearfix"> |
3 |
<ul>
|
4 |
<li><a href="#" data-filter="*">All</a></li> |
5 |
<li><a href="#" data-filter=".web">Web Design</a></li> |
6 |
<li><a href="#" data-filter=".ill">Ilustration</a></li> |
7 |
<li><a href="#" data-filter=".logo">Logo</a></li> |
8 |
<li><a href="#" data-filter=".video">Video</a></li> |
9 |
<li><a href="#" data-filter=".print">Print Design</a></li> |
10 |
</ul>
|
11 |
</nav>
|
Крок 22: Додаємо можливість фільтрації записів
Останнє, що потрібно виконати для додання можливості фільтрації, – відредагувати записи портфоліо. Після додання значень атрибутів data-filter
вам потрібно буде додати відповідні значення для кожного запису. Якщо робота належить до категорії Video, то вам потрібно буде додати клас video. Обов'язково зверніть увагу на те, що якщо значення атрибута data-filter
вказано у нижньому регістрі, то ви повинні використовувати нижній регістр і при зазначенні класів записів.
1 |
|
2 |
<figure class="entry video"> |
3 |
<span class="ribbon"></span> |
4 |
<img src="images/portfolio-image.jpg" alt=""> |
5 |
<span class="hover"></span> |
6 |
</figure>
|
Крок 23: Активуємо плаґін
Настав час активувати Isotope, що ми зробимо у два етапи. Для початку нам потрібно активувати частину, за допомогою якої буде відбуватися фільтрація записів нашого портфоліо. Почніть зі створення нового файлу під назвою "custom.js" та додайте його до нашої папки js.
1 |
|
2 |
$(window).load(function(){ |
3 |
|
4 |
var $container = $('.portfolio'); |
5 |
$container.isotope({ |
6 |
filter: '*', |
7 |
animationOptions: { |
8 |
duration: 750, |
9 |
easing: 'linear', |
10 |
queue: false, |
11 |
}
|
12 |
});
|
13 |
|
14 |
});
|
Крок 24: Додаємо обробник події Click
На другому етапі ми активуємо навігаційне меню, щоб фільтрація стала можливою.
1 |
|
2 |
$(window).load(function(){ |
3 |
|
4 |
var $container = $('.portfolio'); |
5 |
$container.isotope({ |
6 |
filter: '*', |
7 |
animationOptions: { |
8 |
duration: 750, |
9 |
easing: 'linear', |
10 |
queue: false, |
11 |
}
|
12 |
});
|
13 |
|
14 |
$('nav.primary ul a').click(function(){ |
15 |
var selector = $(this).attr('data-filter'); |
16 |
$container.isotope({ |
17 |
filter: selector, |
18 |
animationOptions: { |
19 |
duration: 750, |
20 |
easing: 'linear', |
21 |
queue: false, |
22 |
}
|
23 |
});
|
24 |
return false; |
25 |
});
|
26 |
|
27 |
});
|
Крок 25: Додаємо стильове оформлення для пунктів меню, що знаходиться в активному стані
У PSD показано стильове оформлення для поточного вибраного якірного елемента навігаційного меню, що знаходиться в активному стані. Нам буде потрібно додати деяку додаткову розмітку, деякий код CSS і, нарешті, деякий додатковий код jQuery. Для початку перейдіть до вашого HTML-файлу та додайте class="selected"
до першого якірного елемента.
1 |
|
2 |
<nav class="primary clearfix"> |
3 |
<ul>
|
4 |
<li><a href="#" class="selected" data-filter="*">All</a></li> |
5 |
<li><a href="#" data-filter=".web">Web Design</a></li> |
6 |
<li><a href="#" data-filter=".ill">Illustration</a></li> |
7 |
<li><a href="#" data-filter=".logo">Logo</a></li> |
8 |
<li><a href="#" data-filter=".video">Video</a></li> |
9 |
<li><a href="#" data-filter=".print">Print Design</a></li> |
10 |
</ul>
|
11 |
</nav>
|
Далі вам потрібно буде додати деякий додатковий код CSS, так що додайте наступний код одразу після стилів для навігаційного меню.
1 |
|
2 |
nav.primary ul li a:active, nav.primary ul li a.selected { |
3 |
background:url(../images/nav_active.png); |
4 |
border-bottom:1px solid #9e3f38; |
5 |
}
|
Нарешті, потрібно додати деякий код jQuery, за допомогою якого будуть додаватися класи при виборі пунктів меню для відображення активної кнопки/категорії.
1 |
|
2 |
var $optionSets = $('nav.primary ul'), |
3 |
$optionLinks = $optionSets.find('a'); |
4 |
|
5 |
$optionLinks.click(function(){ |
6 |
var $this = $(this); |
7 |
// don't proceed if already selected
|
8 |
if ( $this.hasClass('selected') ) { |
9 |
return false; |
10 |
}
|
11 |
var $optionSet = $this.parents('nav.primary ul'); |
12 |
$optionSet.find('.selected').removeClass('selected'); |
13 |
$this.addClass('selected'); |
14 |
});
|
Крок 26: Ми щось забули, чи не так?
Якщо ви візьмете та натиснете кнопки навігаційного меню, то побачите, що фільтрація працює! Проте зачекайте, тут у нас виконується не плавний перехід! Що ж, це так, оскільки нам як і раніше потрібно додати деякі переходи CSS.
1 |
|
2 |
.isotope-item { |
3 |
z-index: 2; |
4 |
}
|
5 |
|
6 |
.isotope-hidden.isotope-item { |
7 |
pointer-events: none; |
8 |
z-index: 1; |
9 |
}
|
10 |
|
11 |
.isotope, |
12 |
.isotope .isotope-item { |
13 |
-webkit-transition-duration: 0.8s; |
14 |
-moz-transition-duration: 0.8s; |
15 |
transition-duration: 0.8s; |
16 |
}
|
17 |
|
18 |
.isotope { |
19 |
-webkit-transition-property: height, width; |
20 |
-moz-transition-property: height, width; |
21 |
transition-property: height, width; |
22 |
}
|
23 |
|
24 |
.isotope .isotope-item { |
25 |
-webkit-transition-property: -webkit-transform, opacity; |
26 |
-moz-transition-property: -moz-transform, opacity; |
27 |
transition-property: transform, opacity; |
28 |
}
|
Завершення
От і все, підійшло до кінця ще один посібник! Ви сміло можете використовувати описаний тут підхід у будь-яких ваших роботах. Вперед, поекспериментуйте з ним!



Сподіваюсь, що вам сподобався цей посібник. Дякую за проявлену зацікавленість!