Introducción

La mayoría de las herramientas HTML se detienen en el árbol. Aspose.HTML FOSS para Python va un nivel más allá: implementa el modelo de objetos CSS, de modo que una hoja de estilo no es solo texto que llevas contigo — participa en una cascada real, y cada elemento puede decirte el estilo con el que realmente termina.

Esta inmersión profunda cubre la capa CSSOM: analizar hojas de estilo con CSSStyleSheet, editar declaraciones mediante CSSStyleDeclaration, y leer los resultados de vuelta con Element.get_computed_style() — incluyendo cómo la especificidad, !important, y la herencia interactúa. aspose-html-foss, con licencia MIT, y puro Python (3.10+), lo que lo hace práctico para la verificación de estilos en suites de pruebas y servicios donde un navegador sin cabeza sería excesivo.


Características clave

Analizar y adjuntar hojas de estilo

CSSStyleSheet.replace_sync() analiza el texto de la hoja de estilo en el lugar; Document.attach_style_sheet() registra la hoja con el documento para que participe en la cascada. Las hojas también pueden construirse regla por regla con insert_rule(), add_rule(), y remove_rule(), o creado a partir de texto 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 especificidad decide al ganador

Cuando varias reglas apuntan al mismo elemento, el valor calculado sigue la especificidad del selector. Un selector ID (especificidad 1,0,0) supera a un selector de clase (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"))

Declaraciones en línea y CSSStyleDeclaration

Cada elemento style la propiedad es en vivo CSSStyleDeclaration. Las declaraciones se editan con set_property() y inspeccionado con get_property_value(), get_property_priority(), y item(). Las declaraciones en línea llevan una especificidad (1,0,0), por lo que superan las reglas de tipo y clase de las hojas de estilo del 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"))

La importancia supera la especificidad

!important invierte el resultado habitual: una regla del autor marcada !important supera a una declaración inline no importante, sin importar la especificidad. Las prioridades también pueden establecerse programáticamente 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"))

Herencia y la palabra clave inherit

Propiedades heredables como color fluyen del padre al hijo a menos que el hijo tenga su propio valor local — una regla local siempre anula una heredada. La explícita inherit palabra clave copia el valor calculado del padre, y en un elemento raíz sin padre recurre al valor inicial de la propiedad:

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

Inicio rápido

Instalar desde PyPI:

pip install aspose-html-foss

Resolver un conflicto de tres vías — regla de clase vs. regla de ID vs. declaración en línea:

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 abierto y licencias

Aspose.HTML FOSS para Python se distribuye bajo la licencia MIT — el uso comercial, la modificación y la redistribución están permitidos. El código fuente está en GitHub y los lanzamientos se envían a PyPI como aspose-html-foss.


Comenzando

Recursos relacionados