给定一个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
希望这能有所帮助。