Створюємо двійник Twitter з нуля: Дизайн
() translation by (you can also view the original English article)
Це – перший посібник із серії посібників, створених персоналом Nettuts+, в якій описується проектування та створення веб-додатків з нуля – на декількох мовах. Ми будемо використовувати вигаданий двійник Twitter під назвою Ribbit у якості основи для цієї серії посібників.
У цьому посібнику нас необхідно зосередитися на UI (* user interface – користувальницький інтерфейс. Тут і надалі примітка перекладача). Ми будемо використовувати препроцесор LESS (* препроцесор CSS, що дозволяє використовувати змінні, функції, цикли та інші технології для полегшення роботи зі стилями) для максимально можливого полегшення роботи з CSS.
Вступ
Завантажте ресурси до цього посібника, якщо хочете паралельно працювати з кодом.
Цей посібник поділено на п'ять частин, у яких роз'яснюється створення стильового оформлення різних сторінок макета Ribbit. Я буду звертатися до елементів HTML за допомогою селекторів CSS для полегшення розуміння. Проте перед роботою з макетом давайте коротко обговоримо наслідування.
Наслідування
У CSS при звертанні до вкладених елементів можуть виходити громіздкі селектори. Наприклад:
1 |
|
2 |
someId { |
3 |
/* ... */
|
4 |
}
|
5 |
|
6 |
someId div.someClass { |
7 |
/* ... */
|
8 |
}
|
9 |
|
10 |
someId div.someClass p.someOtherClass { |
11 |
/* ... */
|
12 |
}
|
13 |
|
14 |
someId div.someClass p.someOtherClass target { |
15 |
/* ... */
|
16 |
}
|
Бувають ще більш довгі! При використанні LESS ви можете поміщати один елемент до іншого, завдяки чому код буде дуже легко читати.
1 |
|
2 |
someId { |
3 |
/* ... */
|
4 |
div.someClass { |
5 |
/* ... */
|
6 |
p.someOtherClass { |
7 |
/* ... */
|
8 |
target { |
9 |
/* ... */
|
10 |
}
|
11 |
}
|
12 |
}
|
13 |
}
|
Змінні та міксини (* домішки; дозволяють визначити стилі, що можуть бути використані повторно у будь-якому місці документа)
Створіть новий файл та назвіть його style.less.
При використанні любого препроцесора стилів розумно зберігати значення важливих кольорів та розмірів у змінних; тоді ви зможете легко коректувати їх значення без пошуку по файлу значень властивостей, що вам необхідно змінити. Ми будемо використовувати декілька змінних для зберігання кольору тексту, кольору границі та ширини контенту:
1 |
|
2 |
@text-color: #3F3E3D; |
3 |
@border-color: #D2D2D2; |
4 |
@content-width: 860px; |
Тепер давайте створимо дві домішки. Завдяки першій буде створено ілюзію згладженого (* усунення контурних нерівностей) тексту, а завдяки другій – градієнти, що підтримуються головними браузерами. Першу реалізувати доволі просто:
1 |
|
2 |
.antialiased (@color) { |
3 |
color: @color; |
4 |
text-shadow: @color 0 0 1px; |
5 |
}
|
Прийом тут полягає в тому, щоб створити тінь під текстом того ж кольору та радіусу розмиття в один піксель, завдяки чому браузер буде відображувати незначну тінь навколо тексту.
Тепер переходимо до градієнта; його реалізувати набагато складніше, ніж згладжений текст, оскільки кожний браузер відображує градієнт по-різному. Нижче наведено код з урахуванням вендорних префіксів (* префікси творців браузерів):
1 |
|
2 |
.gradient4f (@p1, @c1, @p2, @c2, @p3, @c3, @p4, @c4) { |
3 |
background: @c1; |
4 |
background: -moz-linear-gradient(top, @c1 @p1, @c2 @p2, @c3 @p3, @c4 @p4); |
5 |
background: -webkit-gradient(linear, left top, left bottom, color-stop(@p1, @c1), color-stop(@p2, @c2), color-stop(@p3, @c3), color-stop(@p4, @c4)); |
6 |
background: -webkit-linear-gradient(top, @c1 @p1, @c2 @p2, @c3 @p3, @c4 @p4); |
7 |
background: -o-linear-gradient(top, @c1 @p1, @c2 @p2, @c3 @p3, @c4 @p4); |
8 |
background: -ms-linear-gradient(top, @c1 @p1, @c2 @p2, @c3 @p3, @c4 @p4); |
9 |
background: linear-gradient(to bottom, @c1 @p1, @c2 @p2, @c3 @p3, @c4 @p4); |
10 |
}
|
У кожного браузера є префікс: -moz-
– для Firefox, -webkit-
– для Chrome тощо. В останньому рядку використовується рекомендована W3C (* World Wide Web
Consortium – Консорціум World-Wide Web) версія запису для градієнту. Якщо браузер підтримує її, то буде використовувати цей запис, в не попередні, оскільки це – остання властивість background
у правилі. Функція linear-gradient
приймає вісім параметрів: чотири пари значень кольору, зазначених у процентах. У цій функції створюється градієнт із чотирма шагами кольорів.
Стильове оформлення глобальних елементів
Давайте тепер визначимо стилі для деяких глобальних елементів, таких як кнопки та посилання. Ми хочемо, щоб для всіх елементів використовувався шрифт Helvetica
або Arial
і колір тексту, визначений раніше:
1 |
|
2 |
* { |
3 |
font-family: sans-serif; |
4 |
color: @text-color; |
5 |
}
|
Тіло
Правила стилів для тіла доволі прості; нам необхідний білий фон з повторенням фонового зображення. Видаляємо margin (* простір від границі поточного елементу до внутрішньої границі його родительського елементу) и padding (* відстань від внутрішнього краю рамки елементу до уявного прямокутника, що обмежує його вміст).
1 |
|
2 |
body { |
3 |
background: white url(gfx/bg.png); |
4 |
margin: 0; |
5 |
padding: 0; |
6 |
}
|
Поля для вводу
Також ми визначимо стиль за налаштуванням для всіх елементів <input/>
на сторінці:
1 |
|
2 |
input { |
3 |
width: 236px; |
4 |
height: 38px; |
5 |
border: 1px solid @border-color; |
6 |
padding: 0 10px; |
7 |
outline: none; |
8 |
font-size: 17px; |
9 |
|
10 |
&:focus { |
11 |
background: #FFFDF2; |
12 |
}
|
13 |
}
|
Ми встановлюємо розмір за налаштуванням та padding, а також ми використовуємо змінну @border-color,
щоб видалити докучливий синій колір, що з'являється при фокусуванні елементу. Ви повинні були бу помітити ще приклад синтаксичного цукру LESS: ми можемо додавати псевдокласи (і звичайні класи також) за допомогою символу &
(посилання на родительський елемент) як показано нижче:
1 |
|
2 |
&:focus { |
3 |
background: #FFFDF2; |
4 |
}
|
Завдяки цьому поля для вводу будуть мати жовтий фон при фокусуванні.
Кнопки для відправлення форми
Для кнопок для відправлення форми ми будемо використовувати як раніше визначений міксин, так і властивість border-radius
для створення ефекту:
1 |
|
2 |
input[type="submit"] { |
3 |
height: 36px; |
4 |
border: 1px solid #7BC574; |
5 |
border-radius: 2px; |
6 |
color: white; |
7 |
font-size: 12px; |
8 |
font-weight: bold; |
9 |
padding: 0 20px; |
10 |
cursor: pointer; |
11 |
.gradient4f(0%, #8CD585, 23%, #82CD7A, 86%, #55AD4C, 100%, #4FA945); |
12 |
}
|
Посилання
Для посилань необхідний колір, що відрізняється від кольору тексту. Також ми задаємо підкреслювання при наведенні на них курсору миші:
1 |
|
2 |
a { |
3 |
text-decoration: none; |
4 |
.antialiased(#58B84E);
|
5 |
&:hover { |
6 |
text-decoration: underline; |
7 |
}
|
8 |
}
|
Базовий макет
Ми почнемо з частини макету, що залишається незмінною для кожної сторінки. Ось код HTML, що я поясню нижче:
1 |
|
2 |
<!DOCTYPE HTML>
|
3 |
<html>
|
4 |
<head>
|
5 |
<link rel="stylesheet/less" href="style.less"> |
6 |
<script src="less.js"></script> |
7 |
</head>
|
8 |
<body>
|
9 |
<header>
|
10 |
<div class="wrapper"> |
11 |
<img src="gfx/logo.png"> |
12 |
<span>Twitter Clone</span></p> |
13 |
|
14 |
</div>
|
15 |
</header>
|
16 |
<div id="content"> |
17 |
<div class="wrapper"> |
18 |
|
19 |
</div>
|
20 |
</div>
|
21 |
<footer>
|
22 |
<div class="wrapper"> |
23 |
Ribbit - A Twitter Clone Tutorial<img src="gfx/logo-nettuts.png"> |
24 |
</div>
|
25 |
</footer>
|
26 |
</body>
|
27 |
</html>
|
Ми починаємо зі звичайного визначення doctype
(* тип документу) та head
(* заголовок) документа. Ви можете використовувати бібліотеку less.js
и підключити style.less
на етапі розробки (як я зробив у цьому коді). Пізніше ви можете скомпілювати файл LESS до CSS, якщо ви не захочете використовувати less.js.
Як ви, напевно, помітили, макет поділено на три чатини: header
, #content
та footer
. Вам необхідно буде зберегти цей документ HTML, щоб побачити, чи для всіх елементів ви задали вірні стилі.
Header
Давайте приступимо до header
. У ньому міститься логотип Ribbit та два слова: 'Twitter Clone'. Їх поміщено до обгортки, ширина якої визначається значенням змінної @content-width.
В макеті є декілька обгорток, у яких ширина визначається змінною @content-width
, а властивість margin має значення auto
(* розмір відступів буде автоматично розраховано браузером).
1 |
|
2 |
.wrapper { |
3 |
width: @content-width; |
4 |
margin: auto; |
5 |
}
|
Висота самого header складає 85px
, а ширина – на всю ширину сторінки.
1 |
|
2 |
header { |
3 |
background: url(gfx/bg-header.png); |
4 |
height: 85px; |
5 |
width: 100%; |
6 |
}
|
Після ширини додайте стиль для div.wrapper
, де задається вертикальний відступ:
1 |
|
2 |
div.wrapper { |
3 |
padding: 11px 0; |
4 |
}
|
Таким чином, header повинен виглядати як показано нижче:
1 |
|
2 |
header { |
3 |
background: url(gfx/bg-header.png); |
4 |
height: 85px; |
5 |
width: 100%; |
6 |
|
7 |
div.wrapper { |
8 |
padding: 11px 0; |
9 |
}
|
Зображення в обгортці повинні знаходитися на 10px
нижче, щоб їх було гарно відцентровано:
1 |
|
2 |
img { |
3 |
position: relative; |
4 |
top: 10px; |
5 |
margin: 0 15px 0 0; |
6 |
}
|
Також розмір шрифту в елементах <span/>
повинен бути більше, ніж його значення за налаштуванням:
1 |
|
2 |
span { |
3 |
font-size: 18px; |
4 |
margin: 0 42px 0 0; |
5 |
}
|
Нижче показано, як повинен виглядати наш дизайн на цей час:



Контент
На цей час ми небагато що можемо зробити з #content
. МИ додамо невеликий margin знизу та мінімально можливу довжину; макет буде виглядати різко, якщо він має недостатню висоту:
1 |
|
2 |
#content { |
3 |
margin-bottom: 15px; |
4 |
min-height: 560px; |
5 |
}
|
Для обгортки усередині необхідний вертикальний margin та горизонтальний зі значенням auto.
1 |
|
2 |
div.wrapper { |
3 |
margin: 38px auto; |
4 |
}
|
Footer (* підвал)
Подібно header footer незмінний для всіх сторінок. Ми будемо використовувати фонове зображення та менший розмір шрифту. Також нам необхідно правило clear: both
, оскільки ми будемо використовувати вирівнювання у content. Без нього підвал може з'їхати на рівень content:
1 |
|
2 |
footer { |
3 |
background: url(gfx/bg-footer.png); |
4 |
height: 251px; |
5 |
font-size: 14px; |
6 |
clear: both; |
7 |
}
|
Давайте тепер додамо невеликий padding до обгортки; зображення усередині нього повинні вирівнюватися по правому краю:
1 |
|
2 |
div.wrapper { |
3 |
padding: 15px; |
4 |
|
5 |
img { |
6 |
float: right; |
7 |
}
|
8 |
}
|
Нижче наведено footer:



Домашня сторінка
Ця сторінка показується користувачам, що не ввійшли до Ribbit. Тому необхідно буде надати форму для входу у заголовку та форму для реєстрації разом із великим зображенням із жабкою всередині. Давайте почнемо з базового шаблону.
Поля для вводу форми для входу
Додайте цю форму для входу в div.wrapper
header
після елементу <span/>
:
1 |
|
2 |
<form>
|
3 |
<input type="text"> |
4 |
<input type="password"> |
5 |
</form>
|
Ці поля вже мають стильове оформлення, проте нам необхідно додати відступи та задати значенням властивості display
inline
. Додайте цей код після span
в div.wrapper
header
:
1 |
|
2 |
form { |
3 |
display: inline; |
4 |
|
5 |
input { |
6 |
margin: 0 0 0 14px; |
7 |
}
|
8 |
}
|
Форма для реєстрації
Нижче наведено код HTML для форми реєстрації:
1 |
|
2 |
<img src="gfx/frog.jpg"> |
3 |
<div class="panel right"> |
4 |
<h1>New to Ribbit?</h1> |
5 |
<form>
|
6 |
<input name="email" type="text"> |
7 |
<input name="password" type="text"> |
8 |
<input name="password2" type="password"> |
9 |
<input type="submit" value="Create Account"> |
10 |
</form>
|
11 |
</div>
|
Додайте цей код HTML усередині div.wrapper
#content
. Нам необхідно, щоб зображення було вирівняно по лівому краю і у нього були закруглені кутки (додайте цей код після margin у div.wrapper
#content
):
1 |
|
2 |
img { |
3 |
border-radius: 6px; |
4 |
float: left; |
5 |
}
|
Тепер ви можете приступити до стильового оформлення форми для реєстрації. Також у нас буде панель, яку будемо використовувати пізніше; тому ми створимо стильове оформлення для .panel
:
1 |
|
2 |
div.panel { |
3 |
border: 1px solid @border-color; |
4 |
background: white; |
5 |
margin: 0; |
6 |
margin-bottom: 29px; |
7 |
border-radius: 6px; |
8 |
font-size: 14px; |
9 |
}
|
Проте зараз ми створимо правила тільки для панелі з класом right
. Вона вже й переміщена до правого краю панелі. Так що вставте наступний код у div.panel
:
1 |
|
2 |
&.right { |
3 |
width: 303px; |
4 |
height: 313px; |
5 |
float: right; |
6 |
}
|
Також нам необхідно потурбуватися про заголовок та вміст панелі. Ми будемо використовувати елементи <h1/>
для заголовку та елементи <p/>
для вмісту. Зверніть увагу, що ви можете використовувати *
(* груповий символ; використовується для представлення будь-якого символу або групи символів) усередині іншого елементу.
1 |
|
2 |
* { |
3 |
margin: 6px 0; |
4 |
}
|
5 |
form { |
6 |
padding: 0 23px; |
7 |
}
|
8 |
h1 { |
9 |
border-bottom: 1px solid @border-color; |
10 |
margin: 5px 0; |
11 |
font-weight: normal; |
12 |
font-size: 18px; |
13 |
padding: 13px 23px; |
14 |
height: 23px; |
15 |
}
|
16 |
p { |
17 |
padding: 0 24px; |
18 |
margin: 18px 0; |
19 |
}
|
Нижче показано, як повинні виглядати стилі для div.panel.
1 |
|
2 |
div.panel { |
3 |
border: 1px solid @border-color; |
4 |
background: white; |
5 |
margin: 0; |
6 |
margin-bottom: 29px; |
7 |
border-radius: 6px; |
8 |
font-size: 14px; |
9 |
|
10 |
&.right { |
11 |
width: 303px; |
12 |
height: 313px; |
13 |
float: right; |
14 |
}
|
15 |
|
16 |
* { |
17 |
margin: 6px 0; |
18 |
}
|
19 |
h1 { |
20 |
border-bottom: 1px solid @border-color; |
21 |
margin: 5px 0; |
22 |
font-weight: normal; |
23 |
font-size: 18px; |
24 |
padding: 13px 23px; |
25 |
height: 23px; |
26 |
}
|
27 |
p { |
28 |
padding: 0 24px; |
29 |
margin: 18px 0; |
30 |
}
|
31 |
}
|
А ось наведено скриншот, як повинна буде виглядати ця сторінка на цей момент (клацніть, щоб побачити у натуральній величині):
Сторінка для приятелів
Сторінка для приятелів повинно бути показано після входу користувача до застосування. На ній буде показано список останніх "Ribbits» і трохи статистики про ваш акаунт. Знову-таки, починаємо з базового щаблону.Знову-таки, починаємо з базового шаблону. На цій сторінці, як і на інших, буде показано кнопку для виходу із застосунку замість форми для входу у заголовку
:
1 |
|
2 |
<form>
|
3 |
<input type="submit" id="btnLogOut" value="Log Out"> |
4 |
</form>
|
Стилі для кнопок вже було визначено, так що на необхідно тільки вирівняти її по необхідному краю контейнера та додати деякі відступи:
1 |
|
2 |
#btnLogOut { |
3 |
float: right; |
4 |
margin: 14px 0 0 0; |
5 |
}
|
Скільки селектор цього правила – ID елемента, то ви можете його розмістити як самостійно, так і усередині div.wrapper
заголовка. Вибір за вами, проте пам'ятайте, що якщо ви вирішите розмістити його усередині іншого елементу, то скомпільований CSS буде мати більш довгий селектор (header div.wrapper #btnLogOut
).
Вікно "Create a Ribbit"
Для початку додайте цей код для панелі у div.wrapper
#content
:
1 |
|
2 |
<div id="createRibbit" class="panel right"> |
3 |
<h1>Create a Ribbit</h1> |
4 |
<p>
|
5 |
<form>
|
6 |
<textarea name="text" class="ribbitText"></textarea> |
7 |
<input type="submit" value="Ribbit!"> |
8 |
</form>
|
9 |
</p>
|
10 |
</div>
|
Стилі для класу .right
було вже визначено раніше, проте нам необхідно додати деякі стилі для елементу <textarea/>
. Ми визначимо для нього необхідні розмір та границі:
1 |
|
2 |
textarea.ribbitText { |
3 |
width: 249px; |
4 |
height: 160px; |
5 |
border: 1px solid @border-color; |
6 |
}
|
Додайте цей код до визначення стилів для правої панелі.
Інформація для користувачів
Тепер давайте зосередимося на панелі, у якій міститься інформація про акаунт користувача. Ми тимчасово помістимо до неї певний випадковий контент, щоб подивитися на стильове оформлення:
1 |
|
2 |
<div id="ribbits" class="panel left"> |
3 |
<h1>Your Ribbit Profile</h1> |
4 |
<div class="ribbitWrapper"> |
5 |
<img class="avatar" src="gfx/user1.png"> |
6 |
<span class="name">Frogger</span> @username |
7 |
<p>
|
8 |
567 Ribbits<span class="spacing">45 Followers</span><span class="spacing">32 Following</span><br> |
9 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
10 |
</p>
|
11 |
</div>
|
12 |
</div>
|
Код може здатися громіздким, проте його структура виявляється дуже простою, якщо ви видалите вміст:
1 |
|
2 |
<div id="ribbits" class="panel left"> |
3 |
<h1>Your Ribbit Profile</h1> |
4 |
<div class="ribbitWrapper"> |
5 |
<img class="avatar" src="gfx/user1.png"> |
6 |
<span class="name"> </span> |
7 |
<p>
|
8 |
<span class="spacing"> </span><span class="spacing"> </span><br> |
9 |
</p>
|
10 |
</div>
|
11 |
</div>
|
Як би там не було, у нас є ще одна панель; так що нам необхідно спочатку визначити стилі для неї:
1 |
|
2 |
&.left { |
3 |
width: @content-width - 327; |
4 |
float: left; |
5 |
}
|
Ви, можливо, знаєте, куди помістити цей код (зверніть увагу, як легко ви можете виконувати арифметичні операції в LESS). Ця панель містить div.ribbitWrapper
. Так що додайте наступний код:
1 |
|
2 |
div.ribbitWrapper { |
3 |
padding: 15px 0; |
4 |
}
|
Усередині цього елементу міститься два елемента <span/>
з різними значеннями кольору та розміру шрифту. Їх класи – .name
и .time
:
1 |
|
2 |
span { |
3 |
&.name { |
4 |
font-size: 18px; |
5 |
color: #58B84E; |
6 |
}
|
7 |
|
8 |
&.time { |
9 |
font-size: 12px; |
10 |
color: #CCC; |
11 |
}
|
12 |
}
|
Також нам необхідно визначити положення автора біля лівої границі. Додайте наступний код:
1 |
|
2 |
img.avatar { |
3 |
margin: 0 19px 0 20px; |
4 |
float: left; |
5 |
}
|
Також текст Ribbit повинен бути вирівняно по ширині (* що означає одночасне вирівнювання по лівому та правому краю) та переміщено вправо. Завдяки цьому коду текст буде розміщено після аватара, а не під ним:
1 |
|
2 |
p { |
3 |
margin: 5px 50px 0 90px; |
4 |
padding: 0; |
5 |
text-align: justify; |
6 |
line-height: 1.5; |
7 |
.antialiased(@text-color);
|
8 |
}
|
У цьому параграфі є елементи <span/>
з вертикальними лініями, що візуально їх розділяють. Цей ефект досягається за допомогою границі, поля та відступу.
1 |
|
2 |
span.spacing { |
3 |
padding-left: 9px; |
4 |
margin-left: 9px; |
5 |
height: 10px; |
6 |
border-left: 1px solid @border-color; |
7 |
}
|
Ribbits приятелів
На цій панелі перелічуються останні ribbits людей, на яких користувач підписався. Додайте наступний код після панелі з інформацією про користувача.
1 |
|
2 |
<div class="panel left"> |
3 |
<h1>Your Ribbit Buddies</h1> |
4 |
<div class="ribbitWrapper"> |
5 |
<img class="avatar" src="gfx/user2.png"> |
6 |
<span class="name">Kermit</span> @username <span class="time">15m</span> |
7 |
<p>
|
8 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
9 |
</p>
|
10 |
</div>
|
11 |
<div class="ribbitWrapper"> |
12 |
<img class="avatar" src="gfx/user1.png"> |
13 |
<span class="name">Frogger</span> @username <span class="time">15m</span> |
14 |
<p>
|
15 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
16 |
</p>
|
17 |
</div>
|
18 |
<div class="ribbitWrapper"> |
19 |
<img class="avatar" src="gfx/user2.png"> |
20 |
<span class="name">Kermit</span> @username <span class="time">15m</span> |
21 |
<p>
|
22 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
23 |
</p>
|
24 |
</div>
|
25 |
<div class="ribbitWrapper"> |
26 |
<img class="avatar" src="gfx/user3.png"> |
27 |
<span class="name">Hypnotoad</span> @username <span class="time">15m</span> |
28 |
<p>
|
29 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
30 |
</p>
|
31 |
</div>
|
32 |
<div class="ribbitWrapper"> |
33 |
<img class="avatar" src="gfx/user2.png"> |
34 |
<span class="name">Kermit</span> @username <span class="time">15m</span> |
35 |
<p>
|
36 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
37 |
</p>
|
38 |
</div>
|
39 |
<div class="ribbitWrapper"> |
40 |
<img class="avatar" src="gfx/user3.png"> |
41 |
<span class="name">Hypnotoad</span> @username <span class="time">15m</span> |
42 |
<p>
|
43 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
44 |
</p>
|
45 |
</div>
|
46 |
</div>
|
У ній є декілька прикладів ribbits, щоб подивитися на її вигляд. Ми додамо деякі границі для їх візуального розділення. Додайте цей код до div.ribbitWrapper
:
1 |
|
2 |
border-bottom: 1px solid @border-color; |
3 |
&:last-child { |
4 |
border: none; |
5 |
}
|
У цьому правилі додається нижня границя та видаляється границя в останнього div.ribbitWrapper
– границя вже існує у панелі.
Нижче наведено, як повинна виглядати сторінка тепер:
Public Ribbits Page (* сторінка з публічними ribbits)
На сторінці "Public Ribbits" буде перелічено останні ribbits профілів, які не відмічені як приватні, так що користувачі можуть попереглядати ribbits тих, кого у них нема у списку приятелів. Трохи несподівано, але нам нема необхідності задавати стилі тут, проте необхідно додати трохи коду HTML. Єдина відмінність цієї сторінки від попередньої у тому, що на цій відсутня панель із інформацією про користувача, проте на ній буде інший контент у фінальній версії застосування. Так що можете сміливо копіювати код сторінки для приятелів, проте видалите цю панель:
1 |
|
2 |
<div id="ribbits" class="panel left"> |
3 |
<h1>Your Ribbit Profile</h1> |
4 |
<div class="ribbitWrapper"> |
5 |
<img class="avatar" src="gfx/user1.png"> |
6 |
<span class="name">Frogger</span> @username |
7 |
<p>
|
8 |
567 Ribbits<span class="spacing">45 Followers</span><span class="spacing">32 Following</span><br> |
9 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
10 |
</p>
|
11 |
</div>
|
12 |
</div>
|
Також змініть заголовок "Public Ribbits". Нижче наведено прев'ю цієї сторінки:
Public Profiles Page (* сторінка для публічних профілів)
На цій сторінці користувачі зможуть побачити список профілів, які не відмічені як приватні. Також є вікно для пошуку інших профілів. Ми почнемо з базового шаблону.
Пошук профілів
для пошуку буде використовуватися панель .right
разом із елементом <input/>
усередині.
1 |
|
2 |
<div class="panel right"> |
3 |
<h1>Search for profiles</h1> |
4 |
<p>
|
5 |
<form>
|
6 |
<input name="query" type="text"> |
7 |
<input type="submit" value="Ribbit!"> |
8 |
</form>
|
9 |
</p>
|
10 |
</div>
|
Список профілів
Нижче наведено декілька прикладів профілів для списку, так що ви можете побачити, як ван повинен виглядати у браузері. У наступних посібниках ми, звісно ж, замінимо їх відповідним чином.
1 |
|
2 |
<div id="ribbits" class="panel left"> |
3 |
<h1>Public Profiles</h1> |
4 |
<div class="ribbitWrapper"> |
5 |
<img class="avatar" src="gfx/user2.png"> |
6 |
<span class="name">Kermit</span> @username <span class="time">625 followers <a href="#">follow</a></span> |
7 |
<p>
|
8 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
9 |
</p>
|
10 |
</div>
|
11 |
<div class="ribbitWrapper"> |
12 |
<img class="avatar" src="gfx/user1.png"> |
13 |
<span class="name">Frogger</span> @username <span class="time">329 followers <a href="#">follow</a></span> |
14 |
<p>
|
15 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
16 |
</p>
|
17 |
</div>
|
18 |
<div class="ribbitWrapper"> |
19 |
<img class="avatar" src="gfx/user3.png"> |
20 |
<span class="name">Hypnotoad</span> @username <span class="time">129 followers <a href="#">follow</a></span> |
21 |
<p>
|
22 |
Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. <a href="#">http://net.tutsplus.com/tutorials/php/ ...</a> |
23 |
</p>
|
24 |
</div>
|
25 |
</div>
|
Ця сторінка повинна виглядати як показано нижче:
Компілювання CSS
Результатом звернення до вкладених елементів можуть бути громіздкі селектори.
Як я згадував раніше, для етапу публічного доступу додатка ви можете скомпілювати ваш LESS до CSS (і я рекомендував вам це через кращу продуктивність). Існує декілька доступних онлайн компіляторів:
Також є декілька автономних компіляторів:
- Crunch! (що є повноцінним редактором для LESS)
- WinLess (надає можливість автоматичної компіляції при зміні файлів Less)
- SimpLESS (є можливість мініфікації CSS)
Якщо жоден із цих компіляторів для вас не працює, то скористайтеся пошуком Google; їх безліч! Також ви можете використовувати lessc
с сайту LESS, проте набагато простіше буде скомпілювати ваші файли LESS за допомогою інших компіляторів. Звісно ж, нічого страшного, якщо ви використовуєте бібліотеку less.js
для динамічного компілювання макету; нові браузери кешують отриманий у результаті CSS.
Завершення
Як ви бачите, LESS – потужний інструмент, що дозволяє легше та швидше створювати стильове оформлення для макетів, ніж при використанні простого CSS.
Проте, це тільки початок. Будьте готові до реалізації серверної частини Ribbit на декількох мовах та платформах у наступній подальший посубнирків!