CSS div交替色


68

我正在尝试在网站上对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;
}

小提琴

我本以为已经在小提琴中的代码将基本上忽略标头并继续进行条带化,但似乎将标头视为子级

Answers:


120

不要使用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
请注意,此“继续”从头到尾一直在计数;如果要“重置”计数器(例如,使标题后的第一行始终为白色),则需要使用Jezen的解决方案。
Eamon Nerbonne

@ j08691我是否可以知道为什么最好使用nth-of-type而不是nth-child?只是好奇。
Musikero31 '18

1
@ Musikero31因为在此问题中,nth-child将对divh3元素进行计数因为它们都是父div容器的子代。通过nth-of-type在选择器中的div上使用,您可以有效地滤除h3元素。
j08691


6

最简单的解决方案当然就是包装要分割的元素。

您更新的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;}

还请记住,如果浏览器支持对您很重要,则可能需要为斑马线服务器端生成其他类。


如果他想添加更多内容或将其用于注释系统以使其更易于查看单独的注释,则此方法效率不高...他所希望的应该是动态的
Ilan Biala 2013年

没有理由为什么这不可能是动态的。
Jezen Thomas

用容器包装元素并将CSS应用于该容器的类效率不高,而不是第n个子方法。
Ilan Biala

你他妈在说什么?首先,您断言我的方法不是动态的,这显然是错误的;现在您说我的方法效率较低。从技术上讲,这可能是正确的,也可能不是正确的,但是在任何情况下,它的规模都很小,几乎没有什么意义。
Jezen Thomas

您是说要手动包装其他所有包装,如果他想将此包装用于具有三件以上的东西并且可能扩展的话,那将是完全无效的,这是不可能的。我不明白您为什么不同意...
Ilan Biala
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.