如何使用PHP计算DOM节点的有效CSS


How to calculate effective CSS for a DOM node using PHP

给定一个HTML和一个CSS文件,我如何计算哪些样式应用于节点?样式可以直接应用(例如#bar)或间接应用(例如#foo li)

由于应用的CSS取决于节点在树中的位置(例如#foo>li仅适用于tagNameli的#foo的直系后代),因此必须首先将CSS中的每个规则与DOM匹配,然后为每个节点计算结果CSS,同时考虑到每个选择器的权重。我不确定计算CSS权重的确切公式,但它有点像number of #id selectors*100+number of .class selectors*10+number of tag selectors。当然,您必须注意内联样式和!同样重要。

对于CSS到DOM节点的映射,您可以使用类似phpQuery或php选择器的查询引擎。

我已经编写了概念验证脚本php有效css,它说明了第一步(将css映射到受每个规则影响的DOM节点)

您实际上可以读取计算的样式,而不是计算它们。使用Javascript很容易做到这一点。使用PHP,您可以使用phantomJS。这里有一个现成的咖啡脚本,用于转储所有元素的计算样式:https://gist.github.com/AndrewO/1841191

还有一个PHP包装器,用于在命令行上执行phantomJS

https://github.com/jonnnnyw/php-phantomjs

希望这能有所帮助。