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.


Aan de slag

Gerelateerde bronnen