Couleurs d'arrière-plan alternatives pour les éléments de liste

100

J'ai une liste et chaque élément est lié, y a-t-il un moyen d'alterner les couleurs d'arrière-plan de chaque élément?

<ul>
    <li><a href="link">Link 1</a></li>
    <li><a href="link">Link 2</a></li>
    <li><a href="link">Link 3</a></li>
    <li><a href="link">Link 4</a></li>
    <li><a href="link">Link 5</a></li>
</ul>
Brad
la source
23
ceci est également connu sous le nom de "rayures de tigre" et non je ne plaisante pas
Jeff Atwood

Réponses:

293

Que diriez-vous d'un joli CSS3?

li { background: green; }
li:nth-child(odd) { background: red; }
Adam C
la source
@Adam C Pouvez-vous suggérer un moyen de faire en sorte que cela s'applique à la vue de liste dynamique? Quand je l'ai essayé avec une vue de liste dynamique, où les données provenaient du service Web, cela n'a pas fonctionné!
SKT
2
Quelqu'un a-t-il un exemple de cela qui fonctionne bien avec des listes imbriquées? Autrement dit, la couleur d'arrière-plan du premier élément de la liste imbriquée aurait la couleur opposée à la couleur d'arrière-plan de l'élément de liste juste avant la liste imbriquée. De plus, la couleur d'arrière-plan de l'élément de liste suivant de la liste parent est l'opposé de la couleur d'arrière-plan du dernier élément de liste dans la liste imbriquée.
LS
On peut omettre la première déclaration pour que la couleur d'arrière-plan existante soit utilisée.
xilef
52

Si vous voulez le faire uniquement en CSS, vous auriez une classe que vous attribueriez à chaque élément de liste alternatif. Par exemple

<ul>
    <li class="alternate"><a href="link">Link 1</a></li>
    <li><a href="link">Link 2</a></li>
    <li class="alternate"><a href="link">Link 3</a></li>
    <li><a href="link">Link 4</a></li>
    <li class="alternate"><a href="link">Link 5</a></li>
</ul>

Si votre liste est générée dynamiquement, cette tâche serait beaucoup plus facile.

Si vous ne souhaitez pas avoir à mettre à jour manuellement ce contenu à chaque fois, vous pouvez utiliser la bibliothèque jQuery et appliquer un style en alternance à chaque <li>élément de votre liste:

<ul id="myList">
    <li><a href="link">Link 1</a></li>
    <li><a href="link">Link 2</a></li>
    <li><a href="link">Link 3</a></li>
    <li><a href="link">Link 4</a></li>
    <li><a href="link">Link 5</a></li>
</ul>

Et votre code jQuery:

$(document).ready(function(){
  $('#myList li:nth-child(odd)').addClass('alternate');
});
Phil.Wheeler
la source
5

Vous pouvez y parvenir en ajoutant des classes de style alternées à chaque élément de la liste

<ul>
    <li class="odd"><a href="link">Link 1</a></li>
    <li><a href="link">Link 2</a></li>
    <li class="odd"><a href="link">Link 2</a></li>
    <li><a href="link">Link 2</a></li>
</ul>

Et puis le coiffer comme

li { backgorund:white; }
li.odd { background:silver; }

Vous pouvez automatiser davantage ce processus avec javascript (exemple jQuery ci-dessous)

$(document).ready(function() {
  $('table tbody tr:odd').addClass('odd');
});
Chris Van Opstal
la source
3

Essayez d'ajouter une paire d'attributs de classe, par exemple «pair» et «impair», à des éléments de liste alternés, par exemple

<ul>
    <li class="even"><a href="link">Link 1</a></li>
    <li class="odd"><a href="link">Link 2</a></li>
    <li class="even"><a href="link">Link 3</a></li>
    <li class="odd"><a href="link">Link 4</a></li>
    <li class="even"><a href="link">Link 5</a></li>
</ul>

Dans une section <style> de la page HTML, ou dans une feuille de style liée, vous définiriez ces mêmes classes, en spécifiant les couleurs d'arrière-plan souhaitées:

li.even { background-color: red; }
li.odd { background-color: blue; }

Vous souhaiterez peut-être utiliser une bibliothèque de modèles au fur et à mesure que vos besoins évoluent pour vous offrir une plus grande flexibilité et réduire la saisie. Pourquoi taper tous ces éléments de liste à la main?


la source
2

Puisque vous utilisez du HTML standard, vous devrez définir une classe distincte et définir manuellement les lignes sur les classes.

Rlanham
la source
Ceci et le fait que vous puissiez le faire automatiquement avec un javascript après effet comme le dit la réponse acceptée. Je voulais juste vous donner un +1 pour une réponse correcte.
Karl
1

Vous pouvez le faire en spécifiant des noms de classe alternés sur les lignes. Je préfère utiliser row0et row1, ce qui signifie que vous pouvez facilement les ajouter, si la liste est construite par programme:

for ($i = 0; $i < 10; ++$i) {
    echo '<tr class="row' . ($i % 2) . '">...</tr>';
}

Une autre façon serait d'utiliser javascript. jQuery est utilisé dans cet exemple:

$('table tr:odd').addClass('row1');

Edit: Je ne sais pas pourquoi j'ai donné des exemples en utilisant des lignes de tableau ... remplacer trpar liet tablepar ulet cela s'applique à votre exemple

nickf
la source
1

Si vous utilisez la solution jQuery, cela fonctionnera sur IE8:

jQuery

$(document).ready(function(){
$('#myList li:nth-child(odd)').addClass('alternate');
});

CSS

.alternate {
background: black;
}

Si vous utilisez la solution CSS, cela ne fonctionnera pas sur IE8:

li:nth-child(odd) {
    background: black;
}
Augusto Triste
la source
0

Ceci est défini la couleur d'arrière-plan sur les li pairs et impairs:

  li:nth-child(odd) { background: #ffffff; }
  li:nth-child(even) { background: #80808030; }
Avanish Kumar
la source
-9

Vous pouvez en codant en dur la séquence, comme ceci:

li, li + li + li, li + li + li + li + li {
  background-color: black;
}

li + li, li + li + li + li {
  background-color: white;
}
sblundy
la source
5
C'est une énorme douleur dans le cul et cela ne fonctionne pas dans IE6 :(
nickf
@nickf Ouais. Je pense que la manière «appropriée» implique CSS3 et presque rien ne le supporte.
sblundy du