2008-12-11 6 views
80

Mam listę, a każdy element jest połączony, czy istnieje sposób na zmianę kolorów tła dla każdego elementu?Alternatywne kolory tła dla elementów listy

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

ten jest również znany jako „Prążki tygrysie”, a nie ja nie żartuję –

Odpowiedz

255

Co powiesz na piękne CSS3?

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

najlepsze rozwiązanie, css3 rulez :) – Mike

+8

+1 za brak dodatkowych bibliotek – shmeeps

+0

Zgadzam się, że tak długo jak IE7 nie jest jedyną wyszukiwarką docelową, ta odpowiedź jest teraz lepszym rozwiązaniem. Wiele się poprawiło w ciągu dwóch lat! –

-8

można by kodować sekwencję, tak:

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

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

to ogromny ból w dupie i nie działa w IE6 :( – nickf

+0

@nickf Tak. Sądzę, że "właściwy" sposób obejmuje CSS3 i nie obsługuje go wcale. – sblundy

+1

To brzydkie, ale wykonalne; +1 ode mnie, bo nie zasługiwał na -5 :) – Nick

4

Można to osiągnąć poprzez dodanie klas stylu zmiennego 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 stylizacji to jak

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

można dodatkowo zautomatyzować ten proces z javascript jQuery (przykład poniżej)

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

Ponieważ przy użyciu standardowego HTML trzeba będzie zdefiniować oddzielną klasę dla i ręczne ustawienie wiersze do klas.

+0

To i fakt, że można to zrobić automatycznie z javascript po efekcie, jak przyjęta odpowiedź mówi. Chciałem dać ci +1, aby uzyskać poprawną odpowiedź. – Karl

1

Można to zrobić, określając naprzemiennie nazwy klas w wierszach. Wolę za pomocą row0 i row1, co oznacza, że ​​można łatwo dodać je, gdy lista jest budowany programowo:

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

Innym sposobem byłoby wykorzystanie JavaScript. jQuery jest używany w tym przykładzie:

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

Edit: Nie wiem, dlaczego dałem przykłady wykorzystaniem wierszy tabeli ... zastąpić tr z li i table z ul i ma zastosowanie do np

52

Jeśli chcesz zrobić to czysto w CSS, musisz 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 będzie znacznie łatwiejsze.

Jeśli nie chcesz ręcznie aktualizować zawartość ta za każdym razem, można użyć biblioteki jQuery i zastosować styl na przemian do każdego elementu <li> w swoim 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> 

a kod jQuery :

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

Wow. Wszyscy uważają, że powinieneś iść z jQuery. –

+9

Rozwiń, aby nie używać tabel w swoim przykładzie ... –

+2

Po prostu przypomniałem mi, żebym nie leniwie kopiował/wklejał przykładu. W powyższym kodzie występuje subtelny błąd. Brakuje $ przed selektorem. Powinno to być $ ('# myList li: nth-child (odd)). – danglund

3

Spróbuj dodać pary atrybutów klas, powiedz "parzyste" i "nieparzyste", na przemienne elementy 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 <stylu> części strony HTML, lub w połączonym arkuszu stylów, należy określić te same zajęcia, określający żądane kolory tła:

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

Możesz chcieć użyć biblioteka szablonów, gdy Twoje potrzeby ewoluują, aby zapewnić Ci większą elastyczność i ograniczyć pisanie. Po co ręcznie wpisywać wszystkie te elementy listy?

1

Jeśli używasz rozwiązanie jQuery to zadziała na IE8:

jQuery

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

CSS

.alternate { 
background: black; 
} 

Jeśli używasz soloution CSS to won 't praca o n IE8:

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

to ustawić kolor tła na parzystych i nieparzystych li:

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