C'est très facile avec CSS. Vous pouvez utiliser soit :nth-child
o :nth-of-type
pseudo-sélecteurs.
L'essentiel
Pour rendre les choses vraiment simples pour commencer, considérons le HTML suivant (j'ajouterai votre code plus tard) :
<div>
<p>This is our first paragraph</p> <!-- This one should be blue -->
<p>This is our second paragraph</p> <!-- This one should be red -->
</div>
Sur la base de ce HTML, si nous voulions faire de la <p>
éléments de couleurs différentes, nous pourrions écrire l'une ou l'autre des CSS suivantes :
Option 1
p:nth-of-type(1) {
color: blue;
}
p:nth-of-type(2) {
color: red;
}
Option 2
p:nth-child(1) {
color: blue;
}
p:nth-child(2) {
color: red;
}
C'est assez facile de voir ce qui se passe ici. Le nombre entre les parenthèses représente l'élément que vous voulez sélectionner (1 = premier élément, 2 = deuxième élément, 3 = troisième élément, etc.) Cela n'est pas très utile si l'on ne veut pas écrire manuellement beaucoup de CSS pour chaque nombre possible d'éléments.
Prenez votre propre code comme exemple ici. Vous avez une liste - cette liste peut être utilisée uniquement pour quelque chose avec un nombre fixe d'éléments (comme un menu de navigation). Dans ce cas, pas de problème. Nous connaissons le nombre d'éléments que nous devons styliser, et nous pouvons donc (probablement) nous contenter d'écrire du CSS pour une poignée d'éléments.
Cependant, si votre liste est alimentée dynamiquement (à partir d'une base de données ou via Javascript), il y aura un nombre potentiellement infini d'éléments. Ou, si nous ne savons pas encore quelle sera la taille de la liste, et qu'il se trouve qu'elle sera assez grande, nous devrons probablement trouver un moyen plus efficace d'écrire notre CSS. Ce qui m'amène à...
n-règles
Les n-règles ne sont rien d'autre que de l'algèbre, dans sa forme la plus basique. Vous vous souvenez de ces questions de mathématiques ennuyeuses qu'on vous posait à l'école ?
Si n = 2, quelle est la valeur de 5n + 1 ?
Oui, elles sont revenues vous hanter. Dans le cas de la question ci-dessus - nous savons que la réponse est 11. Les n-règles sont plus ou moins écrites de la même manière :
li:nth-of-type(5n+1) {
color: green;
}
Dans le cas de l'exemple ci-dessus, nous sélectionnons tous les 5 éléments. Si nous écrivions notre règle n comme 2n+1
nous choisirions un élément sur deux. Ainsi, une règle de 10n+1
sélectionnerait tous les 10 éléments. L'écart entre les éléments augmente ou diminue, en fonction de la valeur du multiplicateur précédent. n
.
Si on ne changeait pas le multiplicateur, mais qu'on changeait le +1
de notre règle n, nous changerions le décalage (c'est-à-dire le premier élément affecté par notre règle). Le site +1
dit en gros "commencez-moi au premier élément". Donc +2
nous ferait commencer sur le deuxième élément, et ainsi de suite.
Cela signifie également que vous pouvez avoir une règle comme celle-ci 3n-1
ce qui nous ferait commencer par le tout dernier élément.
Donc, pour donner un exemple avec votre code. Disons que vous voulez les éléments suivants dans votre liste :
- Le premier élément doit être en gras
- Le deuxième élément doit avoir un fond bleu
- Le troisième élément devrait avoir un texte rouge
- Ce schéma doit se répéter pour chaque groupe de 3 éléments de la liste.
Vous pourriez écrire la règle CSS suivante :
li:nth-of-type(3n+1) {
font-weight: bold;
}
li:nth-of-type(3n+2) {
background: blue;
}
li:nth-of-type(3n+3) {
color: red;
}
Mais pourquoi cela fonctionne-t-il ? Si vous voulez en savoir plus, et faire quelques expériences sur les n-rules - jetez un coup d'oeil à Trucs et astuces CSS : nth Tester
Enfin,
En ce moment, vous pensez probablement "quelle est la différence entre :nth-of-type
y :nth-child
?"
:nth-child selector : Ceci appliquera des styles CSS à un élément, si les deux conditions suivantes sont vraies :
- C'est une correspondance directe avec un élément que nous avons spécifié.
- C'est le nième enfant d'un élément parent.
:nth-of-type selector : Ceci appliquera des styles CSS à un élément, si la condition suivante est vraie :
- C'est une correspondance directe avec un élément que nous avons spécifié.
Il y a une différence subtile entre les deux. Mais en gros, :nth-child
est plus spécifique quant à ce qu'il sélectionne. Ce qui peut avoir son utilité - parce que nous pourrions spécifier une règle avec :nth-of-type
et ensuite utiliser :nth-child
pour remplacer cette règle pour des éléments spécifiques.
En savoir plus sur eux aquí
J'espère que cela vous aidera :)