Alternative Hintergrundfarben für Listenelemente

100

Ich habe eine Liste und jedes Element ist verknüpft. Gibt es eine Möglichkeit, die Hintergrundfarben für jedes Element zu ändern?

<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
quelle
23
Dies ist auch als "Tiger Striping" bekannt und nein, ich mache keine Witze
Jeff Atwood

Antworten:

293

Wie wäre es mit einem schönen CSS3?

li { background: green; }
li:nth-child(odd) { background: red; }
Adam C.
quelle
@Adam C Können Sie eine Möglichkeit vorschlagen, dies für die dynamische Listenansicht anzuwenden? Als ich es mit der dynamischen Listenansicht versuchte, bei der Daten vom Webdienst kamen, funktionierte dies nicht!
SKT
2
Hat jemand ein Beispiel dafür, das gut mit verschachtelten Listen funktioniert? Das heißt, die Hintergrundfarbe des ersten Elements in der verschachtelten Liste hätte die entgegengesetzte Farbe der Hintergrundfarbe des Listenelements unmittelbar vor der verschachtelten Liste. Außerdem ist die Hintergrundfarbe des nächsten Listenelements der übergeordneten Liste das Gegenteil der Hintergrundfarbe des letzten Listenelements in der verschachtelten Liste.
LS
Man kann die erste Aussage weglassen, damit die vorhandene Hintergrundfarbe verwendet wird.
Xilef
52

Wenn Sie dies nur in CSS tun möchten, haben Sie eine Klasse, die Sie jedem alternativen Listenelement zuweisen würden. Z.B

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

Wenn Ihre Liste dynamisch generiert wird, ist diese Aufgabe viel einfacher.

Wenn Sie diesen Inhalt nicht jedes Mal manuell aktualisieren müssen, können Sie die jQuery-Bibliothek verwenden und abwechselnd einen Stil auf jedes <li>Element in Ihrer Liste anwenden :

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

Und dein jQuery-Code:

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

Sie können dies erreichen, indem Sie jedem Listenelement abwechselnde Stilklassen hinzufügen

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

Und dann wie es stylen

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

Sie können diesen Prozess mit Javascript weiter automatisieren (jQuery-Beispiel unten).

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

Fügen Sie abwechselnd Listenelementen ein Paar Klassenattribute hinzu, z. B. "gerade" und "ungerade", z

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

In einem <style> -Abschnitt der HTML-Seite oder in einem verknüpften Stylesheet definieren Sie dieselben Klassen und geben dabei die gewünschten Hintergrundfarben an:

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

Möglicherweise möchten Sie eine Vorlagenbibliothek verwenden, wenn sich Ihre Anforderungen ändern, um Ihnen mehr Flexibilität zu bieten und die Eingabe zu reduzieren. Warum all diese Listenelemente von Hand eingeben?


quelle
2

Da Sie Standard-HTML verwenden, müssen Sie eine separate Klasse für die Klassen definieren und die Zeilen manuell auf die Klassen festlegen.

Rlanham
quelle
Dies und die Tatsache, dass Sie dies automatisch mit einem Javascript-Nacheffekt tun können, wie in der akzeptierten Antwort angegeben. Ich wollte dir nur eine +1 für eine korrekte Antwort geben.
Karl
1

Sie können dies tun, indem Sie in den Zeilen abwechselnde Klassennamen angeben. Ich bevorzuge die Verwendung von row0und row1, was bedeutet, dass Sie sie einfach hinzufügen können, wenn die Liste programmgesteuert erstellt wird:

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

Eine andere Möglichkeit wäre die Verwendung von Javascript. In diesem Beispiel wird jQuery verwendet:

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

Edit: Ich weiß nicht , warum ich gab Beispiele von Tabellenzeilen mit ... ersetzen trmit liund tablemit ulund es gilt für Ihr Beispiel

nickf
quelle
1

Wenn Sie die jQuery-Lösung verwenden, funktioniert sie unter IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Wenn Sie die CSS-Lösung verwenden, funktioniert sie unter IE8 nicht:

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

Dies ist die Hintergrundfarbe für gerade und ungerade li:

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

Sie können die Sequenz wie folgt fest codieren:

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

li + li, li + li + li + li {
  background-color: white;
}
sblundy
quelle
5
Das ist ein massiver Schmerz im Arsch und es funktioniert nicht in IE6 :(
nickf
@nickf Ja. Ich denke, der "richtige" Weg beinhaltet CSS3 und so gut wie nichts unterstützt dies.
sblundy