2010-11-12 16 views
9

Ich habe eine UL mitCSS ul li: Vermeidung von Doppel Grenzen

border: 1px solid grey; 

es enthält mehrere LIs mit

border-bottom: 1px dotted grey; 

die Elemente auseinander zu halten visuell. Aber jetzt hat der letzte LI die gepunktete Grenze und die UL-Grenze! Das sieht nervig aus. Wie kann ich das vermeiden? Gibt es eine Möglichkeit, Grenzen zwischen LIs zu setzen statt ihnen nachzugehen?

+0

Genaue Dupe: http://StackOverflow.com/Questions/1329841/Schwing-Css-for-Last-Li – Sam152

Antwort

19

CSS3 Selektoren können :first-child oder :last-child, wie dieses Ziel:

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

Ein Arbeitsbeispiel: http://api.fatherstorm.com/test/4165384.php

+0

Oh mein Gott, das ist brilliant. Vielen Dank. – MrBubbles

+3

beachten Sie, dass dies Probleme in IE6 verursachen wird, wenn Sie dieses Stück Mist unterstützen müssen – oezi

2

eine Klasse verwenden oder den CSS3 Selektor :last-child die letzten <li> border-bottom

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

oder

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

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

nur fügt eine andere Klasse die letzten li zu entfernen, die eine nicht zeigen angibt Rand.

11

Eine glatte Lösung ist, die plus (+) selector zu verwenden, um die Liste zu ART:

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

Sie fügen einfach :

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

Sie vermeiden das Hinzufügen eines zusätzlichen Selektors und können den Code sauberer halten. Abhängig von Ihren Bedürfnissen möchten Sie vielleicht zuerst browser compatibilty überprüfen.

+1

FatherStorms Lösung ist die häufigste (und war mein erster Instinkt), aber das ist eleganter. – msanford

+2

Eleganter und funktioniert im IE8, wo 'last-child' nicht funktioniert. –