【问题标题】:How to view browser's calculated CSS specificity?如何查看浏览器计算的 CSS 特异性?
【发布时间】:2013-04-20 01:03:28
【问题描述】:

问候:我花了几天时间试图找到一种工具,该工具可以显示浏览器计算出的每个 CSS 规则的确切 CSS 特异性编号。我已经查看了许多在线资源,包括 Tools to see CSS specificity - 那里的链接讨论了被覆盖的类等,但我想查看应用特定 CSS 规则时浏览器计算和使用的确切特异性数。

为什么我需要查看准确的 CSS 特异性计算?
我无法克服浏览器使用基于该规则与元素的接近程度的 CSS 规则的某个问题,但我在它之前定义了另一个规则,该规则应该比浏览器应用的规则具有更高的特异性。我没有可以用来演示使用 jsfiddle 的简单代码,而且我尝试调试的代码太复杂而无法包含在小提琴中。

几乎每次搜索都会导致人们指向某种“CSS 特异性规则”或“理解 CSS 特异性”链接。我了解 CSS 特异性应该如何工作,广泛使用 Firebug 和 Chrome 开发人员工具,并且非常了解指向理解特异性规则的链接。 我的任务是尝试查看浏览器引擎在将一个 CSS 规则应用于另一个 CSS 规则时的想法! 由于它已经计算了此信息以决定哪个规则覆盖其他规则,因此它应该是可访问的信息,但我不知道怎么做?

我面临的问题的一个非常基本的例子:

.testClass1 .title, .testClass2 .testClass1 .title { corresponding CSS styles }
.testClass2 .title, .testClass1 .testClass2 .title { corresponding CSS styles }

或者可以这样编码......(在最终结果中没有任何不同。)

.testClass1 .title { corresponding CSS styles }     --- call it Rule 1
.testClass2 .testClass1 .title { corresponding CSS styles } --- call it Rule 2
.testClass2 .title { corresponding CSS styles }  --- call it Rule 3
.testClass1 .testClass2 .title { corresponding CSS styles }  --- call it Rule 4

HTML 结构看起来像这样......

<!-- delivers intended results -->
<div class="testClass1">
   <div class="title">Some Title</div>
</div>

<!-- Does not deliver intended results. 
  - I expected Rule 1 or Rule 2 to take effect, but Rule 3 gets
    applied because of its proximity to the actual HTML element. 
    i.e. rule 3 is defined later in CSS then rule 1 and 2. -->
<div class="testClass2">
  <div class="testClass1">
    <div class="title">Some Title</div>
  </div>
</div>

我认为调试此问题的最佳方法是查看浏览器的 CSS 特异性计算是什么,而不是我不得不假设某些规则并每次手动计算它。此外,浏览器在应用它时已经计算过了,所以我一直在寻找工具来查看浏览器对这些特异性规则的计算,但在 Firebug 或 Chrome 检查器中找不到任何方法。

还有其他人知道这件事吗?谁能给我指出一个可能存在的工具?我非常感谢您的帮助。谢谢!

编辑: 我试图拼凑一个小提琴,看看我是否可以重现“我正在努力解决的问题”来演示。我想,我很幸运 - 请参阅http://jsfiddle.net/smallworld/abvHC/1/。这个小提琴中的问题仍然太简单了,但有点代表我的挑战,其中类是动态分配的,所以我无法预测确切的顺序。小提琴中的示例 3 在某种程度上是我需要查看计算出的特异性的代表性案例。无论如何,我认为能够将您计算的数字与浏览器的计算进行比较会很棒。

另一个编辑: 虽然我仍然没有答案来查看浏览器对给定元素的特异性得分,但我认为 Faust 和其他人已经引导我找到了解决我所面临的原始问题的可能解决方案。请参阅下面的 cmets 线程。考虑到这个问题是关于能否查看浏览器的特异性分数,我不妨让这个问题保持开放 - 很可能的答案是目前没有可用的工具能够做到这一点。

【问题讨论】:

  • 开发者工具显示所有信息(实际数字除外)
  • 为什么不自己计算呢?您的具体情况是 0,2,00,3,00,2,00,3, 0 适当...它们不难计算,浏览器计算它们的方式与任何其他浏览器没有任何不同。规则 2 比规则 3 更具体,并且总是胜过它。如果您看到意想不到的结果,那么您在某处有其他样式或拼写错误。我保证浏览器没有应用基于“接近”的 CSS。尝试检查 Chrome 开发者工具以查看哪些 CSS 选择器与您的元素匹配,并确保您的 CSS 有效。
  • SLaks - 这个确切的数字是我正在寻找的,因为我的理解和浏览器的解释似乎不一致,所以我想了解我错过了什么......
  • @animuson:浏览器之间在计算具有大量元素的选择器的特异性方面存在差异。见stackoverflow.com/a/11934505/613004
  • 我知道这不能回答您的问题,但在您的小提琴中,您的第 3 个(共 5 个)案例与您的样式规则中的 每个 中的 3-classname 选择器匹配.因此,每个的特异性都是 0.3.0,第二条规则通过级联获胜。您可以通过颠倒 CSS 中样式规则的顺序来看到这一点。 -- 第三行变成绿色。

标签: css css-selectors firebug google-chrome-devtools css-specificity


【解决方案1】:

我一直在 Firefox 中使用 Firebug 插件。到目前为止,这对我有用。

【讨论】:

  • 这并没有(据我所知)在选择器上显示“计算的特异性”。它显示的只是应用的选择器。该问题涉及查看浏览器正在为选择器计算的实际计算值
  • 对,Firebug 还没有显示这个值。虽然有一个 issue 覆盖。
【解决方案2】:

在 Firefox 中的 inIDOMUtils API 中有一个 getSpecificity() function

不过,要使用此 API,您必须编写自己的 Firefox 扩展程序。这个was requested for Firebug,虽然Firebug is discontinued 现在支持Firefox DevTools,它也有一个feature request for this

【讨论】:

  • 塞巴斯蒂安,我确实在发布此问题之前查看了您提供的 Firebug 链接 - 认为这方面没有发生任何事情。此外,在看到您的回答中的萤火虫线程上的每个人似乎都感到困惑之后,我用具体的问题提出了我的问题。但是,我认为您与 getSpecificity() 的第一个链接提供了一个很好的答案,即在这个方向上有一些动作,但还没有扩展!感谢您找到并分享这些信息。我会接受这个作为答案。
  • Google 代码存档中的问题链接(您称为 'implements this')已失效。
  • Firebug 现已停产。所以我已经相应地更新了我的答案。谢谢你的提示!
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 2022-01-09
  • 2021-07-11
  • 2013-03-30
  • 2015-11-11
  • 2021-12-12
相关资源
最近更新 更多