2012-08-12 23 views
28

私はブロック.containerの中にクラス.rowを持つ最初の3つの要素を隠そうとしています。ブロックの最初のN要素を表示し、cssで他の要素を非表示にするにはどうすればよいですか?

私は何をやっていることはまず.row隠れている、そして私はここに.row:nth-child(-n+3)

jsfiddle使用して最初の3 .rowを表示しようとしています:http://jsfiddle.net/z8fMr/1/

を私はここで二つの問題があります。

  1. 行3は表示されません。間違った方法でnth-childを使用していますか?
  2. すべてを隠してから、必要なn個の最初の要素を表示する特定のルールを作成するよりも良い方法はありますか?最初の3つの.rowを表示し、次に他のすべてを隠す方法がCSSにありますか.row

ありがとうございます。

+0

JSでこれを行うだけです。 –

答えて

45
  1. あなたは最初の子として.notarowを持っているので、あなたの:nth-child()式で、そのために考慮しなければなりません。あなたは第二から第四に開始カウントする必要がありますのでそのため.notarowで、あなたの最初の.rowは、親の2番目の子、全体次のようになります。

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

    Updated fiddle

  2. 何をやっている罰金です。

+0

あなたの非常に明確な説明BoltClockをありがとう。私は(-n + 3)が以前にあった要素を最初に3つ選択すると考えました。 – Vincent

+0

また、私がしたいことのためのベストプラクティスがあるかどうかも知っていますか?すべてを隠してから最初の3つの要素を表示する=> CSSで最初のN個の要素だけを表示するには良い方法がありますか?ありがとう – Vincent

+0

良い方法ではないようです。このように ':nth-​​child()'を使うことは、実際の構造に適応し、十分に予測できる限り、問題ありません。 – BoltClock

19

あなたも、CSS3セレクタを必要としない:

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

これでもIE7で動作するはずです。
Updated fiddle

3

また、Giovanniのソリューションと同様に、このようなことも可能です。

.container > .row:nth-child(3) ~ .row { 
    /* this rule targets the rows after the 3rd .row */ 
    display: none; 
} 
関連する問題