Introduktion

De flesta HTML-verktyg stannar vid trädet. Aspose.HTML FOSS för Python går ett lager längre: den implementerar CSS-objektmodellen, så en stilmall är inte bara text du bär med dig — den deltar i en riktig kaskad, och varje element kan berätta vilken stil det faktiskt slutar med.

Denna djupdykning täcker CSSOM-lagret: parsning av stilmallar med CSSStyleSheet, redigering av deklarationer via CSSStyleDeclaration, och läsning av resultat med Element.get_computed_style() — inklusive hur specifitet, !important, och arv samverkar. Biblioteket finns på PyPI som aspose-html-foss, är licensierat under MIT och är ren Python (3.10+), vilket gör det praktiskt för stilverifiering i testsviter och tjänster där en headless-browser skulle vara överdrivet.


Nyckelfunktioner

Parsa och bifoga stilmallar

CSSStyleSheet.replace_sync() parsar stilmallstext på plats; Document.attach_style_sheet() registrerar bladet med dokumentet så att det deltar i kaskaden. Blad kan också byggas regel-för-regel med insert_rule(), add_rule() och remove_rule(), eller skapas från text med 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)

Specifitet avgör vinnaren

När flera regler riktar sig mot samma element följer det beräknade värdet selektorspecificiteten. En ID-selektor (specificitet 1,0,0) har högre rang än en klass-selektor (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"))

Inbäddade deklarationer och CSSStyleDeclaration

Varje elements style-egenskap är en levande CSSStyleDeclaration. Deklarationer redigeras med set_property() och inspekteras med get_property_value(), get_property_priority() och item(). Inbäddade deklarationer har specificiteten (1,0,0), så de slår typ- och klassregler från författarens stilmallar:

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"))

Viktighet har företräde framför specificitet

!important vänder på det vanliga utfallet: en författarregel markerad med !important slår en icke-viktig inbäddad deklaration, oavsett specificitet. Prioriteringar kan också ställas in programmässigt med 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"))

Arv och nyckelordet inherit

Ärvbara egenskaper som color flödar från förälder till barn om inte barnet har sitt eget lokala värde — en lokal regel åsidosätter alltid en ärvd regel. Det explicita nyckelordet inherit kopierar förälderns beräknade värde, och på ett rootelement utan förälder faller det tillbaka på egenskapens initialvärde:

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"))

Snabbstart

Installera från PyPI:

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

Lös en trevägskonflikt — klassregel vs. ID-regel vs. inline-deklaration:

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"))

Öppen källkod & licensiering

Aspose.HTML FOSS för Python distribueras under MIT-licensen — kommersiell användning, modifiering och vidaredistribution är tillåtet. Källkoden finns på GitHub och releaser levereras till PyPI som aspose-html-foss.


Komma igång

Relaterade resurser