Красивое портфолио на HTML5 и CSS3
В этом уроке мы сделаем красивое HTML5 портфолио, с помощью jQuery плагина Quicksand plugin.
HTML
Перед тем как приступить к html разметке, необходимо подключить наш css в теге head, jQuery и Quicksand plugin мы подключим перед тегом закрытия body.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Making a Beautiful HTML5 Portfolio</title>
<link rel="stylesheet" href="assets/css/styles.css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<header>
<h1>My Portfolio</h1>
</header>
<nav id="filter">
<!-- Здесь будет меню, сгенерированное jQuery -->
</nav>
<section id="container">
<ul id="stage">
<!-- Элементы портфолио будут здесь -->
</ul>
</section>
<footer>
</footer>
<!-- Подключаем jQuery, плагин Quicksand и script.js -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script src="assets/js/jquery.quicksand.js"></script>
<script src="assets/js/script.js"></script>
</body>
</html>
В нащей разметке мы использовали несколько новых HTML5 элементов. header — содержит заголовок страницы, section — неупорядоченный список работ нашего портфолио, в элементе nav будет располагаться меню.
Список #stage содержит все работы. Рассмотрим как будут выглядеть эти элементы. Каждый будет иметь HTML5 атрибут data, который определяет теги по которым jQuery будет фильтровать работы.
<li data-tags="Print Design">
<img src="assets/img/shots/1.jpg" />
</li>
<li data-tags="Logo Design,Print Design">
<img src="assets/img/shots/2.jpg" />
</li>
<li data-tags="Web Design,Logo Design">
<img src="assets/img/shots/3.jpg" />
</li>
Вы можете поместить в элементы li что вам будет необходимо.
jQuery
Quicksand plugin сравнивает два ul списка, находит в них одинаковые элементы и перемещает на новую позицию. Наш jQuery скрипт пройдется по всем работам портфолио и создаст новый (спрятанный) список.
$(document).ready(function(){
var items = $('#stage li'),
itemsByTags = {};
// пробегаем по всем работам:
items.each(function(i){
var elem = $(this),
tags = elem.data('tags').split(',');
// добавляем data-id атрибут, необходимо для плагина:
elem.attr('data-id',i);
$.each(tags,function(key,value){
// удаляем ненужные пробелы:
value = $.trim(value);
if(!(value in itemsByTags)){
itemsByTags[value] = [];
}
itemsByTags[value].push(elem);
});
});
Каждый тег добавлен в объект itemsByTags как массив. Это значит, что itemsByTags[‘Web Design’] будет содержать элементы с тегом Web Design. Мы будем использовать этот объект для создания скрытого списка. Напишем функцию, которая будет это делать:
function createList(text,items){
// Создаем пустой список:
var ul = $('<ul>',{'class':'hidden'});
$.each(items,function(){
// Создаем копию каждого элемента
// и добавляем в список:
$(this).clone().appendTo(ul);
});
ul.appendTo('#container');
// Создам меню. Список добавляется как
// параметр data (доступен через .data('list')):
var a = $('<a>',{
html: text,
href:'#',
data: {list:ul}
}).appendTo('#filter');
}
Данная функция принимает название группы и массив элементов li, затем копирует их в новый список и добавляет ссылку в наше меню.
Теперь нам необходимо пробежать по всем группам и вызвать эту функцию, также надо следить за нажатиями на меню.
// создаем элемент "Everything" в меню:
createList('Everything',items);
// пробегаем по массивам в itemsByTags:
$.each(itemsByTags,function(k,v){
createList(k,v);
});
$('#filter a').live('click',function(e){
var link = $(this);
link.addClass('active').siblings().removeClass('active');
// анимируем li элементы с помощью Quicksand plugin:
$('#stage').quicksand(link.data('list').find('li'));
e.preventDefault();
});
// устанавливаем первый пункт меню по-умолчанию:
$('#filter a:first').click();
CSS
#filter {
background: url("../img/bar.png") repeat-x 0 -94px;
display: block;
height: 39px;
margin: 55px auto;
position: relative;
width: 600px;
text-align:center;
-moz-box-shadow:0 4px 4px #000;
-webkit-box-shadow:0 4px 4px #000;
box-shadow:0 4px 4px #000;
}
#filter:before, #filter:after {
background: url("../img/bar.png") no-repeat;
height: 43px;
position: absolute;
top: 0;
width: 78px;
content: '';
-moz-box-shadow:0 2px 0 rgba(0,0,0,0.4);
-webkit-box-shadow:0 2px 0 rgba(0,0,0,0.4);
box-shadow:0 2px 0 rgba(0,0,0,0.4);
}
#filter:before {
background-position: 0 -47px;
left: -78px;
}
#filter:after {
background-position: 0 0;
right: -78px;
}
#filter a{
color: #FFFFFF;
display: inline-block;
height: 39px;
line-height: 37px;
padding: 0 15px;
text-shadow:1px 1px 1px #315218;
}
#filter a:hover{
text-decoration:none;
}
#filter a.active{
background: url("../img/bar.png") repeat-x 0 -138px;
box-shadow: 1px 0 0 rgba(255, 255, 255, 0.2),
-1px 0 0 rgba(255, 255, 255, 0.2),
1px 0 1px rgba(0,0,0,0.2) inset,
-1px 0 1px rgba(0,0,0,0.2) inset;
}
Вы можете использовать данный шаблон для представления ваших работ. Преимущество заключается в простоте использования — вам необходимо просто изменить содержание элементов li. Также, если JavaScript отключен все работы будут видны.







Нет комментариев