How to show the first N elements of a block and hide the others in css?
I am trying to hide the first 3 elements having the class .row
inside the block .container
.
What I'm doing is hiding all the .row
first, and then I am trying to display the first 3 .row
by using .row:nth-child(-n+3)
jsfiddle here: http://jsfiddle.net/z8fMr/1/
.row {
display: none;
}
.row:nth-child(-n+3) {
display: block;
}
<div class="content">
<div class="notarow">I'm not a row and I must remain visible</div>
<div class="row">Row 1</div>
<div class="row">Row 2</div>
<div class="row">Row 3</div>
<div class="row">Row 4</div>
<div class="row">Row 5</div>
<div class="row">Row 6</div>
</div>
I have two problems here:
- Row 3 is not displayed, am I using nth-child in the wrong way?
- Is there a better practice than hiding everything and then creating a specific rule to display the n first elements that I want? Is there a way in css to just display the first 3
.row
and then hide all the other.row
?
Thanks.
Solution 1:
-
You have a
.notarow
as the first child, so you have to account for that in your:nth-child()
formula. Because of that.notarow
, your first.row
becomes the second child overall of the parent, so you have to count starting from the second to the fourth:.row:nth-child(-n+4) { display: block; }
Updated fiddle
.row { display: none; } .row:nth-child(-n+4) { display: block; }
<div class="content"> <div class="notarow">I'm not a row and I must remain visible</div> <div class="row">Row 1</div> <div class="row">Row 2</div> <div class="row">Row 3</div> <div class="row">Row 4</div> <div class="row">Row 5</div> <div class="row">Row 6</div> </div>
-
What you're doing is fine.
Solution 2:
You don't even need CSS3 selectors:
.row + .row + .row + .row {
display: none;
}
This should work even in IE7.
Updated fiddle