Inleiding
De meeste HTML tooling stopt bij de boom. Aspose.HTML FOSS voor Python gaat een laag verder: het implementeert het CSS objectmodel, zodat een stylesheet niet alleen tekst is die je rond draagt — het neemt deel aan een echte cascade, en elk element kan je vertellen welke stijl het uiteindelijk krijgt.
Deze diepgaande duik behandelt de CSSOM-laag: stylesheets parseren met CSSStyleSheet, declaraties bewerken via CSSStyleDeclaration, en resultaten teruglezen met Element.get_computed_style() — inclusief hoe specificiteit, !important, en overerving elkaar beïnvloeden. De bibliotheek staat op PyPI als aspose-html-foss, is MIT-licentie, en pure Python (3.10+), wat het praktisch maakt voor stijlverificatie in testsuites en services waar een headless browser overbodig zou zijn.
Belangrijkste functies
Stylesheets parseren en koppelen
CSSStyleSheet.replace_sync() parseert stylesheet-tekst op de plaats; Document.attach_style_sheet() registreert het blad bij het document zodat het deelneemt aan de cascade. Bladen kunnen ook regel-voor-regel worden opgebouwd met insert_rule(), add_rule() en remove_rule(), of worden gecreëerd vanuit tekst met from_text():
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
Specificiteit beslist de winnaar
Wanneer meerdere regels hetzelfde element targeten, volgt de berekende waarde de selector-specificiteit. Een ID-selector (specificiteit 1,0,0) heeft voorrang op een class-selector (0,1,0):
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))
Inline declaraties en CSSStyleDeclaration
De style-eigenschap van elk element is een live CSSStyleDeclaration. Declaraties worden bewerkt met set_property() en geïnspecteerd met get_property_value(), get_property_priority() en item(). Inline-declaraties hebben specificiteit (1,0,0), dus ze overtreffen type- en class-regels uit auteurs-stylesheets:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Belangrijkheid heeft voorrang boven specificiteit
!important keert het gebruikelijke resultaat om: een auteursregel gemarkeerd met !important wint van een niet-belangrijke inline-declaratie, ongeacht de specificiteit. Prioriteiten kunnen ook programmatisch worden ingesteld met set_property_priority():
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red !important }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Erfenis en het inherit-keyword
Erfbare eigenschappen zoals color vloeien van ouder naar kind, tenzij het kind een eigen lokale waarde heeft — een lokale regel overschrijft altijd een geërfde regel. Het expliciete inherit-keyword kopieert de berekende waarde van de ouder, en bij een root-element zonder ouder valt het terug op de initiële waarde van de eigenschap:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
inline = el.style
inline.set_property("color", "inherit")
print(el.get_computed_style().get_property_value("color"))
Snelle start
Installeer vanaf PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Los een driewegconflict op — klasseregel vs. ID-regel vs. inline declaratie:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: green }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Open source & licenties
Aspose.HTML FOSS voor Python wordt gedistribueerd onder de MIT license — commercieel gebruik, wijziging en herdistributie zijn toegestaan. De broncode staat op GitHub en releases worden geleverd aan PyPI als aspose-html-foss.