Я не могу отличить element:first-child
иelement:first-of-type
Например, у вас есть div
div:first-child
→ Все <div>
элементы, которые являются первыми дочерними элементами своего родителя.
div:first-of-type
→ Все <div>
элементы, которые являются первым <div>
элементом своего родителя.
Это похоже на одно и то же, но они работают по-разному.
Может кто-нибудь объяснить?
css
css-selectors
BoltClock
источник
источник
Ответы:
Родительский элемент может иметь один или несколько дочерних элементов:
Среди этих детей только один может быть первым. Этому соответствует
:first-child
:Разница между
:first-child
и:first-of-type
заключается в том, что:first-of-type
он соответствует первому элементу своего типа элемента, который в HTML представлен его именем тега, даже если этот элемент не является первым дочерним элементом родительского элемента . Пока что все дочерние элементы, на которые мы смотрим, былиdiv
, но потерпите меня, я вернусь к этому чуть позже.А пока верно и обратное: любое
:first-child
- тоже:first-of-type
по необходимости. Поскольку первый дочерний элемент здесь также является первымdiv
, он будет соответствовать обоим псевдоклассам, а также селектору типаdiv
:Теперь, если вы измените тип первого дочернего элемента с
div
на что-то другое, напримерh1
, он все равно будет первым дочерним элементом , но,div
очевидно , он больше не будет первым ; вместо этого он становится первым (и единственным)h1
. Еслиdiv
после этого первого дочернего элемента в пределах того же родителя есть какие-либо другиеdiv
элементы, тогда будет совпадать первый из этих элементовdiv:first-of-type
. В данном примере второй дочерний элемент становится первымdiv
после того, как первый дочерний элемент изменен наh1
:Обратите внимание, что
:first-child
это эквивалентно:nth-child(1)
.Это также означает, что, хотя у любого элемента может быть только один соответствующий дочерний элемент
:first-child
за раз, он может и будет иметь столько дочерних элементов, соответствующих:first-of-type
псевдоклассу, сколько типов дочерних элементов у него есть. В нашем примере селектор.parent > :first-of-type
(с неявной*
квалификацией:first-of-type
псевдо) будет соответствовать двум элементам, а не только одному:То же самое верно и для
:last-child
and:last-of-type
: any также:last-child
является обязательным:last-of-type
, поскольку за ним не следует ни один другой элемент в пределах своего родителя. Тем не менее, поскольку последнийdiv
также является последним ребенком, онh1
не может быть последним ребенком, несмотря на то, что он последний в своем типе.:nth-child()
и:nth-of-type()
работают очень похоже в принципе при использовании с произвольным целочисленным аргументом (как в:nth-child(1)
примере, упомянутом выше), но где они различаются, так это в потенциальном количестве элементов, которым соответствуют:nth-of-type()
. Это подробно описано в разделе В чем разница между p: nth-child (2) и p: nth-of-type (2)?источник
Я создал пример, чтобы продемонстрировать разницу между
first-child
иfirst-of-type
здесь.HTML
CSS
Чтобы увидеть полный пример, посетите https://jsfiddle.net/bwLvyf3k/1/
источник
Разницу между типом first-child и first-child можно понять на примере. Вам нужно понять следующий пример, созданный мной, и он действительно работает, вы можете вставить коды в свой редактор, вы поймете, что это такое и как они работают
Код №1 для первокурсников:
результат
.p1, .p2, .p3 будут стилизованы, и их цвет будет красным. даже если мы поместим .p1 после второго div, он будет красным.
Код №2 для первенца:
результат:
если мы поместим .p2 после второго div 2, он не будет красным, однако в первом случае он работал.
источник