—»     —»   Создаем скрипт в стиле Pinterest – Часть 1
  Раздел: Скрипты и коды   Комментариев: 1  

Создаем скрипт в стиле Pinterest – Часть 1



Вам нравится Pinterest? Мы уверены, что да, и вам наверняка однажды хотелось создать подобный веб-сайт. Мы пришли к мысли о том, что было бы неплохо написать серию статей о том, как можно создать подобный скрипт. Нам кажется, что кроме хорошего дизайна и удобного интерфейса, нам нужно будет добавить еще несколько свойств: всплывающие окна на ajax для отображения фотографий во весь экран, возможность писать комментарии, добавить функционал Like, добавить форму загрузки, возможность автоматической сортировки фотографий (в зависимости от размера) и возможно кое-что еще. В нашем первом уроке мы подготовим HTML-разметку со стилизацией скрипта. Также, для того, чтобы сортировать фотографии (выстраивать их), мы воспользуемся jQuery-плагином masonry.

Создаем скрипт в стиле Pinterest – Часть 1

Посмотреть демо | Скачать архивом
Внимание! У вас нет прав для просмотра скрытого текста.


Этап 1 – HTML

Как обычно, наш первый этап заключается в разработке HTML-разметки. В самом начале нам нужно будет включить все необходимые стили и скрипты (в головной секции нашего кода):

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="utf-8" />
<meta name="author" content="Script Tutorials" />
<title>How to create Pinterest-like script - step 1 | Script Tutorials</title>

<!-- add styles -->
<link href="css/main.css" rel="stylesheet" type="text/css" />

<!-- add scripts -->
<script src="js/jquery.min.js"></script>
<script src="js/jquery.masonry.min.js"></script>
<script src="js/script.js"></script>
</head>

Теперь мы можем выстроить основную структуру нашей страницы. Схематически она выглядит так:

<body>

<!-- header panel -->
<div class="header_panel">

<!-- logo -->
<a href="#" class="logo"></a>

<!-- search form -->
<form action="" method="get" class="search">
.....
</form>

<!-- navigation menu -->
<ul class="nav">
.....
</ul>

</div>

<!-- upload form -->
<a href="#x" class="overlay" id="add_form"></a>
<div class="popup">
.....
</div>

<!-- main container with pin elements -->
<div class="main_container">

.....

</div>
</body>

Здесь есть 3 основных элемента: шапка, форма загрузки и основной контейнер (для приклеенных элементов). Шапка будет состоять из логотипа, формы поиска и навигационного меню. Взгляните на следующую HTML-разметку:

<!-- header panel -->
<div class="header_panel">

<!-- logo -->
<a href="#" class="logo"></a>

<!-- search form -->
<form action="" method="get" class="search">
<input autocomplete="off" name="q" size="27" placeholder="Search" type="text" />
<input name="search" type="submit" />
</form>

<!-- navigation menu -->
<ul class="nav">
<li><a href="#add_form" id="login_pop">Add +</a></li>
<li>
<a href="#">About<span></span></a>
<ul>
<li><a href="#">Help</a></li>
<li><a href="#">Pin It Button</a></li>
<li><a href="#" target="_blank">For Businesses</a></li>
<li class="div"><a href="#">Careers</a></li>
<li><a href="#">Team</a></li>
<li><a href="#">Blog</a></li>
<li class="div"><a href="#">Terms of Service</a></li>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Copyright</a></li>
<li><a href="#">Trademark</a></li>
</ul>
</li>
<li>
<a href="#">Profile<span></span></a>
<ul>
<li><a href="#">Invite Friends</a></li>
<li><a href="#">Find Friends</a></li>
<li class="div"><a href="#">Boards</a></li>
<li><a href="#">Pins</a></li>
<li><a href="#">Likes</a></li>
<li class="div"><a href="#">Settings</a></li>
<li><a href="#">Logout</a></li>
</ul>
</li>
<li>
<a href="http://www.script-tutorials.com/pinterest-like-script-step-1/">Back to tutorial<span></span></a>
</li>
</ul>

</div>

Как видно, здесь все довольно просто. Второй основной элемент – это форма загрузки. Здесь мы воспользуемся мощью CSS3 для того, чтобы реализовать всплывающее окно на CSS:

<!-- upload form -->
<a href="#x" class="overlay" id="add_form"></a>
<div class="popup">
<div class="header">
<a class="close" href="#close">x</a>
<h2>Upload a Pin</h2>
</div>
<form>
<input type="file" name="image_file" id="image_file" onchange="" />
</form>
</div>

Во втором этапе нашего руководства вы сможете найти необходимые CSS-стили. Наконец, важно описать HTML-разметку наших пунктов с фотографиями (они же "пины" с фото):

<div class="pin">
<div class="holder">
<div class="actions" pin_id="1">
<a href="#" class="button">Repin</a>
<a href="#" class="button">Like</a>
<a href="#" class="button disabled comment_tr">Comment</a>
</div>
<a class="image ajax" href="#" title="Photo number 1" pin_id="1">
<img alt="Photo number 1" src="photos/pic1.jpg">
</a>
</div>
<p class="desc">Photo number 1 description</p>
<p class="info">
<span>1 likes</span>
<span>1 repins</span>
</p>
<form class="comment" method="post" action="">
<input type="hidden" name="id" value="1" />
<textarea placeholder="Add a comment..." maxlength="1000"></textarea>
<button type="button" class="button">Comment</button>
</form>
</div>

Каждый "пин" будет содержать удерживающий элемент (кнопки действия и изображение миниатюры), описание, строку с информацией, а также блок с комментариями

Этап 2 – CSS

Теперь мы можем предоставить вам CSS-стили. Первая секция отвечает за основной стиль:

css/main.css

/* base styles */
* {
margin: 0;
padding: 0;
}
html {
background-color: #F7F5F5;
font-size: 10px;
font-family: arial,sans-serif;
}
a {
color: #221919;
text-decoration: none;
}

Затем мы оформляем раздел заголовка:

/* header elements */
.header_panel {
background-color: #FAF7F7;
box-shadow: 0 1px #FFFFFF inset, 0 1px 3px rgba(34, 25, 25, 0.4);
height: 44px;
left: 0;
padding: 0 7px;
position: relative;
right: 0;
top: 0;
z-index: 1;
}
.logo {
background: url("../images/logo.png") repeat scroll 0 0 transparent;
display: block;
height: 30px;
left: 50%;
margin-left: -50px;
position: absolute;
top: 10px;
width: 100px;
}
.search {
float: left;
margin: 8px 0 0;
}
.search input[type=text] {
background-color: #FAF7F7;
border-color: #C2C0C0 #CCCACA #D1CFCF;
border-image: none;
border-style: solid;
border-width: 1px;
box-shadow: 0 1px #FFFFFF, 0 1px rgba(34, 25, 25, 0.05) inset;
color: #8C7E7E;
float: left;
font-size: 13px;
height: 16px;
padding: 5px;
width: 180px;

-webkit-transition: all .5s;
-moz-transition: all .5s;
-ms-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
.search input[type=text]:focus {
background-color: #FFFFFF;
box-shadow: 0 1px #FFFFFF, 0 1px rgba(34, 25, 25, 0.1) inset;
width: 250px;
}
.search input[type=submit] {
background: url("../images/search.gif") no-repeat scroll center center transparent;
border-color: #C2C0C0 #CCCACA #D1CFCF;
border-style: solid;
border-width: 1px;
box-shadow: 0 1px rgba(255, 255, 255, 0.9), 0 0 2px rgba(255, 255, 255, 0.75) inset;
color: transparent;
content: "";
cursor: pointer;
float: left;
height: 28px;
margin-left: -1px;
min-height: 17px;
padding: 7px 7px 1px;
width: 30px;
}

/* navigation styles */
.nav {
float: right;
position: relative;
}
.nav li {
display: inline;
font-size: 13px;
position: relative;
}
.nav > li > a {
color: #524D4D;
cursor: pointer;
display: inline-block;
font-weight: bold;
height: 29px;
padding: 15px 27px 0 14px;
position: relative;
text-decoration: none;
text-shadow: 0 1px #FFFFFF;
}
.nav > li > a span {
background: url("../images/down.png") no-repeat scroll center top transparent;
height: 6px;
position: absolute;
right: 14px;
top: 20px;
width: 7px;
}
.nav > li:hover > a {
background-color: #E1DFDF;
color: #221919;
text-decoration: none;
text-shadow: 0 1px rgba(255, 255, 255, 0.3);
}
.nav > li:active > a {
background-color: #CB2027;
color: #FFFFFF;
text-shadow: 0 -1px rgba(34, 25, 25, 0.3);
}
.nav li ul {
background-color: #FFFFFF;
border-top: 1px solid #CCCACA;
box-shadow: 0 2px 4px rgba(34, 25, 25, 0.5);
display: none;
left: 0;
position: absolute;
top: 28px;
width: 140px;
z-index: 1;
}
.nav li:hover ul {
display: block;
}
.nav li ul a {
color: #524D4D;
display: block;
font-weight: normal;
padding: 7px 10px;
text-align: left;
}
.nav li ul a:hover {
background-color: #E1DFDF;
color: #221919;
text-decoration: none;
}
.nav li ul a:active {
background-color: #CB2027;
color: #FFFFFF;
}
.nav .div a {
border-top: 1px solid #E1DFDF;
}
.nav > li:last-child ul {
left: auto;
right: 0;
}

Как видно, здесь у нас используется обычное выпадающее меню, реализованное при помощи UL-LI. Итак, теперь переходим к самым интересным стилям за сегодня (форма загрузки, основанная на CSS3):

/* popup upload form styles */
.overlay {
background-color: #FFFFFF;
bottom: 0;
display: none;
left: 0;
opacity: 0.8;
position: fixed;
right: 0;
top: 0;
z-index: 9;
}
.overlay:target {
display: block;
}
.popup {
background: none repeat scroll 0 0 #FCF9F9;
border: 1px solid #F7F5F5;
box-shadow: 0 2px 5px rgba(34, 25, 25, 0.5);
display: inline-block;
left: 50%;
padding: 30px 30px 20px;
position: fixed;
top: 40%;
visibility: hidden;
width: 550px;
z-index: 10;

-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);

-webkit-transition: all 0.3s ease-in-out 0s;
-moz-transition: all 0.3s ease-in-out 0s;
-ms-transition: all 0.3s ease-in-out 0s;
-o-transition: all 0.3s ease-in-out 0s;
transition: all 0.3s ease-in-out 0s;
}
.overlay:target+.popup {
top: 50%;
opacity: 1 ;
visibility: visible;
}
.popup .header {
background-color: #F2F0F0;
border-bottom: 1px solid #CCCACA;
margin: -30px -31px 20px;
padding: 18px 31px 8px;
position: relative;
}
.popup .header h2 {
color: #8C7E7E;
font-size: 21px;
line-height: 1em;
margin: 0 37px 0 0;
text-shadow: 0 1px #FFFFFF;
}
.popup .close {
background: -webkit-linear-gradient(#FFFCFC, #F0EDED) repeat scroll 0 0 transparent;
background: -moz-linear-gradient(#FFFCFC, #F0EDED) repeat scroll 0 0 transparent;
background: linear-gradient(#FFFCFC, #F0EDED) repeat scroll 0 0 transparent;
border-left: 1px solid rgba(34, 25, 25, 0.15);
bottom: 0;
box-shadow: 0 1px 2px #FFFFFF inset;
color: #BBBBBB;
display: block;
font-size: 50px;
line-height: 42px;
position: absolute;
right: 0;
text-align: center;
text-decoration: none;
top: 0;
width: 57px;
z-index: 1;
}
.popup form input[type="file"] {
font-size: 18px;
}

Здесь мы используем тот же метод, который использовался в уроке, посвященном разработке модальных всплывающих окон на CSS3. Итак, теперь нам нужно предоставить вам стили для основного контейнера (для "пинов"), а также отдельно для самого "пина":

/* photo pins - general styles */
.main_container {
margin: 0 auto;
padding: 10px 10px 0;
position: relative;
}
.button {
background-color: #F0EDED;
background-image: -webkit-linear-gradient(center top , #FDFAFB, #F9F7F7 50%, #F6F3F4 50%, #F0EDED);
background-image: -moz-linear-gradient(center top , #FDFAFB, #F9F7F7 50%, #F6F3F4 50%, #F0EDED);
background-image: linear-gradient(center top , #FDFAFB, #F9F7F7 50%, #F6F3F4 50%, #F0EDED);
border: 1px solid #BBBBBB;
border-radius: 6px 6px 6px 6px;
color: #524D4D;
cursor: pointer;
display: inline-block;
float: right;
font-weight: bold;
line-height: 1em;
margin: 0;
padding: 5px 9px;
text-align: center;
text-shadow: 0 1px rgba(255, 255, 255, 0.9);

-webkit-transition: all 0.2s ease-in-out 0s;
-moz-transition: all 0.2s ease-in-out 0s;
-ms-transition: all 0.2s ease-in-out 0s;
-o-transition: all 0.2s ease-in-out 0s;
transition: all 0.2s ease-in-out 0s;
}
.button:hover {
box-shadow: 0 1px rgba(255, 255, 255, 0.35) inset, 0 0 0 1px rgba(140, 126, 126, 0.5), 0 1px 2px rgba(35, 24, 24, 0.75);
}
.button.disabled, .button[disabled] {
background: none repeat scroll 0 0 #F2F0F0;
border-color: #D1CDCD;
color: #D1CDCD;
cursor: default;
text-shadow: 0 -1px rgba(34, 25, 25, 0.01);
}

/* single pin styles */
.pin {
background-color: #FFFFFF;
box-shadow: 0 1px 3px rgba(34, 25, 25, 0.4);
float: left;
font-size: 11px;
margin: 0 15px 15px 0;
padding: 15px 15px 0;
position: relative;
width: 192px;
}
.pin .holder {
position: relative;
}
.pin .actions {
left: -8px;
position: absolute;
top: -8px;
z-index: 3;
}
.pin .actions a {
clear: none;
display: none;
float: left;
margin: 0 5px 0 0;
}
.pin:hover .actions a {
display: block;
}
.pin .image {
background-color: #F2F0F0;
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
text-decoration: none;
}
.pin .image img {
max-width: 192px;
min-height: 75px;
opacity: 1;
}
.pin .desc {
margin: 10px 0 5px;
overflow: hidden;
word-wrap: break-word;
}
.pin .info {
color: #8C7E7E;
line-height: 1.35em;
margin: 0 0 0.8em;
overflow: hidden;
}
.pin .info span {
float: left;
margin-right: 10px;
}
.comment {
background-color: #F2F0F0;
border-top: 1px solid #D9D4D4;
box-shadow: 0 1px #FCFAFA inset;
margin: 0 -15px;
overflow: hidden;
padding: 10px 15px;
}
.comment textarea {
background-color: #FCF9F9;
border: 1px solid #CCCCCC;
color: #8C7E7E;
font-size: 11px;
height: 21px;
line-height: 1em;
margin-bottom: 6px;
padding: 4px 3px 3px;
resize: none;
width: 185px;
}
.comment textarea:focus {
background-color: #FFFFFF;
box-shadow: 0 1px 1px rgba(34, 29, 29, 0.1) inset;
}

Этап 3 – JS

Только что мы завершили большой этап по разработке стилей, а теперь переходим к небольшому отрезку нашего проекта – javascript:

js/script.js

$(document).ready(function(){

// masonry initialization
$('.main_container').masonry({
// options
itemSelector : '.pin',
isAnimated: true,
isFitWidth: true
});

// onclick event handler (for comments)
$('.comment_tr').click(function () {
$(this).toggleClass('disabled');
$(this).parent().parent().parent().find('form').slideToggle(250, function () {
$('.main_container').masonry();
});
});

});

Как видно, jQuery-плагином Masonry довольно просто пользоваться, а он в свою очередь выполняет огромную работу – он расставляет "пины" по всей странице.

Завершение

Пока что мы завершили наш первый урок, в рамках которого начали разработку скрипта в стиле Pinterest. Надеемся, что вам наш проект понравился. Не забудьте поделиться материалом со своими друзьями, а также и дальше следить за обновлениями и новыми частями руководства, посвященного данному проекту!
Обнаружили ошибку или мёртвую ссылку?
Выделите проблемный фрагмент мышкой и нажмите CTRL+ENTER.
В появившемся окне опишите проблему и отправьте уведомление Администрации ресурса.
Нужна органическая вечная ссылка из данной статьи? Постовой?
Подробности здесь
Вам понравился материал? Поблагодарить легко!
Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

Ключевые тэги: Pinterest, скрипты
Опубликовал Design FactoRy   Прочитано (раз): 11630   |   Оставлено комментариев: 1
Автор перевода — CoolWebmasters.Com ©   |   Источник материала / оригинал статьи   Распечатать
Другие статьи и новости по теме:
Комментарий #1: 10 сентября 2014 @ 18:45
Написал: kim — группа: Гости  
На сайте с: --   |   Публикаций: 0   |   Комментариев: 0
ICQ: --- не указано ---
простите ав можете подробнее о jQuery-плагином Masonry рассказать..... я его скопировала в документ с именем script.js...поместила в папку js но у меня не работает
Добавление комментария
Уважаемые пользователи!
При добавлении комментариев на сайт Вам следует учитывать следующее - все комментарии проверяются Администрацией на предмет отсутствия спама. При обнаружении признаков спама, в оставленном Вами комментарии, сам комментарий будет незамедлительно удалён, а Ваш IP-адрес будет забанен без предупреждения! Учётные записи пользователей, рассылающих спам, блокируются/удаляются без права последующего восстановления.

С уважением, Администрация сайта.
* = поля обязательны к заполнению
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос : Назовите месяц February по-русски
Подтверждение кода безопасности :

Включите эту картинку для отображения кода безопасности
обновить, если не виден код


Популярные публикации


















Свежие шаблоны сайтов каждый день
С миру по нитке
«    Сентябрь 2017    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
252627282930