【问题标题】:Difference between CSS 2 and CSS 3 selectorsCSS 2 和 CSS 3 选择器之间的区别
【发布时间】:2015-11-27 14:41:07
【问题描述】:

我对 CSS 2 和 CSS 3 选择器的功能有一些疑问。

  1. CSS 2 选择器是否强大到足以选择 DOM 树中的任何元素?

  2. 有什么 CSS 3 选择器可以做而 CSS 2 选择器不能做的事情吗?

  3. 理论上是否可以将任何 CSS 3 选择器转换为 CSS 2 选择器(尽管转换后的 CSS 2 选择器可能有点乏味)?

  4. 是否有任何工具可以将 CSS 3 转换为 CSS 2 选择器?

我问这个问题是因为我发现有一个很好的 CSS 3 选择器生成器(例如 superselector)但是有些工具只知道 CSS 2。

【问题讨论】:

  • 你能编辑你的 HTML 吗?只要您可以为元素添加 class 和 id 属性,就可以使用“CSS 2 选择器”获得相同的结果,但需要做一些额外的工作。
  • 但是在我可以为一个选定的元素添加属性之前,我必须首先通过 CSS 2 选择器来选择它。我不会手动编辑 HTML。
  • 这些问题毫无意义。
  • @sevenseacat 我的场景来自一些实际用例。通常,在使用现代浏览器时,我肯定会选择 CSS 3 选择器。但是,有时我会使用一些限制我只能使用 CSS 2 选择器的工具。所以我需要了解 CSS 2 的功能,看看我们是否可以使用它来选择网页中的任意元素。
  • @sevenseacat 我的问题 2 可能有点意义不大。我相信 CSS 3 必须比 CSS 2 更强大(否则为什么要新版本!)。不过,新版本可能只是为了让我们更方便地选择元素,并没有起到关键性的作用。也许我没有说得很好,但这就是我的观点。

标签: css css-selectors


【解决方案1】:
  1. 不,否则为什么会有 3 级?除非您询问像 * 选择器这样的东西,它确实匹配文档中的 any 元素,并且在 CSS2 之前不存在。

    如果您问是否可以构造选择器来匹配 any 类条件的元素,那么答案是否定的。例如,伪类代表文档树的抽象,它不能用其他简单的选择器来表达,但是 CSS2 附带了可以使用的a very limited selection of pseudo-classes,它当然不能代表你可能想到的所有可能的条件.第 3 级的大部分内容都包含新的伪类来准确解决这个问题,但同样,它们并没有考虑到所有可能的场景。

  2. 是的。见上文。

  3. 出于显而易见的原因,只是其中一些,但不是全部。

    例如,div:nth-child(4) 可以使用 :first-child 和适当数量的下一个兄弟选择器来复制:

    :first-child + * + * + div
    

    详情请参阅我对this question 的回复。

    但是,您不能将选择器 3 中引入的任何子字符串匹配属性选择器复制到 CSS2 中。您也不能使用 CSS2 选择器使用诸如 :nth-child(2n+1) 之类的公式来复制 :nth-child(),也不能在不对 DOM 做任何假设的情况下完全复制 :nth-of-type()。仅举几个例子。

  4. 我无法回答这个问题,但可能有人尝试制作转换器但由于我上面给出的原因而失败。

【讨论】:

  • 感谢您的精彩解释。也许我没有以足够精确的方式指定。在问题 1 中,我只想使用 CSS 2 选择器来选择任意 ONE 元素,而不是不同元素的组合。随着您对 :nth-child() 选择器的解释,我想我可以使用我的 CSS 2 受限工具在网页中选择大部分(如果不是全部)元素(仅一个元素)。
猜你喜欢
  • 2014-02-02
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2016-08-23
  • 2012-06-30
  • 2017-11-20
相关资源
最近更新 更多