Альтернативные цвета фона для элементов списка


101

У меня есть список, и каждый элемент связан, есть ли способ изменить цвет фона для каждого элемента?

<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. Можете ли вы предложить способ применить это к динамическому списку? Когда я попробовал это с динамическим списком, когда данные поступали из веб-службы, это не сработало!
SKT

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:

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


@nickf Ага. Я думаю, что «правильный» способ предполагает использование CSS3, и почти ничто не поддерживает это.
sblundy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.