I'm trying to learn css, but experiencing some problems with it. How can I select every third block, except invicible
block from counting?
When I using div.col-12:nth-child(3n+3) {background:blue}
it doesn't work properly, counting invisible block as all other. I've tried to add :not([id="invisible"])
to it, but it doesn't work at all.
div.col-12:nth-child(3n+3) { background: blue }
<div class=parent> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div id="invisible"></div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div>
:nth-of-type
& :not()
Since OP can't modify HTML (dynamically rendered?) -- we can use the :not()
selector and a negative starting point for the :nth-of-type
count. That's the first ruleset below which almost works but the first .col-12
is blue. So the second ruleset below changes the first .col-12
back to white. The reason why :not()
is used again is because the :not(#invisible)
in the first ruleset has a very high specificity because an id is used -- adding .col-12
to second ruleset gives higher specificity than the first ruleset.
body > div > div:nth-of-type(3n-2):not(#invisible) { background: blue } body > div > div.col-12:first-of-type:not(#invisible) { background: white }
:nth-of-type
Change #invisible
into anything but a <div>
then use :nth-of-type
. nth-of-type
only considers tagName
s like div
, or section
, so by changing #invisible
to another tag you will exclude it. Also use the child combinators >
to "lock" it in. In your layout there's a lot of <div>
s so this:
div:nth-child(3n+3) //The +3 might be a reaction to the unexpected results?
Will consider all <div>
s that are children of anything. This on the other hand:
body > div > div:nth-of-type(3n)
narrows down possibilities. The direct descendant (or child) of <body>
is .parent
then only consider the children of .parent
. Now .block1
and .block2
are never considered (it doesn't affect your layout per say because of 3n
but it's best to consider it in the future).
.col-12 { outline: 3px dashed red } body>div>div:nth-of-type(3n) { background: blue }
<div class=parent> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <aside id="invisible"></aside> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> </div>
.col-12 { outline: 3px dashed red } body>div>div:nth-of-type(3n-2):not(#invisible) { background: blue } body>div>div.col-12:first-of-type:not(#invisible) { background: white }
<div class=parent> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div id="invisible"></div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> <div class="col-12"> <div class="block1"> <a class="link">link</a> </div> <div class="block2"> <p class="text">some text</p> </div> </div> </div>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.