2010-11-12 21 views
9

Tengo un UL conCSS ul li: Evitar bordes dobles

border: 1px solid grey; 

que contiene varios lis con

border-bottom: 1px dotted grey; 

para mantener los elementos separados visualmente. ¡Pero ahora el último LI tiene el borde punteado y el borde sólido UL! Esto parece molesto ¿Cómo puedo evitar eso? ¿Hay alguna manera de poner fronteras entre LI en lugar de posponerlas?

+0

Exact Dupe: http://stackoverflow.com/questions/1329841/changing-css-for-last-li – Sam152

Respuesta

19

selectores CSS3 pueden orientar :first-child o :last-child, como este:

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

Un ejemplo de trabajo: http://api.fatherstorm.com/test/4165384.php

+0

Oh, Dios mío, eso es brillante. Gracias. – MrBubbles

+3

tenga en cuenta que esto causará problemas en IE6 si tiene que soportar esta mierda – oezi

2

utilizar una clase o el selector CSS3 :last-child para eliminar el último <li> border-bottom

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

o

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

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

Sólo tiene que añadir una clase diferente a la última li que especifica que no muestran una frontera.

11

Una solución suave es utilizar el plus (+) selector el estilo de la lista:

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

Usted acaba de agregar the following css:

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

Evita agregar un selector adicional y puede mantener el código más limpio. Aunque, según sus necesidades, es posible que desee verificar browser compatibilty primero.

+1

La solución de FatherStorm es la más común (y fue mi primer instinto), pero esto es más elegante. – msanford

+2

Más elegante y funciona en IE8 donde 'last-child' no. –

Cuestiones relacionadas