Introduzione

La maggior parte degli strumenti HTML si ferma all’albero. Aspose.HTML FOSS per Python va un livello oltre: implementa il modello oggetto CSS, quindi un foglio di stile non è solo testo da trasportare — partecipa a una vera cascata, e ogni elemento può dirti lo stile che effettivamente ottiene.

Questo approfondimento copre lo strato CSSOM: analizzare i fogli di stile con CSSStyleSheet, modificare le dichiarazioni tramite CSSStyleDeclaration, e leggere i risultati con Element.get_computed_style() — includendo come interagiscono specificità, !important, ed ereditarietà. La libreria è su PyPI come aspose-html-foss, con licenza MIT, ed è puro Python (3.10+), il che la rende pratica per la verifica degli stili nella suite di test e nei servizi dove un browser headless sarebbe eccessivo.


Caratteristiche principali

Analizza e collega i fogli di stile

CSSStyleSheet.replace_sync() analizza il testo del foglio di stile in loco; Document.attach_style_sheet() registra il foglio con il documento in modo che partecipi alla cascata. I fogli possono anche essere costruiti regola per regola con insert_rule(), add_rule() e remove_rule(), oppure creati da testo con 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)

La specificità decide il vincitore

Quando più regole mirano allo stesso elemento, il valore calcolato segue la specificità del selettore. Un selettore ID (specificità 1,0,0) supera un selettore di classe (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"))

Dichiarazioni inline e CSSStyleDeclaration

La proprietà style di ogni elemento è un CSSStyleDeclaration live. Le dichiarazioni vengono modificate con set_property() e ispezionate con get_property_value(), get_property_priority() e item(). Le dichiarazioni inline hanno una specificità (1,0,0), quindi superano le regole di tipo e di classe dei fogli di stile dell’autore:

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

L’importanza supera la specificità

!important inverte il risultato usuale: una regola dell’autore contrassegnata !important supera una dichiarazione inline non importante, indipendentemente dalla specificità. Le priorità possono anche essere impostate programmaticamente con 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"))

Ereditarietà e la parola chiave inherit

Le proprietà ereditabili come color fluiscono dal genitore al figlio a meno che il figlio non abbia un proprio valore locale — una regola locale sovrascrive sempre una ereditata. La parola chiave esplicita inherit copia il valore calcolato del genitore e, su un elemento radice senza genitore, ricade sul valore iniziale della proprietà:

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

Avvio rapido

Installa da PyPI:

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

Risolvi un conflitto a tre vie — regola di classe vs. regola ID vs. dichiarazione inline:

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 e Licenze

Aspose.HTML FOSS per Python è distribuito sotto la licenza MIT — l’uso commerciale, la modifica e la ridistribuzione sono consentiti. Il codice sorgente si trova su GitHub e le versioni sono pubblicate su PyPI come aspose-html-foss.


Guida introduttiva

Risorse correlate