Pendahuluan
Sebagian besar alat HTML berhenti pada pohonnya. Aspose.HTML FOSS untuk Python melangkah satu lapisan lebih jauh: ia mengimplementasikan model objek CSS, sehingga stylesheet bukan sekadar teks yang Anda bawa — ia berpartisipasi dalam cascade yang sebenarnya, dan setiap elemen dapat memberi tahu Anda gaya yang sebenarnya diterapkan padanya.
Penyelaman mendalam ini mencakup lapisan CSSOM: parsing stylesheet dengan CSSStyleSheet, mengedit deklarasi melalui CSSStyleDeclaration, dan membaca kembali hasilnya dengan Element.get_computed_style() — termasuk bagaimana spesifisitas, !important, dan pewarisan berinteraksi. Perpustakaan ini berada di PyPI sebagai aspose-html-foss, berlisensi MIT, dan murni Python (3.10+), yang menjadikannya praktis untuk verifikasi gaya dalam suite pengujian dan layanan di mana browser tanpa kepala akan berlebihan.
Fitur Utama
Parse dan Lampirkan Stylesheet
CSSStyleSheet.replace_sync() mem-parse teks stylesheet di tempat; Document.attach_style_sheet() mendaftarkan lembar dengan dokumen sehingga ia berpartisipasi dalam cascade. Lembar juga dapat dibangun aturan demi aturan dengan insert_rule(), add_rule(), dan remove_rule(), atau dibuat dari teks dengan 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)
Spesifisitas Menentukan Pemenang
Ketika beberapa aturan menargetkan elemen yang sama, nilai yang dihitung mengikuti spesifisitas selector. Selector ID (spesifisitas 1,0,0) mengungguli selector kelas (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"))
Deklarasi Inline dan CSSStyleDeclaration
Properti style setiap elemen adalah CSSStyleDeclaration yang hidup. Deklarasi diedit dengan set_property() dan diperiksa dengan get_property_value(), get_property_priority(), dan item(). Deklarasi inline memiliki spesifisitas (1,0,0), sehingga mereka mengalahkan aturan tipe dan kelas dari stylesheet penulis:
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"))
Pentingnya Mengungguli Spesifisitas
!important membalikkan hasil biasanya: aturan penulis yang ditandai !important mengalahkan deklarasi inline yang tidak penting, terlepas dari spesifisitas. Prioritas juga dapat diatur secara programatik dengan 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"))
Pewarisan dan Kata Kunci inherit
Properti yang dapat diwariskan seperti color mengalir dari induk ke anak kecuali anak memiliki nilai lokalnya sendiri — aturan lokal selalu menggantikan yang diwariskan. Kata kunci inherit yang eksplisit menyalin nilai terhitung induk, dan pada elemen akar yang tidak memiliki induk, nilai tersebut kembali ke nilai awal properti:
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"))
Mulai Cepat
Instal dari PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Selesaikan konflik tiga arah — aturan kelas vs. aturan ID vs. deklarasi 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"))
Sumber Terbuka & Lisensi
Aspose.HTML FOSS untuk Python didistribusikan di bawah lisensi MIT — penggunaan komersial, modifikasi, dan redistribusi diperbolehkan. Sumber berada di GitHub dan rilis dikirim ke PyPI sebagai aspose-html-foss.