Css second child: 🤷🏽♀️ Page not found | MDN Web Docs
child() | HTML и CSS с примерами кода
Псевдокласс :nth-child
используется для добавления стиля к элементам на основе нумерации в дереве элементов.
Синтаксис
/* Выбирает каждый четвёртый элемент
среди любой группы соседних элементов */
:nth-child(4n) {
color: lime;
}
Значения
odd
- Все нечётные номера элементов.
even
- Все чётные номера элементов.
<число>
- Порядковый номер дочернего элемента относительно своего родителя. Нумерация начинается с 1, это будет первый элемент в списке.
<выражение>
- Задаётся в виде
an±b
, гдеa
иb
— целые числа, аn
— счётчик, который автоматически принимает значение0
,1
,2
… - Если
a
равно нулю, то оно не пишется и запись сокращается до
. Еслиb
равно нулю, то оно также не указывается и выражение записывается в формеan
.a
иb
могут быть отрицательными числами, в этом случае знак плюс меняется на минус, например:5n-1
.
За счёт использования отрицательных значений a
и b
некоторые результаты могут также получиться отрицательными или равными нулю. Однако на элементы оказывают влияние только положительные значения из-за того, что нумерация элементов начинается с 1
.
Результат для различных значений псевдокласса
Значение | Номера элементов | Описание |
---|---|---|
1 | 1 | Первый элемент, является синонимом псевдокласса :first-child |
5 | 5 | Пятый элемент |
2n | 2, 4, 6, 8, 10,… | Все чётные элементы, аналог значения even |
2n+1 | 1, 3, 5, 7, 9,… | Все нечётные элементы, аналог значения odd |
3n | 3, 6, 9, 12, 15,… | Каждый третий элемент |
3n+2 | 2, 5, 8, 11, 14,… | Каждый третий элемент, начиная со второго |
n+4 | 4, 5, 6, 7, 8,… | |
-n+3 | 3, 2, 1 | Первые три элемента |
5n-2 | 3, 8, 13, 18, 23,… | — |
even | 2, 4, 6, 8, 10,… | Все чётные элементы |
odd | 1, 3, 5, 7, 9,… | Все нечётные элементы |
Допустимо комбинировать два псевдокласса :nth-child
для выбора диапазона элементов. Здесь будут выбраны все элементы со второго по пятый.
:nth-child(n + 2):nth-child(-n + 5) {
/* … */
}
Спецификации
Примеры
Пример 1
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>nth-child</title> <style> table { width: 100%; /* Ширина таблицы */ border-spacing: 0; /* Расстояние между ячейками */ } tr:nth-child(2n) { background: #f0f0f0; /* Цвет фона */ } tr:nth-child(1) { background: #666; /* Цвет фона */ color: #fff; /* Цвет текста */ } </style> </head> <body> <table border="1"> <tr> <td> </td> <td>2134</td> <td>2135</td> <td>2136</td> <td>2137</td> <td>2138</td> </tr> <tr> <td>Нефть</td> <td>16</td> <td>34</td> <td>62</td> <td>74</td> <td>57</td> </tr> <tr> <td>Золото</td> <td>4</td> <td>69</td> <td>72</td> <td>56</td> <td>47</td> </tr> <tr> <td>Дерево</td> <td>7</td> <td>73</td> <td>79</td> <td>34</td> <td>86</td> </tr> <tr> <td>Камни</td> <td>23</td> <td>34</td> <td>88</td> <td>53</td> <td>103</td> </tr> </table> </body> </html>
В данном примере псевдокласс :nth-child
используется для изменения стиля первой строки таблицы, а также для выделения цветом всех чётных строк (рис. 1).
Пример 2
HTMLCSS<h4> <code>span:nth-child(2n+1)</code>, БЕЗ элемента <code><em></code> в группе элементов-потомков. </h4> <p>Элементы 1, 3, 5 и 7 будут выбраны.</p> <div> <span>Span 1!</span> <span>Span 2</span> <span>Span 3!</span> <span>Span 4</span> <span>Span 5!</span> <span>Span 6</span> <span>Span 7!</span> </div> <br /> <h4> <code>span:nth-child(2n+1)</code>, С элементом <code><em></code> в группе элементов-потомков. </h4> <p> Элементы 1, 5 и 7 будут выбраны.<br /> 3 используется в подсчёте потому что это элемент-потомок, но он не выбран потому что он не <code><span></code>. </p> <div> <span>Span!</span> <span>Span</span> <em>Это `em`.</em> <span>Span</span> <span>Span!</span> <span>Span</span> <span>Span!</span> <span>Span</span> </div> <br /> <h4> <code>span:nth-of-type(2n+1)</code>, С элементом <code><em></code> в группе элементов-потомков. </h4> <p> Элементы 1, 4, 6 и 8 будут выбраны.<br /> 3 не используется в подсчёте и не выбран, потому что это <code><em></code>, но не <code><span></code>, а <code>nth-of-type</code> выбирает только потомков этого типа. Элемент <code><em></code> полностью пропускается и игнорируется. </p> <div> <span>Span!</span> <span>Span</span> <em>Это `em`.</em> <span>Span!</span> <span>Span</span> <span>Span!</span> <span>Span</span> <span>Span!</span> </div>
html {
font-family: sans-serif;
}
span,
div em {
padding: 5px;
border: 1px solid green;
display: inline-block;
margin-bottom: 3px;
}
.first span:nth-child(2n + 1),
.second span:nth-child(2n + 1),
.third span:nth-of-type(2n + 1) {
background-color: lime;
}
РезультатСм. также
Ссылки
Nth-child и nth-of-type • Про CSS
:nth-child
— один из моих самых любимых селекторов, потому что с помощью него можно делать клевые разноцветные штуки собирать элементы списка в группы произвольной длины и делать с ними разные интересные вещи: от полосатых таблиц до целых разноцветных дизайнов, и все это без необходимости задавать дополнительные классы или как-то менять разметку.
Вот простой пример полосатых таблиц:
Полоски помогают легче скользить глазами по длинной строке или столбцу, это увеличивает читабельность больших таблиц, а сделать это можно всего лишь парой строчек в CSS:
TR:nth-child(odd) { background: #EEE; } TD:nth-child(odd) { background: #EEE; }
Или вот что можно сделать с обычным списком вроде такого:
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
Никаких дополнительных классов, все сделано только с помощью :nth-child
:
Вот пример разноцветного дизайна для ЖЖ, где используется этот же эффект:
Если у вас есть ЖЖ, вы можете установить этот дизайн из каталога.
Как работает nth-child()?
В круглых скобках задается размер цикла: например (3n)
выберет каждый третий элемент.
Также можно задать сдвиг вперед или назад: (3n+1)
— найдет каждый третий и сделает один шаг вперед, а
— два шага назад от найденого.
Если размер цикла не задан — (n)
— выберутся все элементы списка.
Если размер цикла не задан, но задано конкретное число — (5)
— выберется элемент списка с этим индексом.
nth-child
в своем цикле считает все элементы, находящиеся на одном уровне вложенности относительно родительского элемента.
Селектор работает во всех современных браузерах с поддержкой CSS3.
Примеры
:nth-child(3n)
Выбирает каждый 3-й элемент списка.
:nth-child(3n+1)
Выбирает каждый 3-й элемент списка и делает сдвиг на один шаг вперед. Таким образом можно выбрать первые элементы в каждой группе.
:nth-child(even) = :nth-child(2n)
(even)
— ключевое слово, выбирает четные элементы списка, как если бы мы задали (2n)
.
:nth-child(odd) = :nth-child(2n+1)
(odd)
— ключевое слово, выбирает нечетные элементы, как если бы мы задали (2n+1)
.
:nth-child(3n-1) = :nth-child(3n+2)
Выбирает каждый 3-й элемент списка и делает сдвиг на один шаг назад.
:nth-child(5) = :nth-child(0n+5)
Выберет 5-й элемент списка.
:nth-child(n+6)
Выберет все элементы начиная с 6-го.
:nth-child(-n+6)
Выберет 6 элементов с начала списка.
Сочетания селекторов
:nth-child(n+3):nth-child(-n+8)
Выберет элементы в диапазоне от 3 до 8-ми.
:nth-child(n+4):nth-child(even)
Выберет элементы начиная с 4-го, а потом выделит только четные из них.
:nth-child(3n+1):nth-child(even)
Выберет 1-й, 4-й, 7-й и 10-й элементы, а затем только четные из них.
:nth-child(n+3):nth-child(-n+8):nth-child(even)
Выберет элементы с 3-го по 8-й, а затем только четные из них.
nth-of-type()
Все примеры выше сделаны на основе однородного списка, но что если нам требуется выбрать, например, несколько абзацев в статье, которая содержит не только абзацы, но и заголовки?
Предположим, мы хотим покрасить нечетные абзацы, поэтому напишем что-то вроде:
но результат будет каким-то странным (слева), и если попробовать написать то же самое, но без тега (справа) — сразу становится ясно почему:
:nth-child
считает все элементы, не обращая внимания на тег, хотя показывает только те, что соответствуют заданному тегу или классу.
Чтобы выбрать только абзацы, нам потребуется другой селектор — :nth-of-type
:
:nth-of-type
работает также, как :nth-child
, но считает только элементы заданного типа.
:nth-child
удобно использовать в сочетании с Sass:
С помощью :nth-child
одинаковым элементам списка заданы разноцветные рамки и разные фоновые картинки.
Используя широкие возможности этих технологий можно делать не только забавные галереи с котятами, но и прочие нарядные штуки разной степени бесполезности (нажмите Rerun, если анимация застыла):
Здесь с помощью :nth-child
элементам списка помимо разноцветных градиентов задаются также задержки воспроизведения анимации, из-за чего фигуры движутся не все вместе, а волнами.
:nth-child
— полезный селектор, который поможет добавить разнообразия однотипным элементам сайта и тем самым без особых усилий сделает страницу интереснее для визуального восприятия.
Использование псевдокласса :nth-child — Демонстрации — HTML Academy
Что такое
:nth-child
?:nth-child
— это псевдокласс, который позволяет выбирать элементы по их порядковому номеру. Например, можно выбрать пятый абзац и применить к нему нужные стили, или выбрать все четные строки в таблице и сделать её полосатой.
В этой демонстрации мы детально разберем механизм работы этого селектора. Начнем с исходной html-разметки. Работать будем с обычным списком.
Подопытный объект готов
Зададим стили для списка и его элементов. Теперь у нас есть наглядная сетка, над которой и будем экспериментировать.
:nth-child(4)
Самый простой вариант использования данного селектора: задать конкретное число. Наш селектор:
li:nth-child(4)
Он обозначает: «Выбрать четвёртый по счету элемент списка». Как видите, подсветился нужный элемент.
Несколько
:nth-child
(номер)Чтобы выбрать небольшое количество элементов, можно несколько раз использовать :nth-child
с нужными номерами.
Однако, если количество таких элементов велико, то такой подход не сработает. Представьте, сколько CSS-кода нужно, чтобы выделить все чётные элементы в примере.
Не забывайте экспериментировать. Поменяйте номера в CSS-коде, чтобы подсветить другие элементы.
:nth-child(2n)
В общем виде значение этого псевдокласса задаётся с помощью выражения: an+b
, где a
и b
— целые числа, а n
— счетчик, принимающий целые значения от 0 и больше: 0,1,2,3…
Если после вычисления выражения браузер находит элемент с полученным номером, то он применяет к нему стили. Рассмотрим пример вычисления номеров для :nth-child(2n)
.
1. n=0; 2*0 = 0; нет элементов
2. n=1; 2*1 = 2; 2-й элемент
3. n=2; 2*2 = 4; 4-й элемент
:nth-child(even)
Выражение :nth-child(2n)
соответствует всем чётным элементам. Для чётных элементов существует также специальное ключевое слово even
.
:nth-child(2n+1)
Посчитаем номера для :nth-child(2n+1)
.
1. n=0; 2*0 + 1 = 1; 1-й элемент
2. n=1; 2*1 + 1 = 3; 3-й элемент
3. n=2; 2*2 + 1 = 5; 5-й элемент
...
Т.е. все нечётные элементы.
:nth-child(odd)
Для нечётных элементов тоже существует ключевое слово: odd
.
:nth-child(odd)
вместе с :nth-child(even)
Используя разные стили для чётных и нечётных элементов, можно создавать интересные визуальные эффекты. Именно таким образом, с помощью чистого CSS, делают полосатые таблицы.
:nth-child(3n-1)
Рассчитаем выражение посложнее :nth-child(3n-1)
.
1. n=0; 3*0 - 1 = -1; нет элементов
2. n=1; 3*1 - 1 = 2; 2-й элемент
3. n=2; 3*2 - 1 = 5; 5-й элемент
...
Поэкспериментируйте с выражением в стилях.
:nth-child(n+8)
Если использовать большое положительное число b
в формуле an+b
, то можно выделять все элементы, за исключением начальных. И чем больше b
, тем больше начальных пропускается. Расчет для :nth-child(n+8)
:
1. n=0; 0+8 = 8; 8-й элемент
2. n=1; 1+8 = 9; 9-й элемент
3. n=2; 2+8 = 10; 10-й элемент
...
:nth-child(-n+14)
Можно использовать отрицательный n
. Расчёт для :nth-child(-n+14)
:
1. n=0; 0+14 = 14; 14-й элемент
2. n=1; -1+14 = 13; 13-й элемент
...
15. n=14; -14+14 = 0; нет совпадений
Т.е. :nth-child(n+8)
означает не выделять 7 элементов вначале, а все остальное выделить. :nth-child(-n+14)
обозначает выделить 14 элементов в начале, а все остальное не выделять.
Комбинирование выражений
На предыдущих шагах мы с помощью разных выражений выделяли разные множества элементов. Существует возможность задавать множество с помощью комбинирования выражений.
Например: :nth-child(n+8):nth-child(-n+14)
. Итоговое множество получается как пересечение двух исходных:
:nth-child(n+8) выделит: 8-21
:nth-child(-n+14) выделит: 1-14
на пересечении 1-14 и 8-21: 8-14
:nth-child(n+4):nth-child(-n+18)
Комбинируя выражения, мы можем задавать произвольные диапазоны элементов. Можно немного расширить выделение из предыдущего шага.
Сдвинем левую границу: :nth-child(n+8)
→ :nth-child(n+4)
Сдвинем правую границу: :nth-child(-n+14)
→ :nth-child(-n+18)
Попробуйте поизменять размер выделения
:nth-child(n+4):nth-child(-n+18):nth-child(odd)
Можно комбинировать более двух выражений. Выражение в заголовке обозначает: «взять элементы с 4 по 18 включительно и среди них выделить только нечётные».
Два сложных множества
Мы создали множество «элементы с 4 по 18 включительно, нечётные».
Создадим второе множество «элементы с 4 по 18 включительно, чётные».
Вот такой интересный псевдокласс :nth-child
, с помощью которого можно выделять практически любые множества элементов, используя их порядковый номер.
Псевдокласс
:nth-of-type
:nth-of-type
работает почти так же, как и :nth-child
. Разница заключается в том, что он учитывает тип элемента.
Для того, чтобы поэкспериментировать с этим псевдоклассом, изменим код примера. Вначале в HTML коде создадим список из двух элементов: span
и strong
. И обернём этот список в контейнер.
Второй подопытный готов
С помощью CSS оформим список. span
будут лежачими прямоугольниками, а strong
будут стоячими прямоугольниками.
Приступаем к экспериментам.
:nth-of-type(3)
Попробуем простейшие выражения с числом.
Выделить третий span
:
span:nth-of-type(3)
Выделить пятый strong
:
strong:nth-of-type(5)
:nth-of-type(odd)
Выражения с чётными/нечётными элементами.
Выделить нечётные span
:
span:nth-of-type(odd)
Выделить чётные strong
:
strong:nth-of-type(even)
Комбинированные
:nth-of-type
Выделить нечётные span
из первых четырёх:
span:nth-of-type(odd):nth-of-type(-n+4)
Выделить чётные strong
из идущих после четвёртого:
strong:nth-of-type(even):nth-of-type(n+5)
Отличие
:nth-of-type
от :nth-child
Значения для двух псевдоклассов задаются абсолютно одинаково. Отличие заключается в том, что нумерация элементов при использовании :nth-of-type
идёт только между потомками одного родителя заданного типа. Нумерация элементов при использовании :nth-child
идёт между всеми потомками одного родителя.
Продемонстрируем это отличие еще раз. span:nth-of-type(odd)
подсвечивает только нечётные лежачие прямоугольники.
Отличие
:nth-of-type
от :nth-child
Если для этого же кода использовать span:nth-child(odd)
, то подсвечиваются все лежачие прямоугольники.
Это связано с тем, что после каждого элемента span
, расположен strong
, который влияет на счетчик псевдокласса :nth-child
.
Практический пример использования
:nth-child
Иногда дизайнеры рисуют каталог товаров, в котором товары расположены в несколько колонок, причем края колонок выровнены строго по краям родительского блока.
Сверстать такой блок не проблема. Можно задать разные классы элементам левой и правой колонок и пусть программист мучается при генерации правильного html кода страницы.
Но намного лучше сверстать такой список товаров, не используя разные классы. На этом шаге задан исходный HTML.
Практический пример: оформляем товары
Зададим базовый CSS код нашего каталога. Пунктирные линии справа и слева — это границы блока, по которым должны выравниваться края колонок.
Нужно создать двухколончатую сетку, в которой ширина каждой колонки составляет 45% от ширины родительского блока. Правая колонка прижата к правому краю, а левая к левому. Приступим.
Практический пример: сетка
Чтобы получить нужную сетку, достаточно задать следующие проценты:
45% - ширина левой колонки
10% - отступ справа левой колонки
45% - ширина правой колонки
Итого: 45% + 10% + 45% = 100%
Мы использовали box-sizing:border-box;
, чтобы на ширину колонок не влияли границы. Товары расположились в одну колонку, зато она правильной ширины.
Практический пример: две колонки
Чтобы появилась вторая колонка, нужно избавиться от отступа справа у каждого второго элемента списка.
Мы не используем разные классы для разных элементов, поэтому на помощь приходит псевдокласс li:nth-child(even)
. С помощью него удаляются лишние отступы и идеальная сетка готова.
Практический пример: три колонки
При таком подходе можно изменять количество колонок только с помощью CSS. То есть, HTML код страницы, а значит и логику генерации кода на сервере менять не надо.
Сначала изменим проценты:
30% - ширина колонок
5% - отступы справа у 1 и 2 колонки
Итого: 30% + 5% + 30% + 5% + 30% = 100%
Практический пример: три колонки готовы
Затем нужно удалить отступ справа у каждого третьего элемента. Для этого используем li:nth-child(3n)
. Готово!
Отличное решение, особенно для адаптивной верстки.
css :nth-child(): после — CodeRoad
Можно ли смешать :nth-child()
и after
?
У меня есть <ol>
элементов, и я хочу добавить немного текста :after
. Это прекрасно работает, но тогда я хотел бы иметь другой текст на 1-м, 2-м и 3-м пунктах, а затем на 4-м, 5-м и 6-м тоже.
С приведенным ниже кодом я заканчиваю тем, что каждый li
имеет ‘large’ в розовом цвете после него.
Это не имеет смысла для меня, однако я новичок в этом nth-child
malarky.
data.html
<ol>
<li>
<p>Bacon</p>
</li>
<li>
<p>Bacon</p>
</li>
<li>
<p>Bacon</p>
</li>
<!.. repeats -->
<li>
<p>Bacon</p>
</li>
</ol>
pretty.css
#id li p:after {
float: right;
content: 'nom';
}
#id li p:nth-child(1):after,
#id li p:nth-child(2):after,
#id li p:nth-child(3):after {
content: 'OM';
color: pink;
}
#id li p:nth-child(4):after,
#id li p:nth-child(5):after,
#id li p:nth-child(6):after {
content: 'Nom';
color: blue;
}
Мне бы очень не хотелось делать это с js, так как это просто «хорошая функция».
Я беспокоюсь только о новых браузерах, поэтому нет необходимости в обходных путях для oldIE и т. д.
html css css-selectorsПоделиться Источник rockingskier 19 декабря 2012 в 17:07
3 ответа
- css nth-child(2n+1) перекрасить css после фильтрации элементов списка
У меня есть список из 20 + пунктов. Цвет фона изменяется с помощью селектора :nth-child(2n+1). четный предмет черный, нечетный предмет белый). Когда я нажимаю кнопку, чтобы отфильтровать определенные элементы с помощью плагина jQuery Isotope, он добавляет класс. isotope-hidden к элементам, которые…
- nth-Child CSS селекторы
У меня есть девять наборов цветовых схем, которые я хочу применить к последовательности divs. Использование :nth-child(1), :nth-child(2)… работает для первых девяти, но я бы хотел, чтобы последовательность повторилась после этого, и я не могу обернуть голову вокруг обозначения (3n+2)… Я думаю,…
36
Вы можете, но вы делаете это неправильно..
Проблема в том, что все ваши элементы p
находятся внутри li
. Таким образом, все они являются первым потомком своего контейнера li
.
Вам нужно будет поместить nth-child
на элементы li
.
#id li:nth-child(1) p:after,
#id li:nth-child(2) p:after,
#id li:nth-child(3) p:after {
content: 'OM';
color: pink;
}
#id li:nth-child(4) p:after,
#id li:nth-child(5) p:after,
#id li:nth-child(6) p:after {
content: 'Nom';
color: blue;
}
Цитирование документации W3C
Обозначение псевдокласса
:nth-child(an+b)
представляет элемент, который имеет+b-1 братьев и сестер перед ним в дереве документов для любого положительного целого числа или нулевого значения n и имеет родительский элемент.
Обновление 1
Вы также можете упростить это, используя
#id li:nth-child(-n+3) p:after {
content: 'OM';
color: pink;
}
#id li:nth-last-child(-n+3) p:after { /*this means last 3*/
content: 'Nom';
color: blue;
}
Демо на http://jsfiddle.net/gaby/4h5AS/2/
Обновление 2
Если вы хотите, чтобы первые шесть были разными ( а не первые 3 и последние 3), вы можете
#id li:nth-child(-n+6) p:after { /*this means first 6*/
content: 'Nom';
color: blue;
}
#id li:nth-child(-n+3) p:after {/*this means first 3 and since it comes second it has precedence over the previous for the common elements*/
content: 'OM';
color: pink;
}
Демо на http://jsfiddle.net/gaby/4h5AS/3/
Поделиться Gabriele Petrioli 19 декабря 2012 в 17:10
7
Должно быть сделано так:
#id li:nth-child(1) p:after,
#id li:nth-child(2) p:after,
#id li:nth-child(3) p:after {
content: 'OM';
color: pink;
}
#id li:nth-child(4) p:after,
#id li:nth-child(5) p:after,
#id li:nth-child(6) p:after {
content: 'Nom';
color: blue;
}
JS Fiddle
. … как <p>
всегда является первым дочерним элементом <li>
в показанной структуре HTML.
Обратите внимание, однако, что правило content: 'nom';
в самом первом определении стиля было перезаписано (но правило ‘float’ сохранилось): это то же самое каскадное правило для псевдоэлемента ‘:after’, что и для других. )
Поделиться raina77ow 19 декабря 2012 в 17:10
0
Вы можете комбинировать psudeos вот так…
#id li:nth-child(1)::before {
border-left-color: red;
}
#id li:nth-child(2)::before {
border-left-color: white;
}
#id li:nth-child(3)::before {
border-left-color: blue;
}
Поделиться Gerd 26 мая 2020 в 21:16
- Как использовать: nth-last-child в IE8?
У меня есть этот CSS ниже, но он не работает на IE8. Я знаю, что CSS3 не работает на IE8. Я хотел бы попробовать что-то вроде div:first-child + div + div , но это не работает. Я думаю, что это не работает из-за nth-last-child() . Я не могу перевести nth-last-child() с помощью смежного родственного…
- CSS селектор nth-child
Я столкнулся с проблемами при написании немного сложного селектора CSS. Я хочу выбрать div с class, содержащим ‘btn-group’ , но не ‘open’ Так что у меня есть что-то вроде; div[class*=’btn-group’]:not([class=’open’]) Теперь проблема заключается в том, что существует около 5-6 элементов, которые…
Похожие вопросы:
От JQuery до css напишите nth-child()
поэтому мне нужно сделать слайдер для школы. Я знаю, что могу использовать что-то вроде .sliders img:nth-child(Index) {} Я знаю, что это должно быть похоже $(.sliders img).css……… Мой вопрос…
css селектор :nth-child (четный|нечетный) vs: nth-child(int)
У меня есть следующая проблема с псевдо-селектором CSS :nth-child , и я почти уверен, что что-то упустил. index.html <html> <head>…</head> <body> <div…
css nth-child или nth-of-type issue
Проблема в том, что news4 div имеет ширину 30%. Это должно быть 50%. похоже, что nth-of-type также считается .advertisement div и news4 div становится пятым дочерним элементом. То же самое с…
css nth-child(2n+1) перекрасить css после фильтрации элементов списка
У меня есть список из 20 + пунктов. Цвет фона изменяется с помощью селектора :nth-child(2n+1). четный предмет черный, нечетный предмет белый). Когда я нажимаю кнопку, чтобы отфильтровать…
nth-Child CSS селекторы
У меня есть девять наборов цветовых схем, которые я хочу применить к последовательности divs. Использование :nth-child(1), :nth-child(2)… работает для первых девяти, но я бы хотел, чтобы…
Как использовать: nth-last-child в IE8?
У меня есть этот CSS ниже, но он не работает на IE8. Я знаю, что CSS3 не работает на IE8. Я хотел бы попробовать что-то вроде div:first-child + div + div , но это не работает. Я думаю, что это не…
CSS селектор nth-child
Я столкнулся с проблемами при написании немного сложного селектора CSS. Я хочу выбрать div с class, содержащим ‘btn-group’ , но не ‘open’ Так что у меня есть что-то вроде;…
использование nth-child (n) с scss и &:nth-child для предоставления детям различных классов
Я пытаюсь делать какие-то художественные вещи, я просто раскрашиваю дивы и делаю из них линии. Сначала я делал это так <a href=’#’></a> и стайлинг через [href*=’#’] { &:after {…
CSS nth-child (n) не отвечает после добавления jQuery
мой псевдо-элемент nth-child() не работает с этими элементами. Он отлично работает на JSFiddle с скомпилированным CSS, но не с SCSS. На моей машине он не работает ни с CSS, ни с SCSS. Обратите также…
nth-child (2n) CSS после скрытого tr
У меня есть таблица, похожая на эту (ниже) после использования css nth-child(2n). tr:nth-child(2n) {background-color: #f0f3f5;} После выполнения некоторых скрытых на vID, ID, MO_Sub tr <tr…
Как работает nth-child — Веб-стандарты
Существует такой селектор, точнее псевдокласс, называемый :nth-child
. Вот пример его использования:
ul li:nth-child(3n+3) {
color: #cccccc;
}
Что делает CSS-код, приведенный выше? Он выбирает каждый третий элемент внутри маркированного списка: это 3-й, 6-й, 9-й, 12-й и т.д. Давайте посмотрим, как именно работает это выражение и что еще можно сделать с помощью :nth-child
.
Всё зависит от того, что находится между скобками. Селектор :nth-child
принимает два ключевых слова: even
и odd
. Тут всё просто: even
выбирает чётные элементы, такие как 2-й, 4-й, 6-й и т.д., а odd
выбирает нечётные элементы, такие как 1-й, 3-й, 5-й и т.д.
Как видно из первого примера, :nth-child
также принимает в качестве параметра выражения. В том числе и простейшие уравнения, иначе говоря, просто числа. Если поставить их в скобки, будет выбран только один элемент с соответствующим номером. Например, вот как выбрать только пятый элемент:
ul li:nth-child(5) {
color: #cccccc;
}
Однако давайте вернемся к 3n+3
из первого примера. Как он работает и почему выбирается каждый третий элемент? Весь фокус в понимании переменной n
и приведенного алгебраического уравнения. Подумайте об n
, как о начинающемся с нуля множестве целых чисел. Потом дополните уравнение. Так 3n
это 3×n
, а все уравнение вместе это (3×n)+3
. Теперь, подставляя вместо n
числа больше или равные нулю, мы получим:
- (3 × 0) + 3 = 3 = 3-й элемент
- (3 × 1) + 3 = 6 = 6-й элемент
- (3 × 2) + 3 = 9 = 9-й элемент и т.д.
А как насчёт :nth-child(2n+1)
?
- (2 × 0) + 1 = 1 = 1-й элемент
- (2 × 1) + 1 = 3 = 3-й элемент
- (2 × 2) + 1 = 5 = 5-й элемент и т.д.
Так, стоп! Это ведь то же самое, что и odd
. Тогда, возможно, не стоит использовать это выражение? Но разве в этом случае мы не подвергаем наш первый пример излишнему усложнению? Что, если вместо 3n+3
мы запишем 3n+0
или ещё проще 3n
?
- (3 × 0) = 0 = ничего нет
- (3 × 1) = 3 = 3-й элемент
- (3 × 2) = 6 = 6-й элемент
- (3 × 3) = 9 = 9-й элемент и т.д.
Итак, как вы можете видеть, результат получится такой же, а значит, нет необходимости в +3
. Мы можем использовать и отрицательные значения n
, с таким же успехом, как и вычитание в уравнениях. Например, 4n-1
:
- (4 × 0) – 1 = –1 = ничего нет
- (4 × 1) – 1 = 3 = 3-й элемент
- (4 × 2) – 1 = 7 = 7-й элемент и т.д.
Использование -n
может показаться странным — ведь если конечный результат отрицательный, то никакие элементы в выборку не попадут. Но если дополнить уравнение и снова сделать результат положительным, то выборка окажется довольно интересной: при помощи неё можно будет получить первые n
элементов, например так: -n+3
:
- –0 + 3 = 3 = 3-й элемент
- –1 + 3 = 2 = 2-й элемент
- –2 + 3 = 1 = 1-й элемент
- –3 + 3 = 0 = ничего нет и т.д.
На SitePoint есть хороший справочник с милой табличкой, которую я бесстыдно опубликую здесь:
n | 2n+1 | 4n+1 | 4n+4 | 4n | 5n-2 | -n+3 |
---|---|---|---|---|---|---|
0 | 1 | 1 | 4 | – | – | 3 |
1 | 3 | 5 | 8 | 4 | 3 | 2 |
2 | 5 | 9 | 1 | 8 | 8 | 1 |
3 | 7 | 1 | 1 | 1 | 1 | – |
4 | 9 | 17 | 20 | 16 | 18 | – |
5 | 11 | 21 | 24 | 20 | 23 | – |
Поддержка браузерамиСкопировать ссылку
Селектор :nth-child
— один из немногих CSS-селекторов, который почти полностью поддерживается в современных браузерах и абсолютно не поддерживается в IE, даже в IE8. Поэтому когда дело доходит до его использования, и конечный результат сделан по технологии прогрессивного улучшения — вы можете смело использовать его для некоторых оформительских элементов, вроде расцветки строк таблицы. Однако не стоит применять его в более серьезных случаях. Например, полагаться на него в раскладке сайта или удалять правое поле из каждого третьего блока в сетке три на три, чтобы они вошли в ряд.
Спасением здесь может послужить библиотека jQuery, которая реализует поддержку всех CSS-селекторов, включая :nth-child
, даже в Internet Explorer.
Всё равно неясно?Скопировать ссылку
Я не большой поклонник фразы я лучше воспринимаю визуальную информацию. И вы, конечно, тоже. Но примеры являются чрезвычайно полезными именно в таких ситуациях. Чтобы облегчить понимание, я сделал небольшую тестовую страничку. На ней вы сможете написать свои уравнения и ниже увидеть то, что попадет в выборку.
Также загляните на страничку полезных рецептов :nth-child
, там вы сможете найти код для наиболее распространенных случаев.
CSS3 | Псевдоклассы дочерних элементов
Псевдоклассы дочерних элементов
Последнее обновление: 21.04.2016
Особую группу псевдоклассов образуют псевдоклассы, которые позволяют выбрать определенные дочерние элементы:
:first-child: представляет элемент, который является первым дочерним элементом
:last-child: представляет элемент, который является последним дочерним элементом
:only-child: представляет элемент, который является единственным дочерним элементом в каком-нибудь контейнере
:only-of-type: выбирает элемент, который является единственным элементом определенного типа (тега) в каком-нибудь контейнере
:nth-child(n): представляет дочерний элемент, который имеет определенный номер n, например, второй дочерний элемент
:nth-last-child(n): представляет дочерний элемент, который имеет определенный номер n, начиная с конца
:nth-of-type(n): выбирает дочерний элемент определенного типа, который имеет определенный номер
:nth-last-of-type(n): выбирает дочерний элемент определенного типа, который имеет определенный номер, начиная с конца
Псевдокласс first-child
Используем псевдокласс first-child для выбора первых ссылок в блоках:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Селекторы в CSS3</title> <style> a:first-child{ color: red; } </style> </head> <body> <h4>Планшеты</h4> <div> <a>Microsoft Surface Pro 4</a><br/> <a>Apple iPad Pro</a><br/> <a>ASUS ZenPad Z380KL</a> </div> <h4>Смартфоны</h4> <div> <p>Топ-смартфоны 2016</p> <a>Samsung Galaxy S7</a><br/> <a>Apple iPhone SE</a><br/> <a>Huawei P9</a> </div> </body> </html>
Стиль по селектору a:first-child
применяется к ссылке, если она является первым дочерним элементом любого элемента.
В первом блоке элемент ссылки является первым дочерним элементом, поэтому к нему применяется определенный стиль.
А во втором блоке первым элементом является параграф, поэтому ни к одной ссылке не применяется стиль.
Псевдокласс last-child
Используем псевдокласс last-child
:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Селекторы в CSS3</title> <style> a:last-child{ color: blue; } </style> </head> <body> <h4>Смартфоны</h4> <div> <a>Samsung Galaxy S7</a><br/> <a>Apple iPhone SE</a><br/> <a>Huawei P9</a> </div> <h4>Планшеты</h4> <div> <a>Microsoft Surface Pro 4</a><br/> <a>Apple iPad Pro</a><br/> <a>ASUS ZenPad Z380KL</a> <p>Данные за 2016</p> </div> </body> </html>
Селектор a:last-child
определяет стиль для ссылок, которые являются последними дочерними элементами.
В первом блоке как раз последним дочерним элементом является ссылка. А вот во втором последним дочерним элементом является параграф, поэтому во втором блоке стиль не применяется ни к одной из ссылок.
Селектор only-child
Селектор :only-child выбирает элементы, которые являются единственными дочерними элементами в контейнерах:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Селекторы в CSS3</title> <style> p:only-child{ color:red; } </style> </head> <body> <h3>Заголовок</h3> <div> <p>Текст1</p> </div> <div> <p>Текст2</p> <p>Текст3</p> </div> <div> <p>Текст4</p> </div> </body> </html>
Параграфы с текстами «Текст1» и «Текст4» являются единственными дочерними элементами в своих внешних контейнерах, поэтому к ним применяется стиль — красный цвет шрифта.
Псевдокласс only-of-type
Псевдокласс only-of-type выбирает элемент, который является единственным элементом определенного типа в контейнере. Например, единственный элемент div, при этом элементов других типов в этом же контейнере может быть сколько угодно.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Селекторы в CSS3</title> <style> span:only-of-type{ color: green; /* зеленый цвет */ } p:only-of-type{ color: red; /* красный цвет */ } div:only-of-type{ color: blue; /* синий цвет */ } </style> </head> <body> <div> Header </div> <p>Единственный параграф и <span>элемент спан</span></p> <div> Footer </div> </body> </html>
Хотя для элементов div определен стиль, он не будет применяться, так как в контейнере body находится два элемента div, а не один. Зато в body есть только один элемент p, поэтому он получит стилизацию. И также в контейнере p есть только один элемент span, поэтому он также будет стилизован.
Псевдокласс nth-child
Псевдокласс nth-child позволяет стилизовать каждый второй, третий элемент, только четные или только нечетные элементы и т.д.
Например, стилизуем четные и нечетные строки таблицы:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Селекторы в CSS3</title> <style> tr:nth-child(odd) { background-color: #bbb; } tr:nth-child(even) { background-color: #fff; } </style> </head> <body> <h4>Смартфоны</h4> <table> <tr><td>Samsung</td><td>Galaxy S7 Edge</td><td>60000</td></tr> <tr><td>Apple</td><td>iPhone SE</td><td>39000</td></tr> <tr><td>Microsoft</td><td>Lumia 650</td><td>13500</td></tr> <tr><td>Alcatel</td><td>Idol S4</td><td>30000</td></tr> <tr><td>Huawei</td><td>P9</td><td>60000</td></tr> <tr><td>HTC</td><td>HTC 10</td><td>50000</td></tr> <tr><td>Meizu</td><td>Pro 6</td><td>40000</td></tr> <tr><td>Xiaomi</td><td>Mi5</td><td>35000</td></tr> </table> </body> </html>
Чтобы определить стиль для нечетных элементов, в селектор передается значение «odd»:
tr:nth-child(odd){}
Для стилизации четных элементов в селектор передается значение «even»:
tr:nth-child(even){}
Также в этот селектор мы можем передать номер стилизуемого элемента:
tr:nth-child(3) { background-color: #bbb; }
В данном случае стилизуется третья строка.
Еще одну возможность представляет использование заменителя для номера, который выражается буквой n:
tr:nth-child(2n+1) { background-color: #bbb; }
Здесь стиль применяется к каждой второй нечетной строке.
Число перед n (в данном случае 2) представляет тот дочерний элемент, который будет выделен следующим. Число, которое идет после знака плюс, показывают, с какого элемента нужно начинать выделение, то есть, +1 означает, что нужно начинать с первого дочернего элемента.
Таким образом, в данном случае выделение начинается с 1-го элемента, а следующим выделяется 2 * 1 + 1 = 3-й элемент, далее 2 * 2 + 1 = 5-й элемент и так далее.
К примеру, если мы хотим выделить каждый третий элемент, начиная со второго, то мы могли бы написать:
tr:nth-child(3n+2) { background-color: #bbb; }
Псевдокласс :nth-last-child по сути предоставляет ту же самую функциональность, только отсчет элементов идет не с начала, а с конца:
tr:nth-last-child(2) { background-color: #bbb; /* 2 строка с конца, то есть предпоследняя */ } tr:nth-last-child(2n+1) { background-color: #eee; /* нечетные строки, начиная с конца */ }
Псевдокласс nth-of-type
Псевдокласс :nth-of-type позволяет выбрать дочерний элемент определенного типа по определенному номеру:
tr:nth-of-type(2) { background-color: #bbb; }
Аналогично работает псевдокласс nth-last-of-type, только теперь отсчет элементов идет с конца:
tr:nth-last-of-type(2n) { background-color: #bbb; }
Что такое псевдоклассы (pseudo classes) и псевдоэлементы (pseudo elements)
2 months ago | 4.6K
Всем приветствую, с вами Сергей Никонов и в этой статье я расскажу про псевдоклассы (pseudo classes), псевдоэлементы (pseudo elements) и как с помощью них задавать CSS-стили для вашего сайта. На примерах мы рассмотрим как с работают самые часто используемые псевдоклассы и псевдоэлементы при верстке сайтов.
Это один из уроков курса по верстке веб-сайтов HTML/CSS Advanced и если вы хотите научиться верстать веб-сайты на профессиональном уровне, я рекомендую проходить этот курс на сайте FructCode с интерактивными упражнениями для закрепления ваших знаний полученных из курса верстки сайтов.
Только на сайте FructCode вы можете найти актуальных версии моих курсов!
Содержание
Что такое псевдоклассы (pseudo classes)
Псевдокласс (pseudo class) — это специальное ключевое слово, которое добавляется к css-селектору (css selector), с помощью которого можно задавать стили для отображения HTML-элементов при различных факторах. К примеру, можно задать CSS-стили для HTML-элемента на который пользователь навел курсор мыши.
Если вы еще не знакомы с понятием CSS-селектор (css selector) и не знаете, что такое CSS-селекторы (css selectors), прочитайте об этом статью или посмотрите видеоурок из курса HTML/CSS Advanced, а для закрепления ваших знаний, пройдите интерактивные упражнения.
Псевдоклассы задаются через двоеточие “:”, далее идет название псевдокласса, например, так задается псевдокласс :hover для HTML-тега <a>: a:hover {…}.
Смотрите видео «Что такое псевдоклассы(pseudo classes) и псевдоэлементы(pseudo elements)»
Подпишитесь на YouTube канал FructCode, чтобы не пропустить полезные видео!
Псевдокласс :hover
Псевдокласс :hover позволяет задавать CSS-стили при наведении курсора мыши на HTML-элемент.
Посмотрите на этот пример. Наведите курсор мыши на ссылку Link и вы увидите, что цвет ссылки, при наведении на него курсора мыши, изменился на цвет “brown”:
Псевдокласс :active
С помощью псевдокласса :active мы можем задавать CSS-стили в момент клика на HTML-элемент мышью.
Посмотрите пример ниже. Наведите курсор мыши на надпись Link, затем нажмите левой кнопкой мыши на надпись Link и не отпускайте кнопку мыши. Вы увидите, что ссылка в момент клика мышью стала зеленого цвета:
Псевдоклассы :hover и :active работают не только с HTML-тегом <a>. Вы можете заменить в CSS-стилях “a” на любой другой HTML-тег или название классы и стили применятся к этому HTML-элементу.
Псевдокласс :focus
Псевдокласс :focus позволяет задавать стили для HTML-тегов таких как <input>, <textarea>, <checkbox> и других при установке курсора мыши в этот элемент.
Посмотрите пример ниже с HTML-формой. Если вы установите курсор мыши в поле <input>, фоновый цвет поля изменится:
Псевдоклассы :first-child и :last-child
С помощью псевдокласса :first-child вы можете задавать стили для первого HTML-элемента, который является первым у своего родителя (parent).
Чтобы было проще понять как работает :first-child, посмотрите пример ниже. В маркированном списке выделяется цветом первый элемент <li>, а его родителем (parent) является тег <ul>:
А с помощью псевдокласса :last-child вы можете задавать CSS-стили для последнего HTML-элемента.
Посмотрите пример ниже. Благодаря псевдоклассу :last-child выделяется цветом последний HTML-элемент в маркированном списке:
Как я говорил ранее, для того, чтобы применялись стили к HTML-элементу, заданных с помощью псевдоклассов :first-child и :last-child, у элемента должен быть родитель (parent). Если родитель отсутствует, тогда стили не сработают.
Посмотрите пример ниже. У тега <span> есть родительский тег <div> и стили с :first-child работают, а для <span> без родительского тега :first-child и :last-child не будут работать:
Обратите внимание, что в текущей спецификации Selectors Level 3, при использовании псевдоклассов :first-child и :last-child элемент должен иметь родителя (parent), чтобы сработали css-стили. В новой разрабатываемой версии спецификации Selectors Level 4 для срабатывания стилей заданных с помощью :first-child, :last-child, элемент может не иметь родителя.
Псевдоклассы :first-of-type и :last-of-type
С помощью псевдоклассов :first-of-type и :last-of-type можно задавать стили для первого и последнего потомка (child) соответсвенно своего типа среди детей (child) его родителя (parent).
Определение звучит сложно и не очень понятно. Поэтому лучше сразу перейти к примерам, чтобы вы быстро поняли как работают псевдоклассы :first-of-type и :last-of-type.
В этом примере, с помощью псевдокласса :first-of-type можно выделить цветом все первые элементы в маркированном списке с текстом “First”:
Точно такой же результат вы можете получить и с помощью псевдокласса :first-child, но не сможете выделить все последние элементы маркированного списка с надписью Third во всех вложенностях с помощью :last-child, зато такой результат вы сможете получить с помощью псевдокласса :last-of-type:
Псевдокласс :nth-child
С помощью псевдокласса :nth-child вы можете задавать стили для одного или более HTML-элементов, которые будут основываться на их позиции среди HTML-элементов соседей.
Звучит сложно и непонятно, согласен. Но не будем отчаиваться и очень быстро все поймем на примерах ниже.
Например, в нашем любимом маркированном списке мы хотим выделить цветом какой-то определенный элемент под номером три. Для этого в CSS-стилях нам достаточно добавить псевдокласс :nth-child к вот таким образом: li:nth-child(3) и в результате мы сделаем то, что хотели:
Но этим возможности псевдокласса :nth-child не ограничиваются и мы можем выделить все нечетные HTML-элементы из нашего маркированного списка, написав несколько символов кода: li:nth-child(odd). Ключевое слово “odd” внутри скобок псевдокласса :nth-child как раз задает этот правило:
А с помощью ключевого слова even внутри скобок псевдокласса :nth-child мы можем наоборот выделить цветом все четные HTML-элементы <li> из нашего маркированного списка:
И на этом возможности псевдокласса :nth-child не заканчиваются и мы можем писать даже сложные правила выборки HTML-элементов к которым применить CSS-стили с помощью формул. Об этом вы можете прочитать в документации к псевдоклассу :nth-child.
Псевдокласс :not
С помощью псевдокласса :not вы можете задать CSS-стили для которые не будут соответствовать заданному селектору.
Простыми словами, вы можете в псевдокласс :not, в его скобки, указать любой класс или элемент и CSS-стили будут заданы всем соседям данного элемента, кроме него самого.
Если все еще непонятно, что такое псевдокласс :not, вот вам наглядный пример, с моим любимым маркированным списком. В четвертый HTML-элемент мы задали класс .not-color и задали стили для , указав в скобках название класса — :not(.not-color). И в результате у нас окрашиваются все другие элементы , кроме с классом .not-color:
И если вы переместите класс .not-color соседний <li>, выше или ниже, будут закрашиваться цветом все <li>, кроме <li> с классом .not-color.
Что такое псевдоэлементы (pseudo elements)
Псевдоэлемент (pseudo element) — это это специальное ключевое слово, которое добавляется к css-селектору и позволяет задавать стили для части выбранного HTML-элемента.
Псевдоэлементы ::before и ::after
Псевдоэлементы ::before и ::after используются очень часто при верстке сайтов на профессиональном уровне.
Суть этих псевдоэлементов очень простая: С помощью псевдоэлемента ::before вы можете присоединить к существующему HTML-тегу какой-то контент ДО этого HTML-элемента, а с помощью псевдоэлемента ::after ПОСЛЕ HTML-элемента.
И сразу давайте перейдем к примеру ::before и ::after. У нас есть HTML-тег <p> и в него помещен текст “Have a good day!”. И с помощью псевдоклассов ::before и ::after мы добавляем “сердечки” слева и справа от надписи “Have a good day!”:
Обратите внимание, что в отличии от псевдоклассов, перед псевдоэлементами ставится два двоеточия. Прочитать о других псевдоэлементах вы можете в документации.
Вывод
В этой статье мы рассмотрели самые используемые псевдоклассы и псевдоэлементы, которые используют frontend-разработчики создавая верстку сайтов на профессиональном уровне.А если вы хотите научиться верстать с нуля до уровня профессионала, я рекомендую пройти мой интерактивный курс HTML/CSS Advanced. Курс HTML/CSS Advanced разделен на две части, на теоретическую часть, где вы познакомитесь с основами HTML и CSS и на практическую часть, где мы будем создавать верстку сайта KinoMonster (КиноМонстер).
Кстати, у меня есть YouTube канал FructCode, где я переодически публикую полезные видео о верстке веб-сайтов и программировании. Подпишитесь на YouTube канал FructCode, чтобы не пропустить полезные видео!
С вами был Сергей Никонов,
Успехов в обучении!
CSS: селектор nth-child ()
Пример
Укажите цвет фона для каждого элемента
, который является вторым дочерним элементом его родитель:
p: nth-ребенок (2)
{
фон: красный;
}
Дополнительные примеры «Попробуйте сами» ниже.
Определение и использование
Селектор : nth-child ( n )
соответствует каждому элементу, который является n -м дочерним элементом, независимо от
тип своего родителя.
n может быть числом, ключевым словом или формулой.
Совет: Посмотрите на: nth-of-type () селектор для выбора элемента, который является n -м потомком, определенного тип своего родителя.
Поддержка браузера
Числа в таблице указывают первую версию браузера, полностью поддерживающую селектор.
Селектор | |||||
---|---|---|---|---|---|
: nth-child () | 4.0 | 9,0 | 3,5 | 3,2 | 9,6 |
Синтаксис CSS
: nth-child ( номер ) {объявления css ;
} Демо
Другие примеры
Пример
Четные и нечетные ключевые слова, которые могут использоваться для сопоставления дочерних элементов, индекс которых нечетное или четное (индекс первого потомка равен 1).
Здесь мы указываем два разных цвета фона для четных и нечетных элементов p:
p: nth-child (нечетный) {фон: красный;
}
p: nth-child (четный)
{
фон синий;
}
Пример
По формуле ( и + b ).Описание: a представляет собой размер цикла, n — счетчик (начинается с 0), а b — значение смещения.
Здесь мы указываем цвет фона для всех элементов p, индекс которых равен кратно 3:
p: n-й ребенок (3n + 0)
{
фон красный;
}
: nth-child () — CSS: каскадные таблицы стилей
Псевдокласс CSS : nth-child ()
сопоставляет элементы на основе их положения в группе братьев и сестер.
li: nth-child (2) {
цвет: салатовый;
}
: nth-child (4n) {
цвет: салатовый;
}
: nth-child ()
принимает единственный аргумент, который описывает шаблон для сопоставления индексов элементов в списке братьев и сестер. Индексы элементов начинаются с 1.
Значения ключевых слов
-
нечетные
Представляет элементы, числовая позиция которых в серии братьев и сестер нечетная: 1, 3, 5 и т. Д.
-
четное
Представляет элементы, числовая позиция которых в серии братьев и сестер четная: 2, 4, 6 и т. Д.
Функциональное обозначение
-
Представляет элементы в списке, индексы которых совпадают с индексами, найденными в пользовательском шаблоне чисел, определяемом
An + B
, где:-
A
— целочисленный размер шага, -
B
— целочисленное смещение, -
n
— все неотрицательные целые числа, начиная с 0.
Его можно читать как An + B -й элемент списка.
-
Формальный синтаксис
Примеры селекторов
-
tr: nth-child (odd)
илиtr: nth-child (2n + 1)
Представляет нечетные строки таблицы HTML: 1, 3, 5 и т. Д.
-
tr: nth-child (даже)
илиtr: nth-child (2n)
Представляет четные строки таблицы HTML: 2, 4, 6 и т. Д.
-
: nth-ребенок (7)
Представляет седьмой элемент.
-
: nth-ребенок (5n)
Представляет элементы 5 [= 5 × 1], 10 [= 5 × 2], 15 [= 5 × 3], и т. Д. Первый элемент, возвращаемый в результате формулы: 0 [= 5×0], что приводит к несоответствию, поскольку элементы индексируются с 1, тогда как
n
начинается с 0. Сначала это может показаться странным, но имеет смысл, когда частьB
формула> 0
, как в следующем примере.-
: n-й ребенок (n + 7)
Представляет седьмой и все следующие элементы: 7 [= 0 + 7], 8 [= 1 + 7], 9 [= 2 + 7], и т. Д.
-
: nth-ребенок (3n + 4)
Представляет элементы 4 [= (3 × 0) +4], 7 [= (3 × 1) +4], 10 [= (3 × 2) +4], 13 [= (3 × 3) +4], и т. Д.
-
: nth-ребенок (-n + 3)
Представляет первые три элемента.[= -0 + 3, -1 + 3, -2 + 3]
-
p: nth-child (n)
Представляет каждый элемент
в группе братьев и сестер. Это выбирает те же элементы, что и простой селекторp
(хотя и с более высокой специфичностью).-
p: nth-child (1)
илиp: nth-child (0n + 1)
Представляет каждый
, который является первым элементом в группе братьев и сестер. Это то же самое, что и селектор: first-child
(и имеет ту же специфичность).-
p: nth-child (n + 8): nth-child (-n + 15)
Представляет с восьмого по пятнадцатый
элементов группы братьев и сестер.
Подробный пример
HTML
span: nth-child (2n + 1)
, БЕЗ
& lt; em & gt;
среди дочерних элементов.
Выбираются дочерние элементы 1, 3, 5 и 7.
Диапазон 1!
Диапазон 2
Промежуток 3!
Диапазон 4
Диапазон 5!
Диапазон 6
Диапазон 7!
span: nth-child (2n + 1)
, С
& lt; em & gt;
среди дочерних элементов.
Выбираются дочерние элементы 1, 5 и 7.
3 используется при подсчете, потому что это ребенок, но это не
выбрано, потому что это не & lt; span & gt;
.
Span!
Диапазон
Это `em`.
Диапазон
Span!
Диапазон
Span!
Диапазон
span: nth-of-type (2n + 1)
, С
& lt; em & gt;
среди дочерних элементов.
Выбираются дочерние элементы 1, 4, 6 и 8.
3 не используется при подсчете и не выбирается, потому что это & lt; em & gt;
,
не & lt; span & gt;
, а nth-of-type
выбирает только
дети этого типа. & lt; em & gt;
полностью пропускается
поверх и проигнорирован.
Span!
Диапазон
Это `em`.
Span!
Диапазон
Span!
Диапазон
Span!
CSS
html {
семейство шрифтов: без засечек;
}
охватывать,
div em {
отступ: 5 пикселей;
граница: сплошной зеленый 1px;
дисплей: встроенный блок;
нижнее поле: 3 пикселя;
}
.first span: nth-child (2n + 1),
. второй диапазон: nth-ребенок (2n + 1),
.third span: nth-of-type (2n + 1) {
цвет фона: салатовый;
}
Результат
Таблицы BCD загружаются только в браузере
: nth-child | CSS-уловки
Селектор : nth-child
позволяет выбрать один или несколько элементов на основе их исходного порядка в соответствии с формулой.
/ * Выбрать первый элемент списка * /
li: nth-child (1) {}
/ * Выбираем 5-й элемент списка * /
li: nth-child (5) {}
/ * Выбираем все остальные элементы списка, начиная с первого * /
li: nth-child (нечетное) {}
/ * Выбираем каждый третий элемент списка, начиная с первого * /
li: nth-child (3n - 2) {}
/ * Выбираем каждый третий элемент списка, начиная со второго * /
li: nth-child (3n - 1) {}
/ * Выбираем каждый третий дочерний элемент, если он имеет класс "el" * /
.el: nth-child (3n) {}
.Он определен в спецификации CSS Selectors Level 3 как «структурный псевдокласс», что означает, что он используется для стилизации контента на основе его отношений с родительскими и родственными элементами.
Предположим, мы создаем сетку CSS и хотим удалить поля на каждом четвертом модуле сетки. Вот этот HTML:
<раздел>
Один
Два
Три
Четыре
Пять
Вместо того, чтобы добавлять класс к каждому четвертому элементу (например, .last
), мы можем использовать : nth-child
:
.module: nth-child (4n) {
маржа справа: 0;
}
Селектор : nth-child
принимает аргумент: это может быть одно целое число, ключевые слова четное
, нечетное
или формула. Если указано целое число, выбирается только один элемент, но ключевые слова или формула будут перебирать все дочерние элементы родительского элемента и выбирать соответствующие элементы — аналогично навигации по элементам в массиве JavaScript. Ключевые слова «четный» и «нечетный» являются простыми (2, 4, 6 и т. Д.).или 1, 3, 5 соответственно). Формула построена с использованием синтаксиса an + b
, где:
- «a» — целое число
- «n» — буквальная буква «n»
- «+» — оператор и может быть либо «+», либо «-»
- «b» является целым числом и требуется, если в формулу включен оператор.
Важно отметить, что эта формула является уравнением и проходит через каждый родственный элемент, определяя, какой из них будет выбран. Часть формулы «n», если она присутствует, представляет собой набор возрастающих положительных целых чисел (точно так же, как итерация по массиву).В нашем примере выше мы выбрали каждый четвертый элемент с формулой 4n
, которая работала, потому что каждый раз, когда элемент проверялся, «n» увеличивалось на единицу (4 × 0, 4 × 1, 4 × 2, 4 × 3, так далее). Если порядок элементов соответствует результату уравнения, он будет выбран (4, 8, 12 и т. Д.). Для более подробного объяснения используемых математических вычислений, пожалуйста, прочтите эту статью.
Для дальнейшей иллюстрации, вот несколько примеров действительных селекторов : nth-child
:
К счастью, не всегда нужно делать математику самостоятельно — существует несколько тестеров и генераторов : nth-child
:
: nth-child (an + b of
Существует малоизвестный фильтр, который можно добавить к : nth-child
в соответствии со спецификацией CSS Selectors: возможность выбрать : nth-child
из подмножества элементов, используя формат из
.Предположим, у вас есть список смешанного содержимого: у некоторых есть класс .video
, у некоторых — класс .picture
, и вы хотите выбрать первые 3 изображения. Вы можете сделать это с помощью фильтра «из», например:
: nth-child (-n + 3 of .picture) {
/ *
Выбирает первые 3 элемента
применяется не ко ВСЕМ детям, а
только для тех, кто соответствует .picture
* /
}
Обратите внимание, что это отличается от добавления селектора непосредственно к селектору : nth-child
:
.picture: nth-child (-n + 3) {
/ *
Не то же самое!
Это относится к элементам, совпадающим с .picture.
который _также_ соответствует: nth-child (-n + 3)
* /
}
Это может немного запутать, поэтому пример может помочь проиллюстрировать разницу:
Браузер поддерживает фильтр «of» очень ограниченно: на момент написания этой статьи только Safari поддерживал синтаксис. Чтобы проверить статус вашего любимого браузера, вот открытые вопросы, связанные с : nth-child (an + b of s)
:
Достопримечательности
-
: nth-child
выполняет итерацию по элементам, начиная с вершины исходного порядка.Единственная разница между ним и: nth-last-child
заключается в том, что последний выполняет итерацию по элементам , начиная с нижней части исходного порядка . - Синтаксис для выбора числа первых
n
элементов немного противоречит интуиции. Вы начинаете с-n
плюс положительное количество элементов, которые хотите выбрать. Например,li: nth-child (-n + 3)
выберет первые 3 элементаli
. - Селектор
: nth-child
очень похож на: nth-of-type
, но с одним критическим отличием : он менее специфичен.В нашем примере выше они дадут тот же результат, потому что мы повторяем только элементы.module
, но если бы мы выполняли итерацию по более сложной группе братьев и сестер,: nth-child
попытался бы сопоставить всех братьев и сестер, а не только братья и сестры одного и того же типа элемента. Это раскрывает мощь: nth-child
— он может выбрать любой родственный элемент в расположении, а не только элементы , указанные перед двоеточием .
Сопутствующие объекты
Прочие ресурсы
Поддержка браузера
Хром | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
Любая | 3.2+ | Любые | 9,5+ | 9+ | Любые | Любые |
: nth-child
был представлен в модуле CSS Selectors Module 3, что означает, что старые версии браузеров не поддерживают его. Однако поддержка современных браузеров безупречна, а новые псевдоселекторы широко используются в производственных средах. Если вам требуется поддержка старых версий браузера, используйте polyfill для IE или используйте эти селекторы некритическими способами, например, с прогрессивным улучшением, что рекомендуется.
Полезное: Рецепты nth-child | CSS-уловки
У меня немного кружится голова, когда я сталкиваюсь с идеальным использованием : nth-child
или : nth-of-type
(прочтите о различиях). Чем лучше вы их поймете, тем больше у вас будет css-ботаников!
В этих простых «рецептах» (на самом деле: выражениях) я произвольно использую плоский список элементов списка и случайно выбранных чисел. Но должно быть достаточно очевидно, как изменить их, чтобы получить аналогичный выбор.
Выберите только пятый элемент
li: nth-child (5) {
цвет: зеленый;
}
Чтобы выбрать первый элемент, вы можете использовать: first-child, или, держу пари, вы можете догадаться, как изменить приведенный выше элемент, чтобы сделать это.
Выбрать все, кроме первых пяти
li: nth-child (n + 6) {
цвет: зеленый;
}
Если бы здесь было более 10 элементов, он бы выбрал все из них сверх 5.
Выберите только первые пять
li: nth-child (-n + 5) {
цвет: зеленый;
}
Выбрать каждый четвертый, начиная с первого
li: nth-child (4n-7) {/ * или 4n + 1 * /
цвет: зеленый;
}
Выбрать только нечетное или четное
li: nth-child (odd) {
цвет: зеленый;
}
li: nth-child (even) {
цвет: зеленый;
}
Выбрать последний элемент
li: last-child {
цвет: зеленый;
}
Выбирает 10-й, потому что здесь 10 элементов, но если бы их было 8, он выбрал бы 8-й, или если бы их было 1290, он бы выбрал бы 1290-й.
Выбрать от второго до последнего элемента
li: nth-last-child (2) {
цвет: зеленый;
}
Выбирает 9-й, потому что здесь 10 элементов, но если бы их было 30, он бы выбрал 29-й.
Хочешь поиграть?
Попробуй тестером.
Поддержка браузера
Интересно, что : first-child
поддерживался IE 7, но все остальное поддерживается только в IE 9. Кроме IE, поддержки браузеров особо не беспокоит, и если вас беспокоит IE, используйте Selectivizr.Если поддержка браузера интересна или важна для вас, обязательно ознакомьтесь с разделом «Когда я могу использовать…», который очень хорошо отслеживает эти вещи.
сеток в стиле Flexbox с энной дочерней магией. — NetEngine
Несколько недель назад мне показали действительно интересную статью, объясняющую, как выполнять «количественные запросы» (думайте о них как о медиа-запросах, но в зависимости от того, сколько у вас контента) с использованием последнего, первого и n-го дочерних псевдоклассов.
Некоторые довольно интересные варианты использования псевдоклассов для стилизации вашего макета включают в себя возможность изменять стиль вашей навигации в зависимости от того, сколько в ней элементов.Это было бы очень полезно для всех, кто создает веб-сайты, которые клиенты могут редактировать с помощью CMS. Допустим, у вас есть традиционная панель навигации, но вы не хотите, чтобы на ней было больше четырех элементов, потому что это приведет к разрыву строки. n-й дочерний элемент даст вам возможность сказать, что если элементов больше четырех, скрыть навигацию за кнопкой «показать навигацию».
Еще одно интересное использование дочерних селекторов nth и last — это то, о чем я пишу сегодня, создав классную адаптивную сетку в стиле flexbox.
Почему бы просто не использовать flexbox?
СелекторыCSS3 работают более согласованно в более широком наборе браузеров.
Вы можете увидеть сетку в действии выше или увидеть готовый продукт на codechool.com.au, размер последнего дочернего элемента всегда масштабируется, чтобы заполнить любое лишнее пространство. Мы также используем сетку nth-child
для предварительного просмотра шаблонов в экипировке, используя ту же технику, что описана в статье, на которую я ссылался ранее.
Первое, что нужно для ребенка.
Я уверен, что все, кто это читает, знают, что такое : last-child
и : first-child
, но для менее опытных в работе с селекторами CSS я рассмотрю это.
: first-child
— это псевдокласс, нацеленный на первого дочернего элемента своего родителя.
Например:
li: first-child {
цвет: # 06a8f9;
}
первый ребенок
элемент списка
элемент списка
элемент списка
последний ребенок
произведет
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
- последний ребенок
, потому что первый
является первым в родительском div.
В качестве альтернативы использование : last-child
имело бы аналогичный эффект.
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
- последний ребенок
### Теперь мы поговорим о n-м потомке.
Подобно первому и последнему дочерним селекторам : nth-child
— это способ выбора каждого элемента, который соответствует значению ‘n’ .
Например, : nth-child (2)
выберет второго дочернего элемента родительского элемента.
li: nth-child (2) {
цвет: # 06a8f9;
}
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
- последний ребенок
Поскольку мы можем использовать формулы в качестве значения ‘n’ , вместо таргетинга только на второго дочернего элемента, мы можем изменить (2)
на (2n)
и нацелить на каждый второй дочерний элемент следующим образом:
li: nth-child (2n) {
цвет: # 06a8f9;
}
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
- последний ребенок
Если мы объединим это с : last-child
, мы сможем настроить таргетинг на каждого второго дочернего элемента, но только если он является последним дочерним элементом своего родителя.
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
- последний ребенок
Как видите, ни один из целевых дочерних элементов не был последним дочерним элементом своего родителя, поэтому ни один из них не затронут. Если бы мы удалили один из элементов так, чтобы последний дочерний элемент его родителя был кратным двум, вы бы увидели, что этот дочерний элемент нацелен нашим CSS.
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
Вот как будет работать наша сетка.Мы будем использовать подобный код, чтобы применить определенный CSS к последнему дочернему элементу в зависимости от количества дочерних элементов у родителя.
Вот пример нашего css
.li: nth-child (2n): last-child {
цвет: # 06a8f9;
}
.li: nth-child (2n + 1): last-child {
цвет: зеленый;
}
- первый ребенок
- элемент списка
- элемент списка
- первый ребенок
- элемент списка
- элемент списка
- элемент списка
Наша сетка будет работать точно так же, но она изменит ширину последнего дочернего элемента вместо цвета.
Хорошо, приступим.
Я собираюсь начать с создания трех блоков внутри родительского блока. и установив для каждого из них значение 33,33%.
Все примеры размещены на codepen, так что вы можете посмотреть / поиграть с
См. Перо LEKxqZ Джона Морриса (@Johnm__) на CodePen.
Теперь поговорим о волшебстве.
Если бы я добавил еще один div прямо сейчас, он сложился бы под тремя div и имел бы ширину только 33%, оставляя большое неудобное белое пространство шириной 66% справа от него.
Поскольку наша сетка имеет ширину 3 дочерних элемента, и мы не хотим нацеливаться на последнего дочернего элемента, если он находится после последней группы из трех, я собираюсь использовать
: nth-child (3n + 1): last-child
чтобы настроить таргетинг на этот div и установить его ширину на 100%
См. Перо EaBZmB Джона Морриса (@Johnm__) на CodePen.
Я сделаю то же самое, но изменим 3n + 1
на 3n + 2
, чтобы нацелить на последнего ребенка, если после последнего 3n
было двое детей, и установил его ширину на 66%
См. Третий пример пера Джона Морриса (@Johnm__) на CodePen.
Вот и все.
Сетка, которая знает, сколько элементов у нее есть, и соответственно стилизует себя.
Нет предела этому.
Если вы придумаете другое классное использование или способ реализации каких-либо n-х дочерних макетов или трюков, мы будем рады его увидеть. Свяжитесь с нами в твиттере.
3 уровня CSS-селекторов для выбора всех элементов
Style-fact part3
Эта глава из серии StyleFacts посвящена тому, как вы можете выбрать свой элемент — «оружие по выбору»: Селектор.Вы увидите, как можно указать селекторы для правильного каскадного эффекта. Вы узнаете, как перезаписывать селекторы и как применять селекторы к элементу косвенно с помощью псевдоселекторов. Мы можем выбирать элементы. Мы можем выбрать поведение элементов, выбрав состояние. Мы даже можем выбрать элементы, которых на самом деле нет. Здесь вы достигнете последнего уровня селекторов — псевдоэлемента. Давайте посмотрим, какой уровень выбора больше всего подходит для применения ваших стилей: селектор, псевдоселектор или селектор псевдоэлементов.
Как и большинство из вас, возможно, испытали, что написание стилей — это баланс между написанием слишком специфических селекторов стилей (которые нацелены только на одну вещь) и селекторов, которые слишком глобальны (которые портят все, что они касаются).
.page-container div
Вот например. Если «div» является наиболее широко используемым элементом, нацеленным на случайный «div» в глобальном классе, он будет нацелен на каждый элемент «div» на вашей странице. Выбор каждого класса и элемента на пути к цели будет противоположным сценарием.Это неэффективный способ нацеливания на элемент, который нужно стилизовать. Это дает вам огромные таблицы стилей, которые каждый раз нацелены очень мало.
Типы селекторов:
Итак, какие типы селекторов существуют? В стилизации у нас есть 5 типов селекторов. Я перечислил их для вас в предпочтительном порядке использования:
Класс
.класс-селектор {}
На мой взгляд, наиболее предпочтительный селектор, он нацелен на элементы с классом, указанным после точки.
Элемент
элемент-селектор {}
Селектор элементов слабее, чем использование селектора классов и целевых типов элементов напрямую.
Атрибут
элемент [attribute = "selector"] {}
Он слабее (менее специфичен), чем использование селектора элемента, и записывается в скобках ‘[]’.
Универсальный
элемент & gt; * {} / * универсальный селектор * /
Не указывается ни элементу, ни классу. Это мощный селектор, поэтому будьте осторожны при его глобальном использовании. он обозначен звездочкой.
ID
#idSelector {}
Самый мощный селектор, который можно использовать.Это тоже проблема. Если вы используете ID-селектор в комбинированном выборе. Он может превзойти множество аналогичных вариантов выбора комбинаторного спуска. Это хороший мост к комбинаторам. Он объединяет перечисленные выше типы селекторов в выборку.
Комбинаторов:
Когда вы объединяете классы, они станут более конкретными. Таким образом, вы можете нацеливать классы, которые глубоко вложены в ваш шаблон, не влияя на другие элементы. Есть четыре способа объединить селекторы в комбинатор: по потомкам, потомкам, братьям и сестрам и по общему объединению братьев и сестер.Самым известным и наиболее часто используемым является Descendent Combinator:
.Потомок
. Родительский класс. Потомственный класс
Здесь (родительский) элемент и элемент на (нескольких) более вложенных уровнях объединяются в один селектор.
Селектор вложенного уровня не обязательно должен быть дочерним элементом элемента, на который нацелен родительский селектор. Вот как вы можете пропустить уровни явных селекторов, чтобы перейти к целевому селектору через «уникальные» ориентиры в вашем шаблоне.
Детский
.parent-class & gt; .детский класс
Хотя указывать прямые дочерние элементы в качестве селектора необязательно, это может быть реализовано в CSS путем объединения комбинатора в цепочку с шевроном (стрелкой) справа. Это будет нацелено на всех детей с особенностями вашего второго селектора.
Родной брат
. Родительский класс +. Родственный класс
С появлением CSS2 мы можем нацеливать одноуровневые и общие одноуровневые элементы с помощью комбинаторов.Родственный селектор, отмеченный знаком «+» в приведенном выше примере, предназначен для нацеливания на следующий непосредственный родственный элемент предыдущего связанного селектора (элемента). Чтобы настроить таргетинг на всех братьев и сестер с помощью следующего связанного селектора, можно использовать ‘~’. Как в примере ниже:
Общий родной брат
.parent-class ~ .general-sibling-class
Мы узнали, какие бывают селекторы: класс, элемент, атрибут, универсальный и ID-селектор. Мы знаем, как их сочетать: через потомков, потомков или общих / братьев и сестер.Итак, мы готовы перейти к селекторам, которые могут неявно нацеливать элементы. Так называемые псевдоселекторы.
Псевдо-селекторы
Псевдоселекторы позволяют выбирать элемент неявно в зависимости от состояния или местоположения. Например: если вам нужен второй дочерний элемент элемента с определенным селектором. Другой пример — выбор элемента только при наведении курсора. Существует много псевдоселекторов, и каждый месяц добавляются новые в качестве экспериментальных селекторов CSS3.Чтобы проверить доступность, перейдите на сайт www.caniuse.com и введите селектор, который вы хотите использовать, чтобы проверить, поддерживают ли его уже наиболее часто используемые браузеры.
состояние
Мы можем разделить псевдоселекторы на 2 группы: на основе местоположения таргетинга или на основе определенного состояния элемента. Чтобы проиллюстрировать группу состояний, мы можем просмотреть псевдоселекторы в элементе ссылки действия «». Видишь, что я там делал? 🙂
Ниже вы можете увидеть пример нескольких распространенных псевдоселекторов ссылок: ‘: hover’, ‘: link’, ‘: loaded’:
.элемент-ссылки: ссылка {}
. элемент-ссылка: посетил {}
. элемент-ссылка: наведение {}
В коде вы можете увидеть это в действии, щелкнув, наведя указатель мыши или перейдя по ссылке. Все эти разные цвета и внешний вид ссылки указываются отдельно. Большинство этих интерактивных элементов в html имеют стиль по умолчанию для браузера. Без стиля они были бы белыми на белом фоне и поэтому не были бы видны. доступно гораздо больше псевдоселекторов для определения состояния элемента.Например, состояние «: focus» при щелчке по полю ввода или состояние «: checked» при выборе флажка или переключателя. Полный список псевдоклассов можно найти здесь.
место
Вторая группа псевдоселекторов (-класс) — это селекторы для определения местоположения элемента. Возможно, вы знаете псевдоселектор: first-child. Это нацелено на первый дочерний элемент выбранного элемента. Итак, если у вас есть:
.list & gt; div: first-child {} / * выбирает первого дочернего элемента в списке * /
Будет выбран первый дочерний элемент в элементе с классом [class].Аналогичным образом можно настроить таргетинг на последнего ребенка. Вы можете сделать это, определив ‘: last-child’. Для каждого промежуточного дочернего элемента был создан новый псевдоселектор. Так называемый селектор: nth-child. Этот селектор дает вам возможность выбрать один или несколько дочерних элементов. Вы даже можете написать уравнения в атрибутах, чтобы выбрать различные последовательности дочерних элементов. Разрешите пояснить это на примере:
.list> div: last-child {} / * выбирает последнего дочернего элемента в списке * /
. List> div: nth-child (odd) {} / * выбирает нечетных дочерних элементов в списке * /
.list> div: nth-child (7) {} / * выбирает 7-й дочерний элемент в списке * /
. list> div: nth-child (4n + 1) {} / * выбирает дочерний элемент 1,5,9 и т. д. в list * /
Этот вид выбора может быть удобен в списке или таблицах, в которых все элементы и строки принадлежат одним и тем же элементам. Не имеет значения, указаны ли элементы с классом. Вы можете нацелить их в любом случае. В коде вы можете найти пример таргетинга на nth-child. Я сделал вам что-то вроде парящей на память nth-child :). Сможете ли вы найти все цветовые дуэты, посмотрев на селекторы?
Я упоминал, что вы можете добавить математическое уравнение в селектор nth-child.Возьмем, к примеру, «4n + 1». Вы могли узнать это по математике в старшей школе. Это похоже на 4x +1. Он выбирает каждого четвертого ребенка, а затем сдвигает выбор на один. Выбор следующего элемента. Это означает 1 (4 x 0 +1), 5 (4 x 1 +1), 9 (4 x 2 +1) и так далее… вот подробный блог о селекторе ‘nth-child’.
Псевдоэлементы
Перейдем к псевдоэлементам. Они были введены в CSS3 для добавления семантически правильного украшения к элементам.Например, добавление значка к кнопке без добавления пустого i-тега или добавление таргетинга на элемент-заполнитель, который является невидимым элементом, принадлежащим элементу input. Вы можете увидеть этот селектор как «выбор части элемента». Обычно для этого вы создаете новый элемент, но теперь вы можете настроить его как часть исходного элемента.
Давайте посмотрим на псевдоэлемент в действии:
.selector-class :: before {
content: "x";
позиция: абсолютная;
дисплей: блочный;
верх: 0;
осталось: 0;
ширина: 30 пикселей;
высота: 30 пикселей;
цвет фона: серый;
}
Здесь вы можете найти полный набор селекторов псевдоэлементов.Какие еще волшебные вещи можно делать с псевдоэлементами, мы обсудим в следующей главе этого блога.
выбор элемента карате для детейТеперь вы знаете, какой селектор можно использовать в какой ситуации. Где использовать тип селекторов, где использовать комбинаторы, где использовать псевдоэлементы и где вы можете использовать псевдоэлементы. Вы знаете специфику селекторов. Селектор элементов самый сильный. Потом занятия. Потом псевдо и атрибуты. Теперь вы готовы выбрать любой элемент на странице.
Как и в случае с автомобилем, написание элегантных CSS-селекторов приходит с опытом написания стилей и игры с брендингом. Шаблон будет вашим холстом. Попробуйте использовать селекторы по-новому, чтобы увидеть, какие возможности у вас есть. Вы откроете для себя много вещей, которые обычно решаете с помощью Javascript.
StyleFacts часть 1
StyleFacts часть 2
Если у вас есть вопросы по селектору или у вас есть отличное дополнение к этому блогу, дайте мне знать в комментариях! Спасибо за чтение.Следующий блог будет об адаптивном дизайне.
Понимание первого ребенка, последнего ребенка и энного ребенка
Мне нравятся решения только на CSS. Очень часто мне нужно выбрать конкретный элемент DOM. Конечно, я мог бы добавить новый класс, но всегда приятно, если я могу сделать это в моих таблицах стилей. Он просто выглядит лучше, и моя разметка HTML остается чистой. first-child , last-child и nth-child созданы именно для этой цели.
Вот разметка, которую я собираюсь использовать в этой статье:
первенец
Псевдоселектор first-child соответствует первому элементу серии тегов.Это действительно только для определенного объем. Под областью действия я подразумеваю элемент DOM. В разметке выше каждый .content div определяет свою собственную область действия. Так что если ты пишешь:
p: first-child {
font-weight: жирный;
текст-оформление: подчеркивание;
}
эти стили будут применены к Row1 и RowA , потому что они являются первыми совпадениями тега p внутри своих родителей.
последний ребенок
Он работает абсолютно так же, как first-child , но выбирает последний элемент в списке.Однако, если мы используем такую же разметку и добавить
p: last-child {
цвет: # 000;
}
будет изменен только Row4 . Это почему? Это потому, что во втором .content div RowE нет самый последний ребенок. На самом деле это ссылка, представленная тегом и . Итак, p: last-child стало недействительным.
nth-ребенок
Что делать, если вы хотите выделить только третий абзац. nth-child принимает число, ключевое слово или формулу. Для пример:
p: nth-child (3) {
цвет: # 00009F;
}
соответствует Row2 (потому что это третий элемент в своей области) и RowC . Вы можете пройти нечетный , четный или 3n + 0 , например, который стилизует каждый элемент, индекс которого кратен 3.
nth-of-type
Как вы уже видели, указанные выше классы могут привести к неожиданным результатам.Это потому, что не всегда ваши селекторы действительный и примените стили к желаемому элементу. В этих случаях вы можете использовать nth-of-type .
p: nth-of-type (4) {
цвет: # 009F00;
}
Выбирает Row4 и RowD . Т.е. каждый четвертый абзац.
Пример
Вот jsfiddle, который демонстрирует все, что выше
.