css:nth-child():après
Est-il possible de mélanger :nth-child()
et after
?
J'ai un <ol>
d'éléments et je veux ajouter du texte :after
. Cela fonctionne bien mais j'aimerais alors avoir un texte différent sur les 1er, 2ème et 3ème éléments, puis 4ème, 5ème et 6ème aussi.
Avec le code ci-dessous, je me retrouve avec chaque li
ayant "grand" en rose après.
Cela n'a pas de sens pour moi mais je suis nouveau à cela nth-child
malarky.
Les Données.html
<ol id="id" class="ui-sortable">
<li>
<p>Bacon</p>
</li>
<li>
<p>Bacon</p>
</li>
<li>
<p>Bacon</p>
</li>
<!.. repeats -->
<li>
<p>Bacon</p>
</li>
</ol>
Joli.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;
}
J'aimerais vraiment ne pas faire cela avec js car c'est juste une fonctionnalité "agréable à avoir".
Je ne m'inquiète que des nouveaux navigateurs, donc pas besoin de solutions de contournement pour oldIE, etc.
2 réponses
, Vous pouvez, mais vous le faites mal..
Le problème que tous vos p
éléments sont à l'intérieur li
. Donc, Tous sont le premier enfant de leur conteneur li
.
Vous devrez mettre le nth-child
sur les éléments 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;
}
Citant la documentation du W3C
La notation de pseudo-classe
:nth-child(an+b)
représente un élément qui a une fratrie + b - 1 avant dans l'arborescence du document, pour tout entier positif ou valeur nulle de n, et a un élément parent.
Mise à Jour 1
Vous pouvez également simplifier en utilisant
#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;
}
Démo à http://jsfiddle.net/gaby/4H4AS/2/
Mise à Jour 2
Si vous voulez les six premiers seulement différente (et pas les 3 premiers et les 3 derniers), vous pourriez
#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;
}
Devrait être fait comme ceci:
#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 .
... comme <p>
est toujours le premier enfant de <li>
dans la structure HTML affichée.
Prenez note, cependant, que la règle content: 'nom';
dans la toute première définition de style a été écrasée( mais la règle' float ' est restée): c'est la même règle en cascade pour le pseudo-élément ':after' que pour les autres. )