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>

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 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');
});

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');
});

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?


2

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


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


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

0

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

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

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

5
To bardzo
upierdliwe

@nickf Yeah. Myślę, że „właściwy” sposób obejmuje CSS3 i prawie nic tego nie obsługuje.
sblundy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.