Группирование и комбинированный селектор

Как следует разобравшись в том, что такое HTML селекторы и селекторы классов, можно приступать к освоению некоторых продвинутых методов CSS программирования.

Группирование селекторов

Вы можете присвоить одинаковые свойства любому числу селекторов, разделяя их запятыми, а не определяя отдельные блоки декларации для каждого селектора.

Например, если у вас есть нечто похожее на


h2 {
   color: red;
}

.thisOtherClass {
   color: red;
}

.yetAnotherClass {
   color: red;
}

то можно сгруппировать все это в один блок декларации


h2, .thisOtherClass, .yetAnotherClass {
   color: red;
}


Комбинированный селектор

Если CSS хорошо структурирован, то не возникает необходимости в использовании многих селекторов классов и идентификаторов. Это связано с тем, что вы можете определять свойства селекторов внутри других селекторов.

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

Рассмотрим следующий HTML документ:


<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Сальса</title>
 </head>
 <body> 
  <header>
   <h1>Сальса</h1>
   <ul>
    <li><a href="#">Uno</a></li>
    <li><a href="#">Dos</a></li>
    <li><a href="#">Tres</a></li>
   </ul> 
  </header>
  <main>
   <p>Сальса — современный социальный танец. Как многие 
   латиноамериканские танцы, сальса экспрессивна, 
   разнообразна и богата импровизацией.</p>
  </main>
  <footer>
   <ul>
    <li><a href="#">Cinco</a></li>
    <li><a href="#">Seis</a></li>
    <li><a href="#">Siete</a></li>
   </ul> 
  </footer>
 </body>
</html>

Дерево документа для приведенного примера будет выглядеть следующим образом:

Дерево документа
Дерево документа

В зависимости от характера объединяющей связи элементы делятся на предков и потомков, родителей и дочерей, братские элементы и т.д.

Таким образом, мы имеем следующую структуру:

<!DOCTYPE> не считается элементом, поэтому в расчёт не берется.

Само дерево начинается с элемента <html>. Он называется "корневой элемент". Все элементы связаны друг с другом сверху вниз следующими связями.

Предок
Элемент, внутри которого располагаются другие элементы с произвольным уровнем вложения. Для <p> предками будут <main>, <body> и <html>.

Потомок
Элемент, расположенный внутри одного или нескольких предков. К примеру, элемент <a> является потомком как для <li>, так и для <ul>, так как расположен внутри них.

Родитель
Непосредственный предок элемента, который располагается выше на один уровень в дереве документа. Элемент <header> является родителем для <ul>, но не для <li>, его родителем будет <ul>.

Ребенок (дочерний элемент)
Непосредственный потомок элемента, который располагается ниже на один уровень в дереве документа. К примеру, дочерним для элемента <main> будет элемент <p>, для <ul> дочерними элементами являются элементы <li>, но не <a>. У родителя может быть произвольное число дочерних элементов, но у дочернего элемента только один родитель.

Братья (сиблинги)
Элементы, расположенные на одной ветке и имеющие общего родителя, называются братскими или сиблинги, если пользоваться термином из генетики. Братскими являются элементы <header>, <main> и <footer>, а также <li>. Элементы <a> братскими не являются из-за того, что у них разные родители.

Смежные
Смежные элементы - это братские элементы, которые расположены рядом друг с другом. Смежными будут элементы <header> и <main>, а также <main> и <footer>, но никак не <header> и <footer>, потому что они располагаются "через одного".

Комбинированный селектор как бы описывает отношения между другими селекторами.

Комбинированный селектор состоит из нескольких простых селекторов, между которыми вставляется комбинатор.

Всего в CSS существует четыре комбинатора:

  • селектор потомков (пробел)
  • селектор дочерних элементов (>)
  • селектор смежных элементов (+)
  • селектор братских элементов (~)

Селектор потомков

Селектор потомков позволяет выбрать все элементы, являющиеся потомками заданного элемента.

В следующем примере выбираются все элементы <p>, расположенные внутри элементов <div>:


div p {
  background-color: yellow;
}


Селектор дочерних элементов (>)

Селектор дочерних элементов позволяет выбрать все элементы, являющиеся дочерними по отношению к заданному элементу.

В следующем примере выбираются все элементы <p>, которые являются дочерними по отношению к элементу <div>:


div > p {
  background-color: yellow;
}


Селектор смежных элементов (+)

Селектор смежных элементов позволяет выбрать все элементы, которые находятся непосредственно после заданного элемента.

В следующем примере выбирается первый элемент <p>, расположенный сразу после элемента <div>:


div + p {
  background-color: yellow;
}


Селектор братских элементов (~)

Селектор братских элементов позволяет выбрать все элементы, являющиеся братскими (сиблинги) по отношению к заданному элементу.

В следующем примере выбираются все элементы <p>, которые являются братскими по отношению к элементу <div>:


div ~ p {
  background-color: yellow;
}