— Способ, которым мы выбираем элементы для применения стилей называется селектор (с англ. selector). До сих пор для добавления стилей мы выбирали элементы по имени тега.

— Ну да, мы указывали, например, h1 или p и дальше перечисляли свойства CSS. А что, есть другой способ?

— Иногда, нам нужно сделать разные стили для одного и того же тега. Например, часть параграфов нужно красить в красный цвет, а другую часть - в черный. Для этого селектор по имени тега нам не подойдет и нужно будет использовать другой подход.

Идентификаторы

Когда нужно выделить один элемент из всех, ему можно добавить идентификатор с помощью атрибута id.

У идентификатора есть важная особенность. Он должен быть уникальным в рамках всего HTML документа. То есть значение атрибута id должно использоваться только один раз.

Попробуем добавить уникальный id второму параграфу.

<p>Параграф 1</p>
<p id="unique-paragraph">Параграф 2</p>
<p>Параграф 3</p>
<p>Параграф 4</p>

Теперь нам надо выбрать этот параграф для применения стилей.

— Думаю для этого нам достаточно вместо имени тега p использовать unique-paragraph.

— Не совсем. Если ты попробуешь добавить стили таким образом, то браузер будет думать, что тебе нужен тег с именем unique-paragraph, которого не существует.

Для того, чтобы селектор по id работал правильно, мы должны добавить знак # перед идентификатором.

<style>
  #unique-paragraph {
    color: red;
  }
</style>

Такой стиль будет применен только к тегу с id="unique-paragraph" и изменим его цвет на красный.

Классы

— Но чаще тебе прийдется группировать разные элементы для применения стилей.

— Выделить, например, не один параграф, а два?

— Да. Давай те же четыре параграфа разобьем на две группы — четные и нечетные. Для этого каждому элементу нужно присвоить класс с помощью атрибута class.

В отличие от идентификатора, один и тот же класс может использовать для неограниченного количества элементов, а элементы будут объединены в группы по значению атрибута class.

Для выполнения задания нам нужны будут два класса - odd (в переводе с англ. - нечетные) и even (в переводе с англ. четные):

<p class="odd">Параграф 1</p>
<p class="even">Параграф 2</p>
<p class="odd">Параграф 3</p>
<p class="even">Параграф 4</p>

Селектор для классов немного отличается он идентификатора. Вместо символа # надо указать точку ., а далее значение атрибута class или просто имя css класса.

У нас будет два класса и два селектора: .odd и .even.

Давай у четных параграфов сделаем цвет текста зеленым, а у нечетных - красным:

<style>
  .odd {
    color: red;
  }
  .even {
    color: green;
  }
</style>

Одному и тому же тегу можно добавить несколько классов.

Например, для двух средних параграфов нам надо сделать шрифт 18px. Так как они относятся к разным классам, то мы не можем просто изменить стили. Нужно добавить еще один класс.

Добавление мы делаем в атрибуте class, разделяя разные классы пробелами.

<p class="odd">Параграф 1</p>
<p class="even large-font">Параграф 2</p>
<p class="odd large-font">Параграф 3</p>
<p class="even">Параграф 4</p>

И добавим еще один селектор в стили:

<style>
  .odd {
    color: red;
  }
  .even {
    color: green;
  }
  .large-font {
    font-size: 18px;
  }
</style>

— А раз у элемента может быть несколько классов, то можно ли делать селектор по нескольким классам?

— Можно. Для этого два селектора по имени класса нужно перечислить подряд. Без пробелов, запятых или других знаков препинания.

Если нужно добавить стили для всех HTML элементов, которые одновременно относятся к классам even и large-font, то селектор будет таким:

<style>
  .even.large-font {
    text-align: right;
  }
</style>

Внутри селектора мы добавили выравнивание текста по правому краю.

— Понятно.

— В предыдущих примерах мы группировали с помощью классов только однотипные теги. Но мы вполне можем объединить и разные теги в одну группу с помощью одного css класса. Например, добавим класс red-text одновременно и параграфу и заголовку:

<h1 class="red-text">Заголовок 1</h1>
<p class="red-text">Параграф 1</p>
<h1>Заголовок 2</h1>
<p>Параграф 1</p>

После этого, в стилях можно будет изменить цвет всех HTML элементов этого класса.

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