风格每三个元素?

20 html css html5 css-selectors css3

如何使用纯CSS为每个第三个元素设置样式.

我见过这样的问题,但它们涉及到javascript.我想要一个简单的CSS解决方案.我知道我可以使用evenodd使用:nth-child:nth-child(third)不能正常工作:nth-child(3)

例:

<section>
  <div class="someclass"></div>             STYLE
  <div id="someId"></div>                   DON'T STYLE
  <div class="someotherclass"></div>        DON'T STYLE
  <div id="someotherId"></div>              STYLE
  <div class="someclass"></div>             DON'T STYLE
  <div id="someId"></div>                   DON'T STYLE
  <div class="someotherclass"></div>        STYLE
</section>
Run Code Online (Sandbox Code Playgroud)

这可能与CSS - 没有JavaScript或jQuery?

Jos*_*ier 52

纯CSS可以实现这一点.不需要JavaScript.

使用nth-child选择器.1

section > div:nth-child(3n+1) {
    background:red;
}
Run Code Online (Sandbox Code Playgroud)

其中'1'是样式开始的地方,3表示它应该为每个第三个元素设置样式.这里解释得更好.

这里有jsFiddle演示.


1 注意 - 正如其他人提到的那样,IE8并没有完全支持这一点.

  • @DerrickJackson您只需要修改小提琴即可:http://jsfiddle.net/eRzPB/1/ (7认同)
  • @DerrickJackson我不应该,因为JoshC已经为你和其他人提供了所有必要的信息,以便了解它是如何工作的. (3认同)
  • 作为对每个人的提醒,IE8或更低版本不支持nth-child(和last-child) (3认同)

Ind*_*ndy 8

IE支持通过库

如果它是你正在寻找的IE支持,有一个很棒的库叫做Selectivzr,可以在IE版本6-8上启用CSS3选择器.

Hack没有帮助IE,但是没有使用:nth-​​child

否则所有我能提供的是使用+相邻兄弟选择器的丑陋黑客(由CSS2标准定义,但在IE8或更低版本中默认不可用)

div {
    width: 40px;
    height: 40px;
    background-color: blue;
}

div + div,
div + div + div + div + div { width: 100px }

div + div + div + div,
div + div + div + div + div + div + div { width: 40px }
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

这种模式可以使用大多数CSS预编译器(即SASS)生成,但受到您希望拥有的元素数量的限制.

结论

如果您正在寻找的只是IE支持; 那么我强烈建议使用像Selectivzr这样的库.这将为您带来一些IE6-8的麻烦.

如果我有一个更好的解决方案的顿悟,我会发布.