Colores de fondo alternativos para los elementos de la lista


100

Tengo una lista y cada elemento está vinculado, ¿hay alguna forma de que pueda alternar los colores de fondo para cada elemento?

<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>

23
esto también se conoce como "rayas de tigre" y no, no estoy bromeando
Jeff Atwood

Respuestas:


293

¿Qué tal un CSS3 encantador?

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

@Adam C ¿Puede sugerir una forma de hacer que esto se aplique a la vista de lista dinámica? Cuando lo probé con vista de lista dinámica, donde los datos provenían del servicio web, ¡esto no funcionó!
SKT

2
¿Alguien tiene un ejemplo de esto que funcione bien con listas anidadas? Es decir, el color de fondo del primer elemento de la lista anidada tendría el color opuesto al color de fondo del elemento de la lista justo antes de la lista anidada. Además, el color de fondo del siguiente elemento de la lista de la lista principal es el opuesto al color de fondo del último elemento de la lista anidada.
LS

Se puede omitir la primera declaración para que se utilice el color de fondo existente.
xilef

52

Si desea hacer esto únicamente en CSS, entonces tendrá una clase que asignaría a cada elemento de la lista alternativo. P.ej

<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 su lista se genera dinámicamente, esta tarea sería mucho más fácil.

Si no desea tener que actualizar manualmente este contenido cada vez, puede usar la biblioteca jQuery y aplicar un estilo alternativamente a cada <li>elemento de su lista:

<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>

Y su código jQuery:

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

5

Puede lograr esto agregando clases de estilo alternas a cada elemento de la lista

<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>

Y luego peinarlo como

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

Puede automatizar aún más este proceso con javascript (ejemplo de jQuery a continuación)

$(document).ready(function() {
  $('table tbody tr:odd').addClass('odd');
});

3

Intente agregar un par de atributos de clase, digamos 'par' e 'impar', para alternar elementos de lista, por ejemplo

<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>

En una sección <style> de la página HTML, o en una hoja de estilo vinculada, definirías esas mismas clases, especificando los colores de fondo deseados:

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

Es posible que desee utilizar una biblioteca de plantillas a medida que evolucionen sus necesidades para brindarle una mayor flexibilidad y reducir el mecanografiado. ¿Por qué escribir todos esos elementos de la lista a mano?


2

Dado que utiliza HTML estándar, deberá definir una clase separada y establecer manualmente las filas para las clases.


Esto y el hecho de que puede hacerlo automáticamente con un efecto posterior de javascript como dice la respuesta aceptada. Solo quería darte un +1 por una respuesta correcta.
Karl

1

Puede hacerlo especificando nombres de clases alternos en las filas. Prefiero usar row0y row1, lo que significa que puede agregarlos fácilmente, si la lista se crea mediante programación:

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

Otra forma sería usar javascript. jQuery se está utilizando en este ejemplo:

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

Editar: no sé por qué di ejemplos usando filas de tabla ... reemplace trcon liy tablecon uly se aplica a su ejemplo


1

Si usa la solución jQuery , funcionará en IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Si usa la solución CSS , no funcionará en IE8:

li:nth-child(odd) {
    background: black;
}

0

Se establece el color de fondo en li pares e impares:

  li:nth-child(odd) { background: #ffffff; }
  li:nth-child(even) { background: #80808030; }

-9

Puede codificar la secuencia, así:

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

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

5
Eso es un dolor enorme en el trasero y no funciona en IE6 :(
nickf

@nickf Sí. Creo que la forma "adecuada" implica CSS3 y casi nada lo admite.
sblundy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.