Je ne peux pas faire la différence entre element:first-child
etelement:first-of-type
Par exemple, disons que vous aviez un div
div:first-child
→ Tous les <div>
éléments qui sont le premier enfant de leur parent.
div:first-of-type
→ Tous les <div>
éléments qui sont le premier <div>
élément de leur parent.
Cela semble être exactement la même chose, mais ils fonctionnent différemment.
Quelqu'un pourrait-il expliquer?
css
css-selectors
BoltClock
la source
la source
Réponses:
Un élément parent peut avoir un ou plusieurs éléments enfants:
Parmi ces enfants, un seul d'entre eux peut être le premier. Ceci correspond à
:first-child
:La différence entre
:first-child
et:first-of-type
est qu'il:first-of-type
correspondra au premier élément de son type d'élément, qui en HTML est représenté par son nom de balise, même si cet élément n'est pas le premier enfant du parent . Jusqu'à présent, les éléments enfants que nous examinons ont tous été desdiv
s, mais soyez indulgents, j'y reviendrai dans un instant.Pour l'instant, l'inverse est également vrai: tout
:first-child
est également:first-of-type
par nécessité. Puisque le premier enfant ici est également le premierdiv
, il correspondra aux deux pseudo-classes, ainsi qu'au sélecteur de typediv
:Maintenant, si vous changez le type du premier enfant de
div
à quelque chose d'autre, commeh1
, ce sera toujours le premier enfant, mais ce ne sera plus le premierdiv
évidemment; au lieu de cela, il devient le premier (et le seul)h1
. S'il y a d'autresdiv
éléments suivant ce premier enfant dans le même parent, le premier de cesdiv
éléments correspondra alorsdiv:first-of-type
. Dans l'exemple donné, le deuxième enfant devient le premierdiv
après que le premier enfant est changé enh1
:Notez que cela
:first-child
équivaut à:nth-child(1)
.Cela implique également que bien qu'un élément ne puisse avoir qu'un seul élément enfant correspondant
:first-child
à la fois, il peut et aura autant d'enfants correspondant à la:first-of-type
pseudo-classe que le nombre de types d'enfants qu'il possède. Dans notre exemple, le sélecteur.parent > :first-of-type
(avec une*
qualification implicite du:first-of-type
pseudo) correspondra à deux éléments, pas seulement un:Il en va de même pour
:last-child
and:last-of-type
: any l':last-child
est aussi par nécessité:last-of-type
, puisque absolument aucun autre élément ne le suit dans son parent. Pourtant, comme le dernierdiv
est aussi le dernier enfant, leh1
ne peut pas être le dernier, bien qu'il soit le dernier de son type.:nth-child()
et:nth-of-type()
fonctionnent de manière très similaire en principe lorsqu'ils sont utilisés avec un argument entier arbitraire (comme dans l':nth-child(1)
exemple mentionné ci-dessus), mais là où ils diffèrent, c'est dans le nombre potentiel d'éléments correspondant à:nth-of-type()
. Ceci est traité en détail dans Quelle est la différence entre p: nth-child (2) et p: nth-of-type (2)?la source
J'ai créé un exemple pour démontrer la différence entre
first-child
etfirst-of-type
ici.HTML
CSS
Pour voir l'exemple complet, veuillez visiter https://jsfiddle.net/bwLvyf3k/1/
la source
La différence entre le type premier enfant et premier enfant peut être comprise avec l'exemple.vous devez comprendre l'exemple suivant créé par moi et cela fonctionne vraiment, vous pouvez coller les codes dans votre éditeur, vous comprendrez ce qu'ils sont et comment ils travaillent
Code n ° 1 pour le premier du type:
résultat
.p1, .p2, .p3 seront stylisés et leur couleur sera rouge, même si nous mettons .p1 après le deuxième div, il sera rouge.
Code # 2 pour le premier enfant:
résultat:
si nous mettons le .p2 après le deuxième div 2, il ne sera pas rouge mais dans le premier cas, il fonctionnait.
la source