【问题标题】:How to generate the "computed" CSS for an arbitrary HTML code snippet如何为任意 HTML 代码片段生成“计算的”CSS
【发布时间】:2010-03-03 23:00:22
【问题描述】:

我正在着手一个项目,以便能够获取任意 HTML sn-p(例如,<div></div> 块中的所有代码)并生成在空白页面上呈现 sn-p 所需的最少 CSS,同时保持它在原始网页上具有相同的视觉样式。我的感觉是,这个功能的所有繁重工作都可以在来自开源项目的各种库和/或代码中找到,我希望最大限度地利用这项工作。我的第一个冲动是获取 Firebug 的源代码,看看如何利用与“计算”选项卡相关的代码。向 StackOverflow 社区寻求有关此开发的其他地方和/或方法的见解。很高兴考虑 C、C++、Python、Perl、PHP 或 Javascript 中的任何资源。谢谢!

(更新:2010 年 3 月 4 日上午 8 点)

从下面的 Sinan 代码 sn-p 中,我看到有一种标准方法可以计算 INDIVIDUAL 元素的 CSS。然而,完整的问题是计算整个 sn-p 的 CSS - 即有效地计算一个最小的样式表,该样式表正确地适应整个 DOM 子树(选定的根元素和所有子元素)的样式。该算法的开始可能是遍历子树并聚合所有单个元素的 CSS,但这将有效地忽略 CSS 级联规则。想法?

【问题讨论】:

  • 你可以遍历嵌套的对象,用 JS 或 Jquery 没什么难的。

标签: javascript css parsing firebug


【解决方案1】:

Quirksmode 可能会对您有所帮助,

http://www.quirksmode.org/dom/getstyles.html

思南。


编辑:

这对我来说很有趣,我做了一个基本的尝试(有一些jquery 帮助)。

更重要的是它工作并提供计算样式:)

所以这里是一个获取body元素计算样式的sn-p:

JS:

$.each(window.getComputedStyle(document.getElementsByTagName('body')[0],''),
    function(k,v){
        console.log(v + ' : ' +$('body').css(v));
});

输出:

...
font-weight : 400
height : 608px
left : 0px
letter-spacing : normal
line-height : 13.8333px
...

【讨论】:

  • 感谢 Sinan - 该链接肯定有助于改进基本算法以提高跨浏览器兼容性。不过,我的问题是围绕核心处理——即 HTML/CSS 解析、标准 CSS 规则的应用以及将生成的树修剪为最小集合。
  • Sinan - 你的代码 sn-p 是一个有用的开始 - 谢谢!有关更多信息,请参阅我对上面主要帖子的更新。
  • 不客气,如果你把我写的放在另一个循环中(比如$('#my_selected_div *').each())你就能得到你需要的。
  • Sinan - 仔细阅读我的更新,尤其是最后一行回复:“但这实际上会忽略 CSS 级联规则”。树中所有元素的所有规则的简单聚合与实现整个树样式的样式表不同。我相信这是一个更复杂的问题。它可能会为每个元素计算 CSS,然后为元素添加一个唯一的类选择器,将其与计算的 CSS 绑定,但生成的样式表会快速增长,因为每个单个元素都会有效地拥有自己的完整 CSS 定义。
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 2015-07-09
  • 2023-03-09
  • 2015-02-11
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多