基于类的 CSS 选择器

标签 css

我通常喜欢使用 CSS 选择器,但有一个具体情况我不明白,而且像 Can I combine :nth-child() or :nth-of-type() with an arbitrary selector? 这样的引用也不能帮助我解决这个问题。

假设这是我的代码:

.zero .one:nth-child(2) {
  color: red;
}
<div class="zero">
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>

<br>

<div class="zero">
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>

<br>

<div class="zero">
  <div>Bla bla bla</div>
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div>Okay!</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>

我选择 .zero .one:nth-child(2) 根据我的理解,.one 容器中具有类 .zero 的第二个子元素将被选中。但在这种情况下,它采用每个 <div class="one">Lol</div> 容器的第一个而不是第二个 .zero

问题是:如何选择每个 <div class="one">Lol</div> 容器的每隔一个 .zero

最佳答案

:nth-child(n) 在这里不会有任何帮助,并且据我所知 :nth-class(n) 不存在。

您可以做的是使用 ~ 选择器,并使用它两次来进行重置,无论结构如何:

示例

.zero .one~.one {/* look for any class one standing somewhere after class one */
  color: red;
}

.zero .one~.one~.one {/* now if we find a third one or more; lets reset it */
  color: initial;
}


/* only for layout demo purpose, not relevant for the question */
div[class]:before {
  content: 'My class is: ' attr(class);
  color: green;
  background: yellow;
  padding-inline: 0.5em;
  margin: inline-end:1em;
}

.zero {
  background: lightgray;
}

body {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(10em, 1fr));
  gap: 1em;
}
<div class="zero">
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>
<div class="zero">
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>
<div class="zero">
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="two">loL</div><!-- it can be no class or another in the way, does not matter -->
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>
<div class="zero">
  <div class="one">Lol</div>
  <div>Bla bla bla</div>
  <div>Bla bla bla</div>
  <div>Bla bla bla</div>
  <div>Bla bla bla</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
  <div class="one">Lol</div>
</div>

关于基于类的 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71743860/

相关文章:

html - Edge/Internet Explorer/Firefox 中的正文高度不是 100%

javascript - 在不同图片下方输入各种文字

html - 对齐嵌套表格宽度

css - 显示被用户代理样式表覆盖的属性

javascript - 来自包含的 div 中的意外 jquery 事件行为

jQuery 和 CSS 在 Chrome 和 Safari 中与 'margin: 0 auto;' 冲突

css - 垂直居中百分比

html - 使用媒体查询获得完美图像响应的正确方法是什么?

html - CSS 文本抖动 firefox

HTML/CSS——创建横幅/标题