J'essaye de sélectionner le premier à l' h1
intérieur d'un div
avec une classe appelée detail_container
. Cela fonctionne si h1
c'est le premier élément div
, mais s'il vient après cela, ul
cela ne fonctionnera pas.
<style type="text/css">
.detail_container h1:first-child
{
color:blue;
}
</style>
</head>
<body>
<div class="detail_container">
<ul>
<li></li>
<li></li>
</ul>
<h1>First H1</h1>
<h1>Second H1</h1>
</div>
</body>
</html>
J'avais l'impression que le CSS que j'ai sélectionnera le premier, h1
peu importe où il se trouve div
. Comment puis-je le faire fonctionner?
css
css-selectors
L'homme aux muffins
la source
la source
Réponses:
Le
h1:first-child
sélecteur signifieLe
:first-child
du conteneur ici est leul
, et en tant que tel ne peut pas satisfaireh1:first-child
.Il existe des CSS3
:first-of-type
pour votre cas:Mais avec les problèmes de compatibilité du navigateur et autres, il vaut mieux donner au premier
h1
une classe, puis cibler cette classe:la source
:first-of-type
sélecteur.:first-of-type
. L'ancien lien est incorrect.:first-child
n'est pas clair à comprendre, car vous définissez l'élément comme un sélecteur CSS, par exempleh1
, et vous pensez ensuite "prendre le premier enfant" de tous dans le niveau DOM choisi. Je l'ai mal utilisé tant de fois ... Il faut s'habituer au:first-of-type
sélecteur et penser au premier enfant de ce type.:first-child
sélectionne le premierh1
si et seulement si c'est le premier enfant de son élément parent. Dans votre exemple, leul
est le premier enfant dudiv
.Le nom de la pseudo-classe est quelque peu trompeur, mais il est expliqué assez clairement ici dans la spécification.
Le
:first
sélecteur de jQuery vous donne ce que vous recherchez. Tu peux le faire:$('.detail_container h1:first').css("color", "blue");
la source
Pour ce cas particulier, vous pouvez utiliser:
Mais si vous avez besoin du même sélecteur dans de nombreux cas, vous devriez avoir une classe pour ceux-ci, comme l'a dit BoltClock.
la source
vous pouvez aussi utiliser
En changeant le nombre 1 par n'importe quel autre nombre, vous pouvez sélectionner n'importe quel autre élément h1.
la source
Vous pouvez envelopper vos
h1
tags dans un autrediv
, puis le premier serait lefirst-child
. Celadiv
n'a même pas besoin de styles. C'est juste une façon de séparer ces enfants.la source
L'élément ne peut pas hériter directement de la
<body>
balise. Vous pouvez essayer de le mettre dans une<dir style="padding-left:0px;"></dir>
balise.la source