Альтернативні кольори фону для елементів списку


100

У мене є список, і кожен елемент пов'язаний, чи є спосіб чергувати кольори фону для кожного елемента?

<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
це також відоме як "тигрова смуга", і ні, я не жартую
Джефф Етвуд

Відповіді:


293

Як щодо чудового CSS3?

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

@Adam C Чи можете ви запропонувати спосіб застосувати це до застосування для динамічного перегляду списків? Коли я спробував це з динамічним переглядом списків, де дані надходять із веб-сервісу, це не спрацювало!
СКТ

2
Хтось має приклад цього, який добре працює з вкладеними списками? Тобто колір тла першого елемента вкладеного списку мав би протилежний колір тла елемента списку безпосередньо перед вкладеним списком. Також колір тла наступного елемента списку батьківського списку є протилежним кольору фону останнього елемента списку вкладеного списку.
LS

Можна залишити перше твердження, щоб використовувати існуючий колір фону.
xilef

52

Якщо ви хочете робити це виключно в CSS, тоді у вас буде клас, який ви призначите кожному альтернативному списку. Напр

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

Якщо ваш список динамічно генерується, це завдання буде набагато простішим.

Якщо вам не потрібно щоразу оновлювати цей вміст вручну, ви можете використовувати бібліотеку jQuery і застосовувати стиль по черзі до кожного <li>елемента списку:

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

І ваш код jQuery:

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

5

Ви можете досягти цього, додаючи чергування класів стилів до кожного елемента списку

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

А потім стилізувати це як

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

Ви можете далі автоматизувати цей процес за допомогою JavaScript (приклад jQuery нижче)

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

3

Спробуйте додати пару атрибутів класу, скажімо, "парні" та "непарні", до змінних елементів списку, наприклад

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

У розділі <style> сторінки HTML або у пов'язаному аркуші стилів ви б визначили ці самі класи, вказавши бажані кольори фону:

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

Ви можете скористатися бібліотекою шаблонів у міру розвитку потреб, щоб забезпечити вам більшу гнучкість та зменшити набір тексту. Навіщо вводити всі ці елементи списку вручну?


2

Оскільки ви використовуєте стандартний HTML, вам потрібно буде визначити окремий клас та вручну встановити рядки для класів.


Це говорить і про те, що ви можете це робити автоматично за допомогою ефекту javascript після ефекту, як це прийнято. Я просто хотів дати вам +1 за правильну відповідь.
Карл

1

Це можна зробити, вказавши чергування назв класів у рядках. Я вважаю за краще використовувати, row0а row1це означає, що ви можете легко їх додати, якщо список будується програмно:

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

Іншим способом було б використання javascript. jQuery використовується в цьому прикладі:

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

Редагувати: Я не знаю, чому я наводив приклади, використовуючи рядки таблиць ... заміни trна liі tableна, ulі це стосується вашого прикладу


1

Якщо ви використовуєте рішення jQuery, воно буде працювати на IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Якщо ви використовуєте рішення CSS, воно не працюватиме на IE8:

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

0

Колір тла встановлюється на парне і непарне лі:

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

-9

Можна, жорстко кодуючи послідовність, так:

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

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

5
Це великий біль у попці, і він не працює в IE6 :(
nickf

@nickf Так. Я думаю, що "правильний" спосіб включає CSS3 і майже нічого цього не підтримує.
sblundy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.