Why do nth-of-type/nth-child selectors have no effect on nested elements?
P粉237689596
2023-08-24 16:07:18
<p>I'm trying to change the style of an odd number of divs nested within one div. For some reason, when <code>nth-of-type(odd)</code> is nested inside another div, it affects all divs. Here is my code for normal divs and an odd number of divs: </p>
<p>
<pre class="brush:css;toolbar:false;">.video-entry-summary {
width: 214px;
height: 210px;
margin-left: 10px;
float: left;
position: relative;
overflow: hidden;
border: 1px solid black;
}
.video-entry-summary:nth-of-type(odd) {
width: 214px;
height: 210px;
margin-left: 0px;
float: left;
position: relative;
overflow: hidden;
border: 1px solid black;
background: #ccc;
}</pre>
<pre class="brush:html;toolbar:false;"><div id="post-501" class="post-501 post type-post status-publish format-standard hentry category-moto-dz- films tag-news-sub-2">
<div class="video-entry-summary">
video 1
</div>
</div>
<div id="post-240" class="post-240 post type-post status-publish format-standard hentry category-videos">
<div class="video-entry-summary">
video 2
</div>
</div>
<div id="post-232" class="post-232 post type-post status-publish format-standard hentry category-videos">
<div class="video-entry-summary">
video 3
</div>
</div>
<div id="post-223" class="post-223 post type-post status-publish format-standard hentry category-videos">
<div class="video-entry-summary">
video 4
</div>
</div></pre>
</p>
<p>For some reason, <code>nth-of-type</code> doesn't work when nested inside a div, but does work when they are not nested inside any div. </p>
<p><strong>Working version when not nested within a div: </strong></p>
<p>
<pre class="brush:css;toolbar:false;">.video-entry-summary {
width: 214px;
height: 210px;
margin-left: 10px;
float: left;
position: relative;
overflow: hidden;
border: 1px solid black;
}
.video-entry-summary:nth-of-type(odd) {
width: 214px;
height: 210px;
margin-left: 0px;
float: left;
position: relative;
overflow: hidden;
border: 1px solid black;
background: #ccc;
}</pre>
<pre class="brush:html;toolbar:false;"><div class="video-entry-summary">
video 1
</div>
<div class="video-entry-summary">
video 2
</div>
<div class="video-entry-summary">
video 3
</div>
<div class="video-entry-summary">
video 4
</div></pre>
</p>
<p>How can I make the initial code the same as above? </p>
:nth-of-type()
is similar to:nth-child()
, they must come from the same parent element. If you needdiv
for these wrappers, use:nth-of-type()
on these wrappers:If all sibling elements are
.post
, please use:nth-child()
to avoid conflicts with:nth The true meaning of -of-type()
Confusion: