สีพื้นหลังสำรองสำหรับรายการ


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
สิ่งนี้เรียกอีกอย่างว่า "เสือลอกลาย" และไม่ฉันไม่ได้ล้อเล่น
Jeff Atwood

คำตอบ:


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

คุณสามารถทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติเพิ่มเติมด้วยจาวาสคริปต์ (ตัวอย่าง 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 after effect เหมือนคำตอบที่ยอมรับกล่าว ฉันแค่อยากให้ +1 สำหรับคำตอบที่ถูกต้อง
Karl

1

คุณสามารถทำได้โดยระบุชื่อคลาสสลับกันบนแถว ฉันชอบใช้row0และrow1ซึ่งหมายความว่าคุณสามารถเพิ่มได้อย่างง่ายดายหากรายการถูกสร้างขึ้นโดยใช้โปรแกรม:

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

อีกวิธีหนึ่งคือการใช้จาวาสคริปต์ 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 soloution มันจะไม่ทำงานบน IE8:

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


-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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.