Wprowadzenie

Większość narzędzi HTML zatrzymuje się na drzewie. Aspose.HTML FOSS dla Python idzie o warstwę dalej: implementuje model obiektowy CSS, więc arkusz stylów nie jest tylko tekstem, który nosisz — uczestniczy w rzeczywistej kaskadzie, a każdy element może powiedzieć Ci, jaki styl ostatecznie uzyska.

To dogłębne omówienie obejmuje warstwę CSSOM: parsowanie arkuszy stylów za pomocą CSSStyleSheet, edytowanie deklaracji poprzez CSSStyleDeclaration oraz odczytywanie wyników przy pomocy Element.get_computed_style() — w tym jak specyficzność, !important i dziedziczenie współdziałają. Biblioteka jest dostępna na PyPI jako aspose-html-foss, na licencji MIT i czystym Python (3.10+), co czyni ją praktyczną do weryfikacji stylów w zestawach testowych oraz usługach, gdzie przeglądarka headless byłaby przesadą.


Kluczowe funkcje

Parsuj i dołącz arkusze stylów

CSSStyleSheet.replace_sync() parsuje tekst arkusza stylów w miejscu; Document.attach_style_sheet() rejestruje arkusz w dokumencie, aby uczestniczył w kaskadzie. Arkusze mogą być również budowane reguła po regule przy użyciu insert_rule(), add_rule() i remove_rule(), lub tworzone z tekstu za 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)

Specyficzność decyduje o zwycięzcy

Gdy kilka reguł odnosi się do tego samego elementu, obliczona wartość zależy od specyficzności selektora. Selektor ID (specyficzność 1,0,0) ma wyższy priorytet niż selektor klasy (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"))

Deklaracje inline i CSSStyleDeclaration

Właściwość style każdego elementu jest żywym CSSStyleDeclaration. Deklaracje są edytowane za pomocą set_property() i przeglądane przy użyciu get_property_value(), get_property_priority() oraz item(). Deklaracje inline mają specyficzność (1,0,0), więc przeważają nad regułami typu i klasy z arkuszy stylów autora:

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

Ważność przewyższa specyficzność

!important odwraca typowy wynik: reguła autora oznaczona !important pokonuje nie-ważną deklarację inline, niezależnie od specyficzności. Priorytety można także ustawiać programowo za 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"))

Dziedziczenie i słowo kluczowe inherit

Właściwości dziedziczące, takie jak color, przepływają z rodzica do dziecka, chyba że dziecko ma własną lokalną wartość — reguła lokalna zawsze nadpisuje dziedziczoną. Jawne słowo kluczowe inherit kopiuje obliczoną wartość rodzica, a na elemencie głównym bez rodzica przywraca wartość początkową właściwości:

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

Szybki start

Zainstaluj 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 .

Rozwiąż konflikt trójstronny — reguła klasy vs. reguła ID vs. deklaracja 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"))

Open Source i licencjonowanie

Aspose.HTML FOSS dla Python jest dystrybuowany na licencji MIT — dozwolone jest komercyjne użycie, modyfikacja i redystrybucja. Źródło znajduje się na GitHub i wydania są publikowane na PyPI jako aspose-html-foss.


Rozpoczęcie

Powiązane zasoby