2010-11-12 13 views
9

Mam UL zCSS ul li: unikanie podwójnego granic

border: 1px solid grey; 

zawiera kilka LIS z

border-bottom: 1px dotted grey; 

utrzymać pozycje poza wizualnie. Ale teraz ostatni LI ma przerywaną granicę i UL pełną granicę! To wygląda denerwująco. Jak mogę tego uniknąć? Czy istnieje sposób na umieszczenie granic pomiędzy LI zamiast po nich?

+0

Dokładny dupek: http://stackoverflow.com/questions/1329841/changing-css-for-last-li – Sam152

Odpowiedz

19

CSS3 selektorów można kierować :first-child lub :last-child, tak:

ul { 
    border: 1px solid grey; 
} 
li { 
    border-bottom: 1px dotted grey; 
} 
li:last-child { 
    border:none; 
} 

przykład roboczych: http://api.fatherstorm.com/test/4165384.php

+0

O mój Boże, to genialne. Dziękuję Ci. – MrBubbles

+3

Zauważ, że spowoduje to problemy w IE6, jeśli musisz wspierać ten kawałek bzdura – oezi

2

Użyj klasę lub selektor CSS3 :last-child usunąć ostatni <li> border-bottom

ul li:last-child { border-bottom:0; } 

lub

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li class="last">3</li> 
</ul> 

ul li.last { border-bottom:0; } 
1

Wystarczy dodać inną klasę do ostatniego li który określa się nie pokazują granica.

11

Gładka rozwiązaniem jest użycie plus (+) selector projektować listę:

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
</ul> 

Po prostu dodajesz the following css:

li + li { 
    border-top: 1px dotted grey; 
} 

Unikasz dodawania dodatkowego selektora i jesteś w stanie utrzymać kod w czystości. Chociaż w zależności od Twoich potrzeb możesz najpierw sprawdzić numer browser compatibilty.

+1

Rozwiązanie FatherStorm jest najczęstsze (i był moim własnym pierwszym instynktem), ale jest to bardziej eleganckie. – msanford

+2

Bardziej elegancki i działa w IE8, gdzie "ostatnie dziecko" nie. –