Лекція 3: Основи CSS

Лекція 3. Основи CSS

CSS (Cascading Style Sheets), або каскадні таблиці стилів, описують правила форматування окремого елемента веб-сторінки. Створивши стиль один раз, його можна застосовувати до будь елементів сторінки скільки завгодно разів.

Визначення стилю складається з двох основних частин: самого елемента веб-сторінки - селектора, і команди форматування - блоку оголошення.

Селектор повідомляє браузеру, який саме елемент форматувати, в блоці оголошення перелічено властивості команд форматування і їх значення.

Структура оголошення стилю елемента в CSS

Додавання CSS до веб-сторінці

1.1. Вбудовані таблиці стилів

Вбудовані стилі представляють набір стилів, що є частиною коду веб-сторінки, знаходяться між тегами <style> ... </ style> і розташовані всередині елемента <head>. Вбудовані стилі діють тільки на сторінці, на якій вони містяться. Вбудовані стилі мають пріоритет перед глобальними, але поступаються стилям, що вказані в тезі. На одній сторінці можна розміщувати довільну кількість вбудованих стилів:

<head>

<style type = "text / css">

h1, h2 { color: red; font-family: "Times New Roman", Georgia, Serif; line-height: 1.3em;}

</ style>

</ head>

1.2. Внутрішні текстові таблиці стилів

Внутрішні текстові стилі не використовують селектори, присвоєння стилю відбувається безпосередньо до html-елементу через атрибут style:

<p style = "font-family:" Times New Roman ", Georgia, Serif; color: # 70d7700;"> Зверніть увагу на цей текст. </ P>

Недоліком такого способу є неможливість автоматичного використання даного стилю для іншого елемента.

1.3. Правило @import

Правило @import дозволяє завантажити зовнішню таблицю стилів. Щоб директива @import працювала, вона повинна розташовуватися всередині тега <style> перед іншими правилами:

<style type = "text / css">

@import url (mobile.css);

p { font-size: 0.9em; color: grey;}

</ style>

1.4. Тег <link>

Зовнішня таблиця стилів представляє текстовий файл з розширенням .css, в якому знаходиться весь набір стилів CSS. Він не містить HTML-код, тому його не потрібно вкладати всередину тегів <style> ... </ style>. Задані в файлі стилі будуть працювати для всіх сторінок веб-сайту.

Зовнішня таблиця стилів (кілька таблиць стилів) прикріплюється до веб-сторінки за допомогою тега <link>, вкладеного в тег <head>:

<head>

<link rel = "stylesheet" type = "text / css" href = "style/style1.css">

<link rel = "stylesheet" type = "text / css" href = "style/style2.css">

</ head>

де rel = "stylesheet" вказує тип посилання (посилання на таблицю стилів), а type = "text / css" повідомляє браузеру тип даних, в даному випадку це текстовий файл, що містить css-код.

2. Селектори

За допомогою селекторів створюються CSS-правила для форматування елементів веб-сторінки. В якості селекторів використовуються не тільки самі елементи та їхні класи і ідентифікатори, а також псевдокласи і псевдоелементи.

Псевдокласи дозволяють додавати особливі класи до елементів, вибираючи об'єкти, яких немає в структурі веб-сторінки, або які не можна вибрати за допомогою звичайних селекторів, наприклад, перша буква або перший рядок одного абзацу.

Псевдоелементи вибирають елементи, які не є елементами структури html-сторінки.

Список селекторів CSS

Універсальний селектор. Універсальний селектор відповідає будь-якому елементу, наприклад, наступний запис обнулить відступи для всіх елементів веб-сайту:

* {Margin: 0;}

Селектор Елемента. Селектори елементів використовуються для визначення стилів елементів для всіх сторінок веб-сайту, наприклад, стиль заголовків h1 або загальний стиль абзаців:

h1 {font-family: Lobster, cursive;}

p {letter-spacing: 0.1em;}

Селектор Класу. Селектори класу використовуються для визначення стилів для кількох елементів одного типу, розміщених у різних частинах або на різних сторінках веб-сайту. Для створення заголовка класу headline необхідно додати атрибут class з відповідним значенням в відкриваючий тег <h1>. Далі необхідно задати стиль для зазначеного класу. Даний стиль оформлення можна застосувати і для інших елементів.

Код HTMLКод CSS

<h1 class = "headline"> Інструкція користування персональним комп'ютером </ h1>headline {

text-transform: uppercase;

color: lightblue;

}

Селектор Ідентифікатора. Селектори ідентифікатора використовуються для привласнення стилю одному конкретному елементу. Ідентифікатор id елемента можна використовувати в документі лише один раз, оскільки він виділяє унікальний елемент.

#sidebar { text-transform: uppercase; color: lightblue;}

Селектор Нащадка. До нащадків елемента відносяться його дочірні елементи. Селектори нащадків дозволяють стилізувати всі вкладені елементи, наприклад,  можна відформатувати зовнішній вигляд елементів маркованого списку:

ul li {text-transform: uppercase;} - вибере всі елементи li, що є нащадками всіх елементів ul.

Якщо потрібно відформатувати нащадки певного елемента, то можна поставити йому стильовий клас:

p.first a {color: green;} - означає, що потрібно застосувати даний стиль до всіх посилань, нащадків абзацу, що відноситься до класу з ім'ям first;

p .first a {color: green;} - якщо додати пробіл, то будуть обрані посилання, розташовані всередині будь-якого тегу класу .first, який є нащадком елемента <p>;

.first a {color: green;} - даний стиль застосовується до любого посилання, що розташоване всередині інших тегів, позначених класом .first.

Дочірній селектор. Дочірній тег є прямим нащадком тегу, що його містить. Тобто, відносини "батьки-діти" існують між елементами і тими елементами, які містяться безпосередньо всередині них. В одного елемента може бути кілька дочірніх елементів, а батьківський елемент може бути в кожного елемента тільки один.

p> strong - вибирає всі елементи strong, які є дочірніми по відношенню до елементу p.

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

h1 + p - вибере всі перші абзаци, що йдуть безпосередньо за будь-яким тегом <h1>, не зачіпаючи решта абзаців.

h1 ~ p - вибере всі абзаци, які є сестринськими по відношенню до будь-якого заголовку h1 і йдуть після нього.

Селектор Атрибута. Селектори атрибутів дозволяють форматувати елементи на основі вибірки будь-яких містяться в них атрибутів або значень атрибутів, варіанти:

[атрибут] - вибирає всі елементи, для яких заданий вказаний атрибут.

img [alt] - вибирає всі картинки, що містять атрибут alt.

img [title = "flower"] - вибирає всі картинки, назва яких містить слово flower.

Псевдоклас. Псевдокласи - це класи, що фактично не прикріплені до тегів html-коду. Вони викликають CSS-правила при вчиненні тої чи іншої події або підкоряються певному правилу:

a: link - посилається на невідвідуване посилання.

a: visited - посилається на вже відвідане посилання.

a: hover - посилається на будь-який елемент, над яким проводять курсором миші.

a: focus - посилається на будь-який елемент, над яким знаходиться курсор миші.

a: active - посилається на елемент, який був активізований користувачем.

Структурні псевдокласи. Структурні псевдокласи форматують дочірні елементи відповідно до зазначеного параметра в скобці, варіанти:

:nth-child (odd) - вибирає непарні дочірні елементи.

:nth-child (even) - вибирає парні дочірні елементи.

:nth-child (3n) - вибирає кожен третій елемент серед дочірніх.

Структурні псевдокласи типу. Дозволяють вказати на конкретний тип дочірнього тегу:

:nth-of-type () - вибирає елементи за аналогією з: nth-child (), при цьому бере до уваги тільки тип елемента.

:first-of-type - дозволяє вибрати перший дочірній елемент.

:last-of-type - вибирає останній тег конкретного типу.

:nth-last-of-type () - вибирає елемент заданого типу в списку елементів відповідно до зазначеного місцеположенням, починаючи з кінця.

:only-of-type - вибирає єдиний елемент зазначеного типу серед дочірніх елементів батьківського елементу.

Псевдоелементи. Псевдоелементи використовуються для додавання вмісту, який генерується за допомогою властивості content, і для зміни зовнішнього вигляду частині елементу:

:before - вставляє згенерований вміст перед елементом.

:after - додає згенерований вміст після елемента.

2.1. Комбінація селекторів

Щоб домогтися більш чіткого вибору елементів для форматування, можна не обмежуватися завданням одного типу селектора, а використовувати комбінації селекторів, наприклад:

a [href] [title] - вибере всі посилання, для яких задані атрибути href і title;

img [alt * = css]: nth-of-type (even) - вибере всі парні картинки, альтернативний текст яких містить слово css.

2.2. Угруповання селекторів

Можна застосувати один і той же стиль до кількох елементів, причому обмежень за кількістю доданих елементів немає. Для цього необхідно в лівій частині оголошення помістити через кому потрібні селектори, наприклад:

h1, h2, h3, h4 {color: tomato; background: white;}

3. Принцип каскадування і специфічність правила

Каскадування представляє процес застосування різних правил до одного і того ж елементу. Більш конкретні правила мають пріоритет над більш загальними. Якщо у відношення одного і того ж елемента визначено кілька стилів, то в результаті до нього буде застосований останній з них.

Для кожного правила браузер обчислює специфічність селектора, і якщо у елемента є конфліктуючі оголошення властивостей, до уваги береться правило, що має найбільшу специфічність.

Значення специфічності складається з чотирьох частин: 0, 0, 0, 0. Специфічність селектора визначається наступним чином:

для id додається 0, 1, 0, 0;

для class додається 0, 0, 1, 0;

для кожного елементу і псевдоелемента додається 0, 0, 0, 1;

для вбудованого стилю, доданого безпосередньо до елементу - 1, 0, 0, 0;

універсальний селектор не має специфічності.

CSS

h1 {color: lightblue;} / * специфічність 0, 0, 0, 1 * /

em {color: silver;} / * специфічність 0, 0, 0, 1 * /

h1 em {color: gold;} / * специфічність: 0, 0, 0, 1 + 0, 0, 0, 1 = 0, 0, 0, 2 * /

div # main p.about {color: blue;} / * специфічність: 0, 0, 0, 1 + 0, 1, 0, 0 + 0, 0, 0, 1 + 0, 0, 1, 0 = 0, 1, 1, 2 * /

.sidebar {color: grey;} / * специфічність 0, 0, 1, 0 * /

#sidebar {color: orange;} / * специфічність 0, 1, 0, 0 * /

li # sidebar {color: aqua;} / * специфічність: 0, 0, 0, 1 + 0, 1, 0, 0 = 0, 1, 0, 1 * /

В результаті до елементу застосуються ті правила, специфічність яких більше, наприклад, якщо на елемент діють дві специфічності зі значеннями 0, 0, 0, 2 і 0, 1, 0, 1, то виграє друге правило.

Вагу правила також можна задати за допомогою ключового слова !important;, яке додається після значення властивості, наприклад, font-weight: bold!Important;.

Правило необхідно розміщувати в кінець оголошення перед закриваючою дужкою. Таке оголошення буде мати пріоритет над усіма іншими правилами.