Liste öğeleri için alternatif arka plan renkleri


101

Bir listem var ve her öğe bağlantılı, her öğe için arka plan renklerini değiştirebilmemin bir yolu var mı?

<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
bu aynı zamanda "kaplan çizgisi" olarak da bilinir ve hayır şaka yapmıyorum
Jeff Atwood

Yanıtlar:


293

Güzel bir CSS3'e ne dersiniz?

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

@Adam C Bunun dinamik liste görünümü için geçerli olması için bir yol önerebilir misiniz? Verilerin web hizmetinden geldiği dinamik liste görünümü ile denediğimde bu işe yaramadı!
02'de SKT

2
İç içe geçmiş listelerde işe yarayan bir örneği olan var mı? Yani, iç içe geçmiş listedeki ilk öğenin arka plan rengi, iç içe geçmiş listeden hemen önceki liste öğesinin arka plan renginin zıt rengine sahip olacaktır. Ayrıca, üst listenin sonraki liste öğesinin arka plan rengi, iç içe listedeki son liste öğesinin arka plan renginin tersidir.
LS

Mevcut arka plan renginin kullanılması için ilk ifade atlanabilir.
xilef

52

Bunu tamamen CSS'de yapmak istiyorsanız, her bir alternatif liste öğesine atayacağınız bir sınıfınız olur. Örneğin

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

Listeniz dinamik olarak oluşturulmuşsa, bu görev çok daha kolay olacaktır.

Bu içeriği her seferinde manuel olarak güncellemek zorunda kalmak istemiyorsanız, jQuery kitaplığını kullanabilir ve <li>listenizdeki her öğeye dönüşümlü olarak bir stil uygulayabilirsiniz :

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

Ve jQuery kodunuz:

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

5

Her liste öğesine alternatif stil sınıfları ekleyerek bunu başarabilirsiniz.

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

Ve sonra onu şöyle şekillendir

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

Bu işlemi javascript ile daha da otomatik hale getirebilirsiniz (aşağıdaki jQuery örneği)

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

3

Alternatif liste öğelerine "çift" ve "tek" gibi bir çift sınıf özelliği eklemeyi deneyin, ör.

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

HTML sayfasının bir <style> bölümünde veya bağlantılı bir stil sayfasında, aynı sınıfları, istediğiniz arka plan renklerini belirterek tanımlarsınız:

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

Size daha fazla esneklik sağlamak ve yazmayı azaltmak için ihtiyaçlarınız geliştikçe bir şablon kitaplığı kullanmak isteyebilirsiniz. Neden tüm bu liste öğelerini elle yazasınız?


2

Standart HTML kullandığınız için, sınıflar için ayrı bir sınıf tanımlamanız ve satırları sınıflara manuel olarak ayarlamanız gerekecektir.


Bu ve kabul edilen cevabın söylediği gibi bir etkiden sonra bir javascript ile otomatik olarak yapabileceğiniz gerçeği. Doğru cevap için sana +1 vermek istedim.
Karl

1

Satırlarda alternatif sınıf isimleri belirleyerek bunu yapabilirsiniz. Ben row0ve kullanmayı tercih ederim row1, bu da liste programlı olarak oluşturuluyorsa bunları kolayca ekleyebileceğiniz anlamına gelir:

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

Başka bir yol da javascript kullanmaktır. Bu örnekte jQuery kullanılmaktadır:

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

Düzenleme: Neden tablo satırlarını kullanarak örnekler verdiğimi bilmiyorum ... trile live tableile değiştirin ve ulörneğiniz için geçerlidir


1

JQuery çözümünü kullanırsanız, IE8 üzerinde çalışacaktır :

jQuery

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

CSS

.alternate {
background: black;
}

CSS çözümünü kullanırsanız, IE8 üzerinde çalışmayacaktır :

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

0

Bu, çift ve tek li için arka plan rengidir:

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

-9

Sıralamayı kodlayarak yapabilirsiniz:

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

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

5
Bu çok büyük bir ağrı ve
IE6'da

@nickf Evet. Bence "uygun" yol CSS3'ü içerir ve hiçbir şeyin yanında bunu desteklemez.
sblundy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.