CSS交替样式开始后由某个元素重置

时间:2014-11-26 14:51:12

标签: html css css3

我有一个页面,其中包含任意数量的后续section元素,我希望通过具有role="separator"属性的部分重置交替的背景颜色:

HTML代码

<main>
    <section></section>
    <section role="separator"></section>
    <section></section>
    <section></section>
    <section role="separator"></section>
    <section></section>
    <section></section>
    <section></section>
</main>

这基本上意味着section之后的每秒(奇数)section[role="separator"]应该获得不同的背景颜色。使用上面的例子,这是应该发生的事情:

  1. 白色(分隔符)
  2. 灰色
  3. 白色(分隔符)
  4. 灰色
  5. 使用以下CSS(但)可以轻松解决此问题:

    CSS代码

    section:not([role="separator"]) + section:not([role="separator"]) {
        background-color: #f7f7f7;
    }
    
    section:not([role="separator"]) + section:not([role="separator"]) + section:not([role="separator"]) {
        background-color: #fff;
    }
    

    ......但正如您所看到的,这引入了一个严重的限制因素。后来的第四个section:not([role="separator"])元素的背景与之前的背景不同。我当然可以释放 恶魔 并添加更多&#34;紧接着&#34;选择器,但你看到了它的位置。

    对于任意数量的后续非分隔符部分,我应该使用什么来解决上述问题?

    我很欣赏只有CSS(CSS3)的答案,如果可能的话。

1 个答案:

答案 0 :(得分:0)

如果您可以将DOM分离出去以拆分这些部分,您可以使用jquery来设置:even元素的样式。

例如

<main>
  <div class="sections">
    <section>1</section>
  </div>
  <section role="separator"></section>
  <div class="sections">
    <section>1</section>
    <section>2</section>
  </div>
  <section role="separator"></section>
  <div class="sections">
    <section>1</section>
    <section>2</section>
    <section>3</section>
  </div>
</main>

您可以使用选择器添加“奇怪”字样。分类到正确的元素。

$('.sections').find('section:odd').addClass('odd')

注意,这是基于零的,因此上面为每个元素添加一个类,其中包含偶数。

编辑:

正如sholanozie所说,你可以使用:

.sections section:nth-of-type(even) {
  background-color: gray;
}