2012-08-12 17 views
28

Estoy tratando de ocultar los primeros 3 elementos con la clase .row dentro del bloque .container.¿Cómo mostrar los primeros N elementos de un bloque y ocultar los otros en CSS?

Lo que estoy haciendo está ocultando toda la .row primero, y luego estoy tratando de mostrar el primer 3 .row utilizando .row:nth-child(-n+3)

jsFiddle aquí: http://jsfiddle.net/z8fMr/1/

tengo dos problemas:

  1. La fila 3 no se muestra, ¿estoy usando nth-child de forma incorrecta?
  2. ¿Existe una mejor práctica que ocultar todo y luego crear una regla específica para mostrar los n primeros elementos que deseo? ¿Hay alguna manera en css para simplemente mostrar los primeros 3 .row y luego ocultar todos los demás .row?

Gracias.

+0

Lo haría con JS. –

Respuesta

45
  1. Usted tiene un .notarow como el primer hijo, así que hay que tener en cuenta que en la fórmula :nth-child(). Debido a que .notarow, su primera .row se convierte en la segunda posición del niño de los padres, por lo que tiene que contar a partir de la segunda a la cuarta:

    .row:nth-child(-n+4){ 
        display:block; 
    } 
    

    Updated fiddle

  2. Lo que estás haciendo está bien .

+0

Gracias por su muy clara explicación BoltClock. Pensé que (-n + 3) seleccionaría los primeros 3 .row cualquier elemento que haya antes. – Vincent

+0

¿También sabe si también hay una mejor práctica para lo que quiero hacer? Esconder todo y luego mostrar los primeros 3 elementos => ¿hay una mejor manera de mostrar los primeros N elementos solo en css? gracias – Vincent

+0

No parece haber una mejor manera. Usar ': nth-child()' de esta manera está bien siempre y cuando se acomode a la estructura real y sea lo suficientemente predecible. – BoltClock

19

Usted ni siquiera necesita selectores CSS3:

.row + .row + .row + .row { 
    display: none; 
} 

Esto debería funcionar incluso en IE7.
Updated fiddle

3

Además, al igual que la solución de Giovanni, algo como esto también podría funcionar.

.container > .row:nth-child(3) ~ .row { 
    /* this rule targets the rows after the 3rd .row */ 
    display: none; 
} 
Cuestiones relacionadas