Cores de fundo alternativas para itens de lista

100

Eu tenho uma lista e cada item está vinculado, há uma maneira de alternar as cores de fundo para cada item?

<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
fonte
23
isso também é conhecido como "striping de tigre" e não, não estou brincando
Jeff Atwood

Respostas:

293

Que tal um adorável CSS3?

li { background: green; }
li:nth-child(odd) { background: red; }
Adam C
fonte
@Adam C Você pode sugerir uma maneira de fazer isso se aplicar à visualização de lista dinâmica? Quando tentei com o modo de exibição de lista dinâmico, de onde os dados vinham do serviço da web, não funcionou!
SKT
2
Alguém tem um exemplo disso que funcione bem com listas aninhadas? Ou seja, a cor de fundo do primeiro item na lista aninhada teria a cor oposta da cor de fundo do item da lista imediatamente antes da lista aninhada. Além disso, a cor de fundo do próximo item da lista pai é o oposto da cor de fundo do último item da lista aninhada.
LS
Pode-se omitir a primeira afirmação para que seja usada a cor de fundo existente.
xilef
52

Se você quiser fazer isso puramente em CSS, terá uma classe que atribuirá a cada item alternativo da lista. Por exemplo

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

Se sua lista for gerada dinamicamente, essa tarefa seria muito mais fácil.

Se você não quiser ter que atualizar manualmente este conteúdo toda vez, você pode usar a biblioteca jQuery e aplicar um estilo alternadamente a cada <li>item em sua 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>

E seu código jQuery:

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

Você pode conseguir isso adicionando classes de estilo alternadas a cada item da 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>

E então estilizá-lo como

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

Você pode automatizar ainda mais esse processo com javascript (exemplo de jQuery abaixo)

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

Tente adicionar um par de atributos de classe, digamos 'par' e 'ímpar', a elementos de lista alternados, por exemplo

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

Em uma seção <style> da página HTML ou em uma folha de estilo vinculada, você definiria essas mesmas classes, especificando as cores de fundo desejadas:

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

Você pode querer usar uma biblioteca de modelos à medida que suas necessidades evoluem para fornecer maior flexibilidade e reduzir a digitação. Por que digitar todos esses elementos da lista manualmente?


fonte
2

Uma vez que você usa HTML padrão, você precisará definir uma classe separada para e definir manualmente as linhas para as classes.

Rlanham
fonte
Isso e o fato de que você pode fazer isso automaticamente com um javascript após o efeito, como diz a resposta aceita. Eu só queria dar a você um +1 pela resposta correta.
Karl
1

Você pode fazer isso especificando nomes de classes alternados nas linhas. Eu prefiro usar row0e row1, o que significa que você pode adicioná-los facilmente, se a lista estiver sendo construída programaticamente:

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

Outra forma seria usar javascript. jQuery está sendo usado neste exemplo:

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

Edit: Não sei por que dei exemplos usando linhas da tabela ... substitua trpor lie tablepor ule isso se aplica ao seu exemplo

nickf
fonte
1

Se você usar a solução jQuery, ela funcionará no IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Se você usar a solução CSS, ela não funcionará no IE8:

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

Isso é definido como cor de fundo em li par e ímpar:

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

Você pode codificar a sequência da seguinte maneira:

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

li + li, li + li + li + li {
  background-color: white;
}
sblundy
fonte
5
Isso é um grande pé no saco e não funciona no IE6 :(
nickf
@nickf Sim. Acho que a maneira "adequada" envolve CSS3 e quase nada oferece suporte a isso.
sblundy