【问题标题】:Can't use children with :not pseudo selector不能使用带有 :not 伪选择器的子级
【发布时间】:2016-10-29 11:35:16
【问题描述】:

我在使用 :not 的一些相对简单的 CSS 选择器时遇到了问题。即,以下选择器给了我一个错误:

a:not(.ebook_document *)

我正在尝试获取所有不是 ebook_document 类元素的子元素的 <a> 元素。这也失败了:

a:not(.ebook_document > *)

还有这个:

a:not(.ebook_document, *)

将选择器单独放置,而不是放在:not 部分中可以正常工作。我做错了什么?

【问题讨论】:

  • :不仅需要一个简单的选择器。另外,developer.mozilla.org/en/docs/Web/CSS/:not - "此选择器仅适用于一个元素;您不能使用它来排除所有祖先。例如,body :not(table) a 仍将适用于表内的链接,因为 将匹配选择器的 :not() 部分。" 使用 :not 无法实现您想要的。
  • @CBroe 好的,这回答了我的问题。谢谢。

标签: html css css-selectors


【解决方案1】:

: 不仅接受simple 选择器。 (目前,CSS 4 将其扩展为 selector list。)

另外,https://developer.mozilla.org/en/docs/Web/CSS/:not -

这个选择器只适用于一个元素;你不能用它来排除所有的祖先。例如,body :not(table) a 仍然适用于表内的链接,因为它将与选择器的 :not() 部分匹配。”

使用 :not 无法实现您想要的。

你只能反过来——格式化所有“正常”链接,然后使用.ebook_document a { ... }为目标元素内的链接应用不同的格式

因此,这意味着您可能需要再次为这些链接覆盖您不喜欢的样式,而不是一开始就不将样式应用于这些链接。

(或者使用initial/all 来实际重置样式,但浏览器对此仍然缺乏AFAIK 支持。)

【讨论】:

  • 谢谢。我最终做的只是找到所有 <a> 元素并使用 javascript 检查它们的祖先,因为性能对我正在做的事情根本不重要。
【解决方案2】:

嗯,它不应该只是 a:not(.ebook_document) 吗?我没有测试它,但它似乎应该引用所有没有 .ebook_document 标签的 a 标签。

【讨论】:

  • 我想要所有不是 .ebook_document 子级的标签,即使它们自己没有 .ebook_document 类。
猜你喜欢
相关资源
最近更新 更多
热门标签