410 votes

Comment puis-je styliser les éléments pairs et impairs ?

Est-il possible d'utiliser des pseudo-classes CSS pour sélectionner les instances paires et impaires des éléments d'une liste ?

Je m'attendrais à ce que la commande suivante produise une liste de couleurs alternées, mais au lieu de cela, j'obtiens une liste d'éléments bleus :

<html>
    <head>
        <style>
            li { color: blue }
            li:odd { color:green }
            li:even { color:red }
        </style>
    </head>
    <body>
        <ul>
            <li>ho</li>
            <li>ho</li>
            <li>ho</li>
            <li>ho</li>
            <li>ho</li>
        </ul>
    </body>
</html>

822voto

thirtydot Points 114021

Démonstration : http://jsfiddle.net/thirtydot/K3TuN/1323/

li {
    color: black;
}
li:nth-child(odd) {
    color: #777;
}
li:nth-child(even) {
    color: blue;
}

<ul>
    <li>ho</li>
    <li>ho</li>
    <li>ho</li>
    <li>ho</li>
    <li>ho</li>
</ul>

Documentation :

33 votes

Une remarque peut-être : nth-child n'est pas supporté par IE 8 et moins.

1 votes

Vous pouvez utiliser le Selectivzr polyfill si vous devez prendre en charge IE8... et IE6/7 également.

2 votes

Je viens de confirmer que même avec Selectivizr :nth-child(odd/even) ne fonctionne pas dans IE8.

65voto

Kevin Gurney Points 828

Le problème de votre CSS réside dans la syntaxe de vos pseudo-classes.

Les pseudo-classes paires et impaires devraient être :

li:nth-child(even) {
    color:green;
}

y

li:nth-child(odd) {
    color:red;
}

Démonstration : http://jsfiddle.net/q76qS/5/

26voto

Dan S Points 457

Utilisez ça :

li { color:blue; }
li:nth-child(odd) { color:green; }
li:nth-child(even) { color:red; }

Voir ici pour des informations sur le support des navigateurs : http://kimblim.dk/css-tests/selectors/

-3voto

Sukasol Points 1

Pour rendre la chose un peu plus excitante, voici le damier :

tr.class:nth-child(even) {background: #EEE}
tr.class:nth-child(odd) {background: #FFF}

-7voto

Dallas Points 17

Ajouter des classes via Jquery

jQuery("li:odd").addClass("odd") ; jQuery("li:even").addClass("even") ;

et utiliser le css :

.odd {float:left !important;} .even {float:right !important;}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X