Einleitung

Die meisten HTML-Werkzeuge hören beim Baum auf. Aspose.HTML FOSS für Python geht eine Ebene weiter: Sie implementiert das CSS-Objektmodell, sodass ein Stylesheet nicht nur Text ist, den man mit sich herumträgt — es nimmt an einer echten Kaskade teil, und jedes Element kann dir den Stil mitteilen, mit dem es tatsächlich endet.

Dieser Deep Dive behandelt die CSSOM-Schicht: das Parsen von Stylesheets mit CSSStyleSheet, das Bearbeiten von Deklarationen über CSSStyleDeclaration und das Auslesen der Ergebnisse mit Element.get_computed_style() — einschließlich wie Spezifität, !important und Vererbung zusammenwirken. Die Bibliothek ist auf PyPI als aspose-html-foss verfügbar, MIT-lizenziert und reines Python (3.10+), was sie praktisch macht für die Stil-Verifizierung in Testsuiten und Diensten, bei denen ein headless Browser übertrieben wäre.


Hauptmerkmale

Stylesheets parsen und anhängen

CSSStyleSheet.replace_sync() parst den Stylesheet-Text an Ort und Stelle; Document.attach_style_sheet() registriert das Blatt beim Dokument, sodass es an der Kaskade teilnimmt. Stylesheets können auch regelweise mit insert_rule(), add_rule() und remove_rule() gebaut werden, oder aus Text mit from_text() erstellt werden:

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)

Spezifität entscheidet den Sieger

Wenn mehrere Regeln dasselbe Element ansprechen, folgt der berechnete Wert der Selektorenspezifität. Ein ID-Selektor (Spezifität 1,0,0) hat Vorrang vor einem Klassen-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"))

Inline-Deklarationen und CSSStyleDeclaration

Die style-Eigenschaft jedes Elements ist ein Live-CSSStyleDeclaration. Deklarationen werden mit set_property() bearbeitet und mit get_property_value(), get_property_priority() und item() inspiziert. Inline-Deklarationen besitzen die Spezifität (1,0,0), daher übertreffen sie Typ- und Klassenregeln aus den Stylesheets des Autors:

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

Wichtigkeit übertrifft Spezifität

!important kehrt das übliche Ergebnis um: Eine vom Autor definierte Regel, die mit !important gekennzeichnet ist, schlägt eine nicht-wichtige Inline-Deklaration, unabhängig von der Spezifität. Prioritäten können auch programmgesteuert mit set_property_priority() festgelegt werden:

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

Vererbung und das Schlüsselwort inherit

Vererbbare Eigenschaften wie color fließen vom Elternelement zum Kindelement, sofern das Kindelement keinen eigenen lokalen Wert hat – eine lokale Regel überschreibt stets eine vererbte. Das explizite Schlüsselwort inherit kopiert den berechneten Wert des Elternteils, und bei einem Wurzelelement ohne Elternteil fällt es auf den Anfangswert der Eigenschaft zurück:

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

Schnellstart

Installieren von 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ösen Sie einen Dreifachkonflikt — Klassenregel 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"))

Open Source & Lizenzierung

Aspose.HTML FOSS für Python wird unter der MIT-Lizenz verbreitet — kommerzielle Nutzung, Modifikation und Weiterverteilung sind erlaubt. Der Quellcode ist auf GitHub und die Releases werden an PyPI als aspose-html-foss ausgeliefert.


Erste Schritte

Verwandte Ressourcen