Màu nền thay thế cho các mục danh sách


100

Tôi có một danh sách và từng mục được liên kết, có cách nào để tôi có thể thay thế màu nền cho từng mục không?

<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
này còn được gọi là "con hổ vằn" và không Tôi không đùa
Jeff Atwood

Câu trả lời:


293

Làm thế nào về một số CSS3 đáng yêu?

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

@Adam C Bạn có thể đề xuất cách áp dụng cho chế độ xem danh sách động không? Khi tôi thử nó với chế độ xem danh sách động, nơi dữ liệu đến từ dịch vụ web, điều này không hoạt động!
SKT

2
Có ai có ví dụ về điều này hoạt động tốt với các danh sách lồng nhau không? Nghĩa là, màu nền của mục đầu tiên trong danh sách lồng nhau sẽ có màu đối lập với màu nền của mục danh sách ngay trước danh sách lồng nhau. Ngoài ra, màu nền của mục danh sách tiếp theo của danh sách mẹ đối lập với màu nền của mục danh sách cuối cùng trong danh sách lồng nhau.
LS

Người ta có thể bỏ đi câu lệnh đầu tiên để sử dụng màu nền hiện có.
xilef

52

Nếu bạn muốn làm điều này hoàn toàn trong CSS thì bạn sẽ có một lớp mà bạn chỉ định cho mỗi mục danh sách thay thế. Ví dụ

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

Nếu danh sách của bạn được tạo động, tác vụ này sẽ dễ dàng hơn nhiều.

Nếu bạn không muốn phải cập nhật nội dung này theo cách thủ công mỗi lần, bạn có thể sử dụng thư viện jQuery và áp dụng một kiểu luân phiên cho từng <li>mục trong danh sách của mình:

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

Và mã jQuery của bạn:

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

5

Bạn có thể đạt được điều này bằng cách thêm các lớp kiểu xen kẽ vào từng mục danh sách

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

Và sau đó tạo kiểu như

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

Bạn có thể tự động hóa thêm quá trình này bằng javascript (ví dụ jQuery bên dưới)

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

3

Hãy thử thêm một cặp thuộc tính lớp, chẳng hạn như 'chẵn' và 'lẻ', vào các phần tử danh sách xen kẽ, ví dụ:

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

Trong phần <style> của trang HTML hoặc trong một biểu định kiểu được liên kết, bạn sẽ xác định cùng các lớp đó, chỉ định màu nền mong muốn của bạn:

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

Bạn có thể muốn sử dụng thư viện mẫu khi nhu cầu của bạn phát triển để cung cấp cho bạn sự linh hoạt hơn và cắt giảm việc nhập. Tại sao phải nhập tất cả các phần tử danh sách đó bằng tay?


2

Vì bạn sử dụng HTML tiêu chuẩn, bạn sẽ cần phải xác định lớp riêng biệt và đặt thủ công các hàng cho các lớp.


Điều này và thực tế là bạn có thể làm điều đó tự động với javascript after effect như câu trả lời được chấp nhận đã nói. Tôi chỉ muốn cho bạn một +1 cho một câu trả lời đúng.
Karl

1

Bạn có thể làm điều đó bằng cách chỉ định tên lớp xen kẽ trên các hàng. Tôi thích sử dụng row0row1 , có nghĩa là bạn có thể dễ dàng thêm chúng vào, nếu danh sách đang được lập trình:

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

Một cách khác là sử dụng javascript. jQuery đang được sử dụng trong ví dụ này:

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

Chỉnh sửa: Tôi không biết tại sao tôi đã đưa ra các ví dụ bằng cách sử dụng các hàng trong bảng ... thay thế trbằng litablebằng ulvà nó áp dụng cho ví dụ của bạn


1

Nếu bạn sử dụng giải pháp jQuery, nó sẽ hoạt động trên IE8:

jQuery

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

CSS

.alternate {
background: black;
}

Nếu bạn sử dụng CSS soloution, nó sẽ không hoạt động trên IE8:

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

0

Đây là màu nền được đặt trên li chẵn và lẻ:

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

-9

Bạn có thể mã hóa cứng chuỗi, như sau:

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

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

5
Đó là một cơn đau lớn ở mông và nó không hoạt động trong IE6 :(
nickf

@nickf Vâng. Tôi nghĩ rằng cách "thích hợp" liên quan đến CSS3 và bên cạnh không có gì hỗ trợ điều đó.
sblundy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.