Вы спрашивали: «Как окрасить каждый абзац своим цветом не вмешиваясь в HTML?» Мы отвечаем: «Для таких фокусов в CSS есть специальный псевдокласс nth-child». И сейчас мы рассмотрим один из вариантов его использования.
Для начала разберёмся, что такое псевдокласс. Псевдокласс в CSS это ключевое слово, добавленное к селектору, которое определяет его особое состояние. Вы точно видели это в стилях ссылок, :active — это и есть тот самый псевдокласс:
# цвет уже нажатой (кликнутой) ссылки станет красным и без подчеркивания
a:active { color: red; text-decoration: none }
Псевдокласс :nth-child позволяет находить один или более элементов по порядковому номеру и/или среди группы соседних элементов, чтобы применить к ним нужные стили. Т.е. это куда проще, чем каждому элементы создавать свой класс в стиле
Как это выглядит?
Самые простые варианты:
Элементы с нечетными номерами (1,3,5, etc): li:nth-child(odd) { color: green; }

Элементы с четными номерами (2,4,6, etc): li:nth-child(even) { color: green; }

Последний элемент: li:last-child { color: green; }

Второй элемент с конца: li:nth-last-child(2) { color: green; }

Все элементы, кроме первых пяти: li:nth-child(n+6) { color: green; }

Только первые пять элементов: li:nth-child(-n+5) { color: green; }

Еще примеры:
:nth-child(7) # Описывает седьмой элемент. :nth-child(5n) # Описывает элементы с номерами 5, 10, 15, и т. д. :nth-child(3n+4) # Описывает элементы с номерами 4, 7, 10, 13, и т. д. :nth-child(-n+3) # Описывает первые три элемента среди группы соседних элементов. p:nth-child(n) # Описывает каждый элемент<p> среди группы соседних элементов. Эквивалентно простому селектору p. p:nth-child(1) или p:nth-child(0n+1) # Описывает каждый элемент <p>, являющийся первым среди группы соседних элементов. Эквивалентно селектору :first-child.
Условия задачки
- Выполнить требования ниже НЕ изменяя HTML-код — только через CSS
- Сделать серый фон
- Цвет текста абзаца должен соответствовать тексту (первый зеленый, второй синий, последний розовый и т.д.)
- Скрытый абзац не должен быть виден
- В абзаце «Красный по центру» должен быть белый фон с красным текстом по центру
Итак, ниже наша заготовка в виде HTML. Обратите внимание — во всех абзацах <p> внутри указаны цвета, в которые их нужно «окрасить». Проблема с селекторами .id и .class тут заключается в том, что они меняют либо один, либо все элементы на странице. Здесь нам нужен другой подход
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<article>
<p>Green</p>
<p>Blue</p>
<div>
<p>Red centered</p>
</div>
<p>Yellow</p>
<p>Green</p>
<div class="hidden"><p>Hidden</p></div>
<p>Green</p>
<p>Green</p>
<p>Purple</p>
<p>Pink</p>
<hr>
</article>
</body>
</html>
Теперь пишем код CSS:
article {
background-color: #e2e2e2; }
div {
display: inline-block;
margin: 0 0 0 25%;
padding: 0px 50px 0px 50px;
background-color: white;
}
div.hidden {
display: none;
}
p:nth-child(1), p:nth-child(5), p:nth-child(7), p:nth-child(8){
color: green;
}
p:nth-child(2){
color: blue;
}
p:nth-child(4){
color: yellow;
}
p:nth-child(9){
color: purple;
}
p:nth-child(10){
color: pink;
}
p:last-child {
color: red;
}
Сначала мы указываем текст фона (background-color) основного содержимого article. Далее для контейнера div мы прописываем внешние и внутренние отступы. Для div класса hidden — отдельный код. Мы его не прорисовываем (display: none;). Потом идёт в ход псевдокласс nth-child . Мы указываем расположение элемента на странице и задаем ему определенный цвет
