Наш блог все ще виглядає доволі жахливо, чи не так? Час зробити його гарним! Для цього будемо використовувати CSS.
Каскадні таблиці стилів (англ. Cascading Style Sheets або скорочено CSS) - спеціальна мова, що використовується для опису зовнішнього вигляду і форматування сайту написаного мовою розмітки (як HTML). Сприймайте це, як свого роду макіяж для нашої веб-сторінки;).
Але ми ж не хочемо починати знову все з нуля, правда? А візьмемо знову щось, що вже було створене програмістами і опубліковано в Інтернеті для вільного користування. Ви ж знаєте, знову винаходити велосипед зовсім не весело.
Bootstrap - один з найбільш популярних HTML і CSS фреймворків для розробки прекрасних веб-сайтів: http://getbootstrap.com/
Він був написаний програмістами, які працювали для Twitter'у і на сьогоднішній день удосконалюється волонтерами з усього світу.
Для встановлення Bootstrap, вам потрібно додати наступні рядки у розділ <head> вашого .html файлу (blog/templates/blog/post_list.html):
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
Це не додасть жодного файлу до вашого проекту. Натомість ці рядки просто вказують на файли опубліковані в інтернеті. Просто рухайтесь вперед, відкрийте ваш веб-сайт і оновіть сторінку. Ось так!
Вже краще!
Інше поняття, про яке ви дізнаєтесь сьогодні називається статичні файли. Статичні файли включають усі ваші CSS файли та малюнки -- файли, які не є динамічними, а отже їхній вміст не залежить від змісту запиту і буде однаковим для усіх користувачів.
CSS -- статичний файл, отже для того щоб налаштувати CSS, нам потрібно спочатку налаштувати статичні файли в Django. Вам потрібно зробити це лише один раз. Почнемо:
Спочатку, нам потрібно створити папку для зберігання наших статичних файлів. Створимо папку static всередині нашої папки djangogirls .
djangogirls
├─── static
└─── manage.py
Відкриємо файл mysite/settings.py, опустимося вниз і додамо наступні рядки:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
Таким чином Django буде знати де можна знайти ваші статичні файли.
Що ж, тепер давайте створимо CSS файл для того, щоб додати ваш власний стиль до вашої веб-сторінки. Створіть нову папку з назвою css всередині вашої папки static. Потім всередині цієї папкиcss створіть новий файл з назвою blog.css. Готово?
static
└─── css
blog.css
Настав час написати CSS! Відкрийте файл static/css/blog.css в обраному кодовому редакторі.
Не будемо тут занурюватись надто глибоко в процес налаштування і вивчення CSS, оскільки це так просто, що ви можете вивчити цей матеріал самостійно після завершення воркшопу. Ми наполегливо рекомендуємо пройти цей курс Codeacademy HTML & CSS course для того щоб вивчити все, що вам потрібно знати про оформлення веб-сайтів з CSS.
Але принаймні попрацюємо трохи. Можливо, ми могли б змінити колір заголовка? Щоб зрозуміти кольори, комп'ютери використовують спеціальні коди. Вони починаються з # і далі слідують 6 літер (A-F), а також цифри (0-9). Ви можете знайти коди кольорів, наприклад, тут: http://www.colorpicker.com/. Також можете користуватися вже визначеними кольорами , такими як red та green.
У вашому файлі static/css/blog.css потрібно додати наступний код:
h1 a {
color: #FCA205;
}
h1 a -- CSS селектор. Це означає, що ми застосовуємо наші стилі до кожного елементу a всередині елементу h1 (наприклад, коли ми маємо в коді щось на зразок: <h1><a href="">link</a></h1>). У цьому випадку, ми повідомляємо про те, що треба змінити колір на #FCA205, тобто помаранчевий. Звичайно, ви можете визначити тут ваш власний колір!
В CSS файлі ми визначаємо стилі для елементів файлу HTML. Елементи ідентифікуються іменами (тобто a, h1, body), атрибутом class або атрибутом id. Class і id -- імена, які ви присвоюєте елементам власноруч. Класи (сlasses) визначають групи елементів, а ідентифікатори (id), в свою чергу, вказують на специфічні елементи. Наприклад, наступний тег може бути ідентифікований CSS з використанням тегового імені a, класу external_link, або ідентифікатора link_to_wiki_page:
<a href="http://en.wikipedia.org/wiki/Django" class="external_link" id="link_to_wiki_page">
Читайте про CSS селектори в CSS Selectors in w3schools.
Далі, нам треба також повідомити наш HTML шаблон про те, що ми додали CSS. Відкрийте файл blog/templates/blog/post_list.html і цей рядок до самого початку:
{% load staticfiles %}Тут ми лише завантажуємо статичні файли:). Далі, між <head> і </head>, після лінків на файли Bootstrap CSS (браузер читає файли за порядком їх слідування, отже код нашого файлу перекриває код в файлах Bootstrap), додайте цей рядок:
<link rel="stylesheet" href="{% static 'css/blog.css' %}">Ми щойно повідомили наш шаблон де розташовані наші CSS файли.
Тепер ваш файл має виглядати наступним чином:
{% load staticfiles %}
<html>
<head>
<title>Django Girls blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
</head>
<body>
<div>
<h1><a href="/">Django Girls Blog</a></h1>
</div>
{% for post in posts %}
<div>
<p>published: {{ post.published_date }}</p>
<h1><a href="">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaks }}</p>
</div>
{% endfor %}
</body>
</html>OK, збережіть файл і перезавантажте сторінку!
Чудова робота! Можливо, ми також хотіли б дати нашому веб-сайту трохи повітря і збільшити відступ зліва? Давайте спробуємо!
body {
padding-left: 15px;
}
Додайте це до вашого CSS, збережіть файл і подивіться як це працює!
Можливо, ми могли б також налаштувати шрифт нашого заголовка? Вставте це всередину розділу <head> файлу blog/templates/blog/post_list.html:
<link href="//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
Цей рядок імпортує шрифт із назвою Lobster з шрифтів Google (https://www.google.com/fonts).
Тепер додайте рядок font-family: 'Lobster'; до файлу static/css/blog.css всередині блоку визначення стилю для h1 a (код між дужками { і }) та перезавантажте сторінку:
h1 a {
color: #FCA205;
font-family: 'Lobster';
}
Чудово!
Як було зазначено вище, CSS має концепцію класів, котра дозволяє вам іменувати частину HTML коду і застосовувати стилі лише для цієї частини без будь-якого ефекту для інших. Це надзвичайно корисно якщо у вас є скажімо два блоки div, але вони виконують зовсім різні функції (як ваш заголовок і пост), отже, ви не хочете, щоб вони виглядали однаково.
Дайте імена певним частинам HTML коду. Додайте клас із назвою page-header до блоку div, що містить ваш заголовок, як це зроблено тут:
<div class="page-header">
<h1><a href="/">Django Girls Blog</a></h1>
</div>
А тепер додайте клас post до вашого блоку div, що містить сам допис.
<div class="post">
<p>published: {{ post.published_date }}</p>
<h1><a href="">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaks }}</p>
</div>А тепер додамо визначення блоків для різних селекторів. Селектори, які починають із символу . стосуються класів. Існує багато хороших довідників про CSS в Інтернеті, які можуть допомогти вам зрозуміти наступний код. Поки що, просто скопіюйте і вставте це у ваш файл djangogirls/static/css/blog.css:
.page-header {
background-color: #ff9400;
margin-top: 0;
padding: 20px 20px 20px 40px;
}
.page-header h1, .page-header h1 a, .page-header h1 a:visited, .page-header h1 a:active {
color: #ffffff;
font-size: 36pt;
text-decoration: none;
}
.content {
margin-left: 40px;
}
h1, h2, h3, h4 {
font-family: 'Lobster', cursive;
}
.date {
float: right;
color: #828282;
}
.save {
float: right;
}
.post-form textarea, .post-form input {
width: 100%;
}
.top-menu, .top-menu:hover, .top-menu:visited {
color: #ffffff;
float: right;
font-size: 26pt;
margin-right: 20px;
}
.post {
margin-bottom: 70px;
}
.post h1 a, .post h1 a:visited {
color: #000000;
}
Далі модифікуйте HTML код, що відображує пости. Замініть:
{% for post in posts %}
<div class="post">
<p>published: {{ post.published_date }}</p>
<h1><a href="">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaks }}</p>
</div>
{% endfor %}в blog/templates/blog/post_list.html на:
<div class="content container">
<div class="row">
<div class="col-md-8">
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1><a href="">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaks }}</p>
</div>
{% endfor %}
</div>
</div>
</div>Збережіть файли і перезавантажте свій сайт.
Юхууу! Виглядає прекрасно, чи не так? Код, який ми щойно вставили насправді не є складним для розуміння і ви маєте бути в змозі зрозуміти більшу його частину просто прочитавши.
Не бійтеся трохи повозитися з цим CSS файлом і спробуйте поміняти деякі речі. Якщо щось зламається, не хвилюйтесь, ви завжди можете відмінити попередню дію!
В будь-якому разі, ми настійно рекомендуємо пройти цей безкоштовний он-лайн курс Codeacademy HTML & CSS course як своєрідну домашню роботу після воркшопу щоб вивчити усе, що потрібно знати про оформлення ваших веб-сайтів із CSS.
Готові до наступного розділу?! :)




