Introdução
A maioria das ferramentas HTML pára na árvore. Aspose.HTML FOSS para Python vai um nível além: implementa o modelo de objeto CSS, de modo que uma folha de estilo não é apenas texto que você carrega — ela participa de uma cascata real, e cada elemento pode dizer a você o estilo que realmente recebe.
Este mergulho profundo cobre a camada CSSOM: analisar folhas de estilo com CSSStyleSheet, editar declarações através de CSSStyleDeclaration e ler os resultados de volta com Element.get_computed_style() — incluindo como especificidade, !important, e herança interagem. A biblioteca está em PyPI como aspose-html-foss, licenciada sob MIT, e é pura Python (3.10+), o que a torna prática para verificação de estilos em suítes de teste e serviços onde um navegador sem interface seria excessivo.
Principais Recursos
Analisar e Anexar Folhas de Estilo
CSSStyleSheet.replace_sync() analisa o texto da folha de estilo no local; Document.attach_style_sheet() registra a folha no documento para que participe da cascata. As folhas também podem ser construídas regra por regra com insert_rule(), add_rule() e remove_rule(), ou criadas a partir de texto com 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)
A Especificidade Decide o Vencedor
Quando várias regras visam o mesmo elemento, o valor computado segue a especificidade do seletor. Um seletor de ID (especificidade 1,0,0) supera um seletor de 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"))
Declarações Inline e CSSStyleDeclaration
Cada propriedade style de cada elemento é um CSSStyleDeclaration ao vivo. As declarações são editadas com set_property() e inspecionadas com get_property_value(), get_property_priority() e item(). Declarações inline têm especificidade (1,0,0), portanto superam regras de tipo e de classe de folhas de estilo do autor:
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"))
Importância supera especificidade
!important inverte o resultado usual: uma regra do autor marcada !important supera uma declaração inline não importante, independentemente da especificidade. As prioridades também podem ser definidas programaticamente com 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"))
Herança e a palavra-chave inherit
Propriedades herdáveis como color fluem do pai para o filho, a menos que o filho tenha seu próprio valor local — uma regra local sempre substitui uma herdada. A palavra-chave explícita inherit copia o valor computado do pai, e em um elemento raiz sem pai ele recai para o valor inicial da propriedade:
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"))
Início rápido
Instale a partir de PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Resolva um conflito de três vias — regra de classe vs. regra de ID vs. declaração 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"))
Código aberto e licenciamento
Aspose.HTML FOSS para Python é distribuído sob a licença MIT — uso comercial, modificação e redistribuição são permitidos. O código-fonte está em GitHub e os lançamentos são enviados para PyPI como aspose-html-foss.