style attribute css css-selectors

attribute - ¿Último hijo impar de CSS?



title css (4)

Otra alternativa:

li:last-child:not(:nth-child(odd))

Aquí hay un violín: http://jsfiddle.net/W72nR/

Tengo una lista desordenada, que puede contener un número par o impar de elementos. Estoy buscando una forma de CSS para eliminar el borde de las últimas 2 etiquetas de li si el número de li s es par. El pseudo-selector :last-child elimina el último independientemente.

li { float: left; border-bottom: 1px solid #000; } li:last-child{ border-bottom: none; }

Funciona para números impares de li s

+============================================+ + 1 | 2 + +--------------------------------------------+ + 3 | + +============================================+

Pero para los números pares, necesito quitar la parte inferior de la celda n. ° 3

+============================================+ + 1 | 2 + +--------------------------------------------+ + 3 | 4 + +--------------------- + +============================================+

Así que pensé que podría usar li:nth-last-child() pero no puedo entender cuál debería ser la ecuación para agarrar al último niño impar.

No es 2n+1 , 2n-1 , n-1 , o cualquier cosa que se me ocurra. Por favor ayuda.


n-last-child cuenta hacia atrás desde el último hijo, por lo que para agarrar el penúltimo, la expresión es:

li:nth-last-child(2)

Puede combinar pseudo-selectores, por lo tanto, para seleccionar el penúltimo niño, pero solo cuando es impar, use:

li:nth-last-child(2):nth-child(odd) {border-bottom: none;}

Y entonces, todo debe ser:

li:last-child, li:nth-last-child(2):nth-child(odd) {border-bottom: none;}

En respuesta a la pregunta de @ithil, así es como lo escribiría en SASS:

li &:last-child, &:nth-last-child(2):nth-child(odd) border-bottom: none

No es mucho más sencillo, ya que la selección del "segundo hijo impar" siempre requerirá el selector de "dos pasos".

En respuesta a la pregunta de @Caspert, puedes hacer esto arbitrariamente para muchos elementos últimos al agrupar más selectores (parece que debe haber algún patrón xn+y para hacerlo sin agrupar, pero estos patrones AFAIU solo funcionan contando hacia atrás desde el último elemento).

Para tres últimos elementos:

li:last-child, li:nth-last-child(2):nth-child(odd), li:nth-last-child(3):nth-child(odd) {border-bottom: none;}

Este es un lugar donde algo como SASS puede ayudar, generar los selectores para usted. Estructuraría esto como una clase de marcador de posición, extendería el elemento con él y establecería el número de columnas en una variable como esta:

$number-of-columns: 3 %no-border-on-last-row @for $i from 1 through $number-of-columns &:nth-last-child($i):nth-child(odd) border-bottom: none //Then, to use it in your layout, just extend: .column-grid-list li @extend %no-border-on-last-row


posiblemente:

li:nth-child(2n){border:1px dashed hotpink} li:nth-child(2n-2), li:last-child{border:none;}


puede usar el enésimo selector de niños:

li:nth-child(3) { border-bottom: none;} li:nth-child(4) {border-bottom: none;}

Sin embargo, dado que esto no es compatible con IE 8 ... simplemente debe establecer una clase para esos dos elementos li y usar especificidad para establecer el borde inferior en none.