Alternatywne kolory tła dla elementów listy

100

Mam listę, a każda pozycja jest połączona. Czy istnieje sposób na zmianę kolorów tła dla każdej pozycji?

<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>
Ćwiek
źródło
23
jest to również znane jako „pasy tygrysa” i nie, nie żartuję
Jeff Atwood,

Odpowiedzi:

293

A może jakiś piękny CSS3?

li { background: green; }
li:nth-child(odd) { background: red; }
Adam C.
źródło
@Adam C Czy możesz zasugerować sposób, aby zastosować to do dynamicznego widoku listy? Kiedy wypróbowałem to z dynamicznym widokiem listy, gdzie dane pochodziły z usługi internetowej, to nie zadziałało!
SKT
2
Czy ktoś ma przykład tego, który działa dobrze z listami zagnieżdżonymi? Oznacza to, że kolor tła pierwszego elementu na liście zagnieżdżonej miałby kolor przeciwny do koloru tła elementu listy tuż przed listą zagnieżdżoną. Ponadto kolor tła następnej pozycji listy nadrzędnej jest przeciwny do koloru tła ostatniego elementu listy na liście zagnieżdżonej.
LS
Można pominąć pierwsze stwierdzenie, aby wykorzystać istniejący kolor tła.
xilef
52

Jeśli chcesz to zrobić wyłącznie w CSS, będziesz mieć klasę, którą przypiszesz do każdego alternatywnego elementu listy. Na przykład

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

Jeśli Twoja lista jest generowana dynamicznie, to zadanie byłoby znacznie łatwiejsze.

Jeśli nie chcesz za każdym razem ręcznie aktualizować tej zawartości, możesz użyć biblioteki jQuery i zastosować styl naprzemiennie do każdego <li>elementu na liście:

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

I twój kod jQuery:

$(document).ready(function(){
  $('#myList li:nth-child(odd)').addClass('alternate');
});
Phil Wheeler
źródło
5

Możesz to osiągnąć, dodając naprzemienne klasy stylów do każdego elementu listy

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

A potem stylizuj to jak

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

Możesz dodatkowo zautomatyzować ten proces za pomocą javascript (przykład jQuery poniżej)

$(document).ready(function() {
  $('table tbody tr:odd').addClass('odd');
});
Chris Van Opstal
źródło
3

Spróbuj dodać parę atrybutów klas, powiedz „parzyste” i „nieparzyste”, do naprzemiennych elementów listy, np

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

W sekcji <style> strony HTML lub w połączonym arkuszu stylów możesz zdefiniować te same klasy, określając żądane kolory tła:

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

Możesz chcieć skorzystać z biblioteki szablonów w miarę ewolucji Twoich potrzeb, aby zapewnić Ci większą elastyczność i ograniczyć pisanie. Po co ręcznie wpisywać wszystkie te elementy listy?


źródło
2

Ponieważ używasz standardowego HTML, będziesz musiał zdefiniować osobną klasę i ręcznie ustawić wiersze na klasy.

rlanham
źródło
To oraz fakt, że możesz to zrobić automatycznie za pomocą JavaScript po efekcie, jak mówi zaakceptowana odpowiedź. Chciałem tylko dać ci +1 za poprawną odpowiedź.
Karl,
1

Możesz to zrobić, określając naprzemienne nazwy klas w wierszach. Wolę używać row0i row1, co oznacza, że ​​możesz je łatwo dodać, jeśli lista jest budowana programowo:

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

Innym sposobem byłoby użycie javascript. W tym przykładzie używany jest jQuery:

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

Edit: Nie wiem, dlaczego dałem przykłady korzystania wiersze tabeli ... zastąpić trz lii tablez uli ma ona zastosowanie dla przykładu

nickf
źródło
1

Jeśli korzystasz z rozwiązania jQuery, będzie działać na IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Jeśli używasz rozwiązania CSS, nie będzie działać w IE8:

li:nth-child(odd) {
    background: black;
}
Augusto Triste
źródło
0

To jest ustawiony kolor tła na parzyste i nieparzyste li:

  li:nth-child(odd) { background: #ffffff; }
  li:nth-child(even) { background: #80808030; }
Avanish Kumar
źródło
-9

Możesz zakodować sekwencję na stałe, na przykład:

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

li + li, li + li + li + li {
  background-color: white;
}
sblundy
źródło
5
To bardzo
upierdliwe
@nickf Yeah. Myślę, że „właściwy” sposób obejmuje CSS3 i prawie nic tego nie obsługuje.
sblundy