【问题标题】:css3 nth of type restricted to class [duplicate]css3第n个类型限制为类[重复]
【发布时间】:2012-06-10 22:00:34
【问题描述】:

有没有办法将 css3 的 nth-of-type 限制为一个类?我有一个动态数量的section 元素,它们具有不同的类来指定它们的布局需求。我想每第三个.module 抓取一次,但似乎nth-of-type 查找类元素类型,然后计算类型。相反,我想将其限制为仅.modules。

谢谢!

JSFiddle 演示:http://jsfiddle.net/danielredwood/e2BAq/1/

HTML:

<section class="featured video">
    <h1>VIDEO</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO (3)</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO</h1>
</section>
<section class="featured module">
    <h1>NOT A VIDEO (6)</h1>
</section>

​CSS:

.featured {
  width:31%;
  margin:0 0 20px 0;
  padding:0 3.5% 2em 0;
  float:left;
  background:#ccc;
}
  .featured.module:nth-of-type(3n+3) {
    padding-right:0;
    background:red;
  }
  .featured.video {
    width:auto;
    padding:0 0 2em 0;
    float:none;
  }​

【问题讨论】:

  • :nth-of-type() 是伪类,不是伪元素。

标签: css css-selectors pseudo-class


【解决方案1】:

不幸的是,没有办法(至少我不知道)选择一个类的nth-of-type,因为nth-of-class 不存在。您可能必须手动为每三个 .module 添加一个新类。

【讨论】:

  • 无法选择一个类的:nth-of-type(),因为:nth-of-type() 只选择其类型的第n个孩子。另见stackoverflow.com/questions/6447045/…
  • nth-of-type 的行为是如此出乎意料。 .thing:nth-of-type(1) 实际上是 div.thing:nth-of-type(1) 所以如果你没有在你的选择器中包含这个元素,那会很混乱。如果您认为这并不出人意料,那么为什么会在开发人员中引起如此多的困惑?
  • @Dominic Watson:我认为这里的问题是大多数作者不熟悉术语“元素类型”,选择器使用它来代替 HTML/XML 特定的术语“标签”姓名”。这一点在选择器级别 4 中有所澄清,但不是很多。
  • 以我的拙见,这非常可悲且不直观。应该是匹配选择器的第 n 个实体,而不仅仅是标签名称。不幸的是,CSS 限制。
【解决方案2】:

看来你真正想要的是css4 :nth-match selector,但大多数浏览器还没有真正支持它,所以目前唯一的方法是使用javascript

$(".featured.module").filter(function(index, element){
    return index % 3 == 2;
}).addClass("third");

http://jsfiddle.net/w3af16dj/

【讨论】:

  • 为什么将element 作为参数传递给函数?没用过
  • 因为我认为它对 SO 读者来说是有用的参考,所以当我写这个答案时,我必须检查文档以记住哪个参数先出现。我还假设有些人会修改代码。
  • 不知道谁会对此投反对票,提供当前答案和(仍然)未来答案。考虑到这一点,为了节省任何人的精力,2017 年的 Chrome 仍然不支持 nth-match。无需为我检查其他浏览器。
  • 在 2017 年底附近仍然有用 - 我想替换 li:class:nth-match(4n+1) 并且我将上面的函数更改为 return index % 4 == 0;谢谢你的小提琴,所以我可以玩弄它!
  • @RegularJoe 猜测它被否决了,因为元素和索引按照通常习惯的顺序交换了......但它有效:D
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 2020-01-10
  • 2016-10-23
  • 2011-09-20
相关资源
最近更新 更多