Introduction
La plupart des outils HTML s’arrêtent au niveau de l’arbre. Aspose.HTML FOSS pour Python va un cran plus loin: il implémente le modèle d’objet CSS, de sorte qu’une feuille de style n’est pas seulement du texte que vous transportez — elle participe à une vraie cascade, et chaque élément peut vous indiquer le style qu’il obtient réellement.
Cette analyse approfondie couvre la couche CSSOM: l’analyse des feuilles de style avec CSSStyleSheet, la modification des déclarations via CSSStyleDeclaration, et la lecture des résultats avec Element.get_computed_style() — y compris la façon dont la spécificité, !important, et l’héritage interagissent. La bibliothèque se trouve sur PyPI sous le nom aspose-html-foss, sous licence MIT, et est pure Python (3.10+), ce qui la rend pratique pour la vérification des styles dans les suites de tests et les services où un navigateur sans tête serait excessif.
Fonctionnalités clés
Analyser et attacher les feuilles de style
CSSStyleSheet.replace_sync() analyse le texte de la feuille de style sur place; Document.attach_style_sheet() enregistre la feuille auprès du document afin qu’elle participe à la cascade. Les feuilles peuvent également être construites règle par règle avec insert_rule(), add_rule() et remove_rule(), ou créées à partir de texte avec 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 spécificité décide du gagnant
Lorsque plusieurs règles ciblent le même élément, la valeur calculée suit la spécificité du sélecteur. Un sélecteur ID (spécificité 1,0,0) l’emporte sur un sélecteur 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"))
Déclarations en ligne et CSSStyleDeclaration
La propriété style de chaque élément est un CSSStyleDeclaration dynamique. Les déclarations sont modifiées avec set_property() et inspectées avec get_property_value(), get_property_priority() et item(). Les déclarations en ligne portent une spécificité (1,0,0), elles l’emportent donc sur les règles de type et de classe des feuilles de style de l’auteur :
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"))
Importance l’emporte sur la spécificité
!important inverse le résultat habituel : une règle d’auteur marquée !important l’emporte sur une déclaration en ligne non importante, quelle que soit la spécificité. Les priorités peuvent également être définies programmatiquement avec 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"))
Héritage et le mot-clé inherit
Les propriétés héritables comme color se propagent du parent à l’enfant, sauf si l’enfant possède sa propre valeur locale — une règle locale l’emporte toujours sur une règle héritée. Le mot-clé explicite inherit copie la valeur calculée du parent, et sur un élément racine sans parent il revient à la valeur initiale de la propriété :
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"))
Démarrage rapide
Installer depuis PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Résoudre un conflit à trois voies — règle de classe vs. règle d’ID vs. déclaration en ligne :
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 & licences
Aspose.HTML FOSS pour Python est distribué sous la licence MIT — l’utilisation commerciale, la modification et la redistribution sont autorisées. Le code source se trouve sur GitHub et les versions sont publiées sur PyPI sous le nom aspose-html-foss.