Чередующийся цвет CSS div
Я пытаюсь использовать zebra strip для своих div на моем веб-сайте, звучит достаточно просто, однако я обнаружил, что когда я добавлял заголовок между строками моих div, он, кажется, подсчитывал заголовок в нечетном/четком стиле
HTML
<div class="container">
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
</div>
CSS
.container {
width:600px;
margin:0 auto;
}
.row {
line-height:24pt;
border: solid 1px black;
}
.row:nth-child(odd) {
background: #e0e0e0;
}
h3 {
line-height:36pt;
font-weight:bold;
color:blue;
}
fiddle
Я бы подумал, что код уже в скрипке будет в основном игнорировать заголовок и переносить полоса, но кажется, что он рассматривает заголовок как дочерний
Ответы
Ответ 1
Не используйте nth-child, используйте nth-of-type
div.container > div:nth-of-type(odd) {
background: #e0e0e0;
}
.container {
width: 600px;
margin: 0 auto;
}
.row {
line-height: 24pt;
border: solid 1px black;
}
div.container>div:nth-of-type(odd) {
background: #e0e0e0;
}
h3 {
line-height: 36pt;
font-weight: bold;
color: blue;
}
<div class="container">
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<h3>Title</h3>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
</div>
Ответ 2
Вероятно, вы хотите совместить тип, а не дочерний.
Использование: nth-of-type, например
.row:nth-of-type(odd) {
background: #e0e0e0;
}
Ответ 3
Самое простое решение - это, конечно, просто обернуть элементы, которые вы хотите полосатыми.
Обновленный jsFiddle.
HTML
<div class="container">
<h3>Title</h3>
<div class="zebra">
<div class="row">Content</div>
<div class="row">Content</div>
</div>
<h3>Title</h3>
<div class="zebra">
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
</div>
<h3>Title</h3>
<div class="zebra">
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
<div class="row">Content</div>
</div>
</div>
CSS
.row:nth-child(odd) {background: #e0e0e0;}
Помните также, что если поддержка браузера важна для вас, вы можете захотеть создать дополнительные классы для серверной части зебры.