【问题标题】:CSS :not([class*="hidden"]):nth-of-type(4n+1) not workingCSS :not([class*="hidden"]):nth-of-type(4n+1) 不工作
【发布时间】:2015-01-27 21:54:23
【问题描述】:

请运行 sn-p 看看我的问题是什么。我有一系列向左浮动的 div。在定义数量的 div 之后,我希望它们换行,在我的示例中,每 5 个 div 应该清除浮动,因此它从新行开始。到目前为止没有问题,当我有一些具有某个类的 div 时,这里是 class="hidden" 我不想在我的规则中计算,这就是我在这里排除它的原因:

.box:not([class*="hidden"]):nth-of-type(4n+1) {
    clear: left;
}

正如您在示例 sn-p 中看到的那样,第三个(隐藏的)div 仍被计入第 n 个类型规则,这会导致在 div 编号之后出现不需要的“换行符”。 4.

有人知道我在选择器中做错了什么吗?

Link to Fiddle

.box {
  background-color: #a00;
  border: 1px solid #000;
  color: #fff;
  float: left;
  height: 64px;
  margin: 10px;
  text-align: center;
  width: 64px;
}

.hidden {
  display: none;
}

.box:not([class*="hidden"]):nth-of-type(4n+1) {
  clear: left;
}
<div class="box">1</div>
<div class="box">2</div>
<div class="box hidden">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
<div class="box">8</div>
<div class="box">9</div>
<div class="box">10</div>
<div class="box">11</div>
<div class="box">12</div>
<div class="box">13</div>

【问题讨论】:

  • CSS 选择器无法按照您的想法工作,该选择器不会排除具有第 n 个类型计数的隐藏类的框......只是不要应用清除如果 4n+1 隐藏了类
  • .box:not([class*="hidden"]):nth-of-type(4n+1) 此处 :not 无法正常工作。使用开发工具检查 .box css 的应用
  • 我添加了一个小提琴。你会如何用纯 CSS 解决这个问题?
  • 仅使用 CSS OP 是不可能的
  • 与问题无关,但否定确实应该说:not(.hidden)而不是:not([class*="hidden"])

标签: css css-selectors


【解决方案1】:

选择器的.box:not() 部分与:nth-of-type() 无关。 :nth-of-type() 唯一考虑的是这些元素都是divs。您可以指定div:nth-of-type(4n+1),它会以完全相同的顺序匹配相同的元素(尽管没有属性否定),即使在同一父级中碰巧有任何其他div 元素不是.box

我对@9​​87654321@ 的回答详细解释了为什么这些选择器不能按您期望的方式工作,但要点是每个选择器都是独立运行的,而:nth-of-type() 恰好只关心元素类型。另请参阅 this answer 以获取图解示例。

由于当前 CSS 选择器的工作方式,无法使用纯 CSS 过滤掉这些元素;您将需要使用 JavaScript 来计算元素。

【讨论】:

  • 好吧,至少可以这么说,这令人失望。这有道理吗?还是只是为了简化浏览器公司的实施?我所描述的问题应该很常见,如果你必须使用 JS 来解决这个问题,它会显示出 CSS 3 的真正缺陷。
  • @connexo:Selectors 4 以.box:nth-child(4n+1 of :not(.hidden)) 的形式提出了一个解决方案,但我不知道它是否只是在起草 Selectors 4 时才添加的,或者是为 Selectors 3 提出的,但是由于实施困难而推迟。
  • 也许我应该尝试使用弹性盒子。我仍然需要为旧浏览器创建一个后备解决方案。即使我这样做了,对于没有可用 JS 的旧浏览器仍然没有解决方案,对吧?
  • 可能不会,不幸的是,这就是你必须做出妥协的地方。
  • 20 年的 CSS 开发,仍然没有像这样简单的东西的有效解决方案...... :(
猜你喜欢
  • 1970-01-01
  • 2012-08-25
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2016-05-19
  • 1970-01-01
相关资源
最近更新 更多