Úvod

Většina nástrojů HTML končí u stromu. Aspose.HTML FOSS pro Python jde o jednu vrstvu dál: implementuje objektový model CSS, takže stylesheet není jen text, který nosíte — účastní se skutečného kaskádování a každý prvek vám může říci, jaký styl skutečně má.

Tento hloubkový průzkum pokrývá vrstvu CSSOM: parsování stylových listů pomocí CSSStyleSheet, úpravu deklarací přes CSSStyleDeclaration a čtení výsledků zpět pomocí Element.get_computed_style() — včetně toho, jak specifita, !important, a dědičnost spolupracují. Knihovna je na PyPI jako aspose-html-foss, licencována pod MIT a je čistý Python (3.10+), což ji činí praktickou pro ověřování stylů v testovacích sadách a službách, kde by hlavičkový prohlížeč byl přehnaný.


Klíčové vlastnosti

Analyzovat a připojit stylové listy

CSSStyleSheet.replace_sync() parsuje text stylového listu na místě; Document.attach_style_sheet() registruje list do dokumentu, aby se účastnil kaskády. Listy lze také vytvářet pravidlo po pravidle pomocí insert_rule(), add_rule() a remove_rule(), nebo vytvořit z textu pomocí 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)

Specifita rozhoduje o vítězi

Když několik pravidel cílí na stejný prvek, vypočtená hodnota se řídí specifikací selektoru. Selektor ID (specifita 1,0,0) má přednost před selektorem třídy (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 deklarace a CSSStyleDeclaration

Každá style vlastnost prvku je živý CSSStyleDeclaration. Deklarace se upravují pomocí set_property() a kontrolují pomocí get_property_value(), get_property_priority() a item(). Inline deklarace mají specifikaci (1,0,0), takže převažují nad pravidly typu a třídy v autorových stylech:

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

Důležitost přebíjí specifikaci

!important obrací obvyklý výsledek: autorovo pravidlo označené !important přebije ne-důležitou inline deklaraci, bez ohledu na specifikaci. Priorita může být také nastavena programově pomocí 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"))

Dědičnost a klíčové slovo inherit

Děditelné vlastnosti, jako je color, přecházejí z rodiče na dítě, pokud dítě nemá vlastní lokální hodnotu — lokální pravidlo vždy přebije zděděnou hodnotu. Výslovné klíčové slovo inherit kopíruje vypočtenou hodnotu rodiče a u kořenového prvku bez rodiče se vrací k počáteční hodnotě vlastnosti:

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

Rychlý start

Instalovat z PyPI:

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

Vyřešte třícestný konflikt — pravidlo třídy vs. pravidlo ID vs. inline deklarace:

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 a licencování

Aspose.HTML FOSS pro Python je distribuováno pod licencí MIT — komerční použití, úpravy a redistribuce jsou povoleny. Zdroj je na GitHub a vydání jsou distribuována na PyPI jako aspose-html-foss.


Začínáme

Související zdroje