如何在 Python 中使用 CSSOM
Aspose.HTML FOSS for Python 实现了 CSS 对象模型:样式表解析为实时规则对象,附加到文档,并通过真实的层叠进行解析。此指南为元素设置样式并读取计算结果,使用 pip 进行安装。
分步指南
步骤 1:安装软件包
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .步骤 2:导入所需类
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet步骤 3:构建已样式化的元素
创建一个文档和一个具有类和 id 的元素——两者都会参与选择器匹配:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)步骤 4:解析并附加样式表
replace_sync() 解析样式表文本;attach_style_sheet() 将其注册到文档中:
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)步骤 5:读取计算样式
ID 选择器(特异性 1,0,0)优先于类选择器(0,1,0),因此蓝色获胜:
style = el.get_computed_style()
print(style.get_property_value("color"))常见问题及解决方案
计算后的值忽略了我的样式表。 样式表必须通过 Document.attach_style_sheet() before get_computed_style() 被称为。
内联样式会输给样式表规则。 标记为作者规则的 !important 优先于非重要的内联声明;使用以下方式检查优先级: get_property_priority().
两个具有相同特异性的规则会产生意想不到的胜者。 后出现的规则在相同特异性时获胜——规则在样式表中的顺序很重要。
常见问题
如何以编程方式设置内联样式?
通过元素的 style 声明:将其赋给变量,然后对其调用 set_property()。
get_computed_style 返回什么对象?
一个 ComputedStyleDeclaration;使用 get_property_value() 读取其值。
媒体、关键帧和 font-face 规则有被建模吗?
是的 — 已解析的表格包含带类型的规则,包括 CSSMediaRule、CSSKeyframesRule 和 CSSFontFaceRule,位于 CSSRuleList 中。