CSS - Premier enfant sans une certaine classe
Est-il possible d'écrire une règle CSS pour sélectionner le premier enfant d'un élément sans une classe spécifique?
exemple:
<div>
<span class="common-class ignore"></span>
<span class="common-class ignore"></span>
<span class="common-class"></span>
<span class="common-class"></span>
</div>
Dans ce cas, je voudrais sélectionner la première span
sans classe ignore
.
J'ai essayé ceci, mais ne semble pas fonctionner:
.common-class:first-child:not(.ignore) {
...some rules...
}
Mise à JOUR:
Si j'ajoute une classe à la div parent nommé parent-class
, une version modifiée de la sélection proposée par Jukka fonctionne sauf lorsque le premier span
avec classe ignore
vient après le premier sans. Le ci-dessus mentionné de sélection est le suivant:
.parent-class > .common-class.ignore + .common-class:not(.ignore) {
...some rules...
}
- que faire si vous essayez de cette façon, vérifier la DÉMO. jsbin.com/jozibazi/1/edit
- Dans ce cas précis:
.ignore + .common-class {/* style the first */}
pourrait fonctionner, mais il est probablement assez fragile (et cette approche permettrait de style d'un élément de.common-class
à chaque fois qu'il a suivi un élément de.ignore
).
Vous devez vous connecter pour publier un commentaire.
Cette question est similaire à Sélecteur CSS pour le premier élément avec la classe, sauf pour le premier élément sans une classe. Comme mentionné,
:first-child:not(.ignore)
représente un élément qui est le premier enfant de sa mère et n'a pas la classe "ignorer", pas le premier enfant de correspondance le reste de la sélection.Vous pouvez utiliser de la primauté de la technique avec un frère ou une sœur du combinator que j'ai décrit dans ma réponse à la question, en remplaçant le sélecteur de classe avec le
:not()
pseudo-classe contenant un sélecteur de classe:Cette sélectionne tous span avec un
.common-class
et sans.ignore
classe.Mais, parce que nous voulons sélectionner uniquement la première, vous pouvez remplacer les frères et sœurs qui suivent avec le
~
sélecteur.jsBin démo
Si vous êtes déjà à l'aide de jQuery, cela peut aussi être fait avec
Non, il n'est pas possible. Le sélecteur de
:first-child:not(.ignore)
sélectionne un élément qui est le premier enfant de son parent et n'appartient pas à la classeignore
. Il n'y a pas de “premier de la classe” sélecteur et pas de “premier pas de la classe” sélecteur soit.Vous pouvez utiliser le sélecteur de
.ignore + :not(.ignore)
, mais il correspond à tout élément qui n'est pas dans la classeignore
et suit immédiatement un élément de la classe. Mais elle correspond à trop de choses, et pas seulement le premier de ces éléments. En fonction de la structure de majoration, ce sélecteur peut toujours être adapté à une situation particulière, même si elle n'est pas une réponse à la question générale posée..ignore + :not(.ignore)
, mais pour éviter de trop d'éléments, j'ai ajouté une classe à la div parent (parent-class
) et à utiliser ce sélecteur.parent-class > .ignore + :not(.ignore)
Vous n'avez pas à sélectionner la div à l'aide d'une classe. Quels sont les autres css solutions comme nth-child etc.? Bien sûr, cela nécessite la connaissance de la structure d'un document.