Introducere
Majoritatea instrumentelor HTML se opresc la arbore. Aspose.HTML FOSS pentru Python merge cu un nivel mai departe: implementează modelul de obiecte CSS, astfel încât o foaie de stil nu este doar text pe care îl porți — participă la o cascadă reală, iar fiecare element îți poate spune stilul cu care se termină efectiv.
Această explorare detaliată acoperă stratul CSSOM: parsarea foilor de stil cu CSSStyleSheet, editarea declarațiilor prin CSSStyleDeclaration și citirea rezultatelor înapoi cu Element.get_computed_style() — inclusiv modul în care specificitatea, !important, și moștenirea interacționează. Biblioteca este pe PyPI ca aspose-html-foss, licențiată MIT și este pur Python (3.10+), ceea ce o face practică pentru verificarea stilurilor în suite de teste și servicii unde un browser fără interfață ar fi excesiv.
Caracteristici cheie
Parsează și atașează foile de stil
CSSStyleSheet.replace_sync() parsează textul foii de stil la fața locului; Document.attach_style_sheet() înregistrează foaia în document astfel încât să participe la cascadă. Foile pot fi, de asemenea, construite regulă cu regulă cu insert_rule(), add_rule() și remove_rule(), sau create din text cu 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)
Specificitatea decide câștigătorul
Când mai multe reguli vizează același element, valoarea calculată urmează specificitatea selectorului. Un selector ID (specificitate 1,0,0) are prioritate față de un selector de clasă (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"))
Declarații inline și CSSStyleDeclaration
Proprietatea style a fiecărui element este un CSSStyleDeclaration live. Declarațiile sunt editate cu set_property() și inspectate cu get_property_value(), get_property_priority() și item(). Declarațiile inline au specificitate (1,0,0), astfel că depășesc regulile de tip și clasă din foile de stil ale autorului:
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"))
Importanța are prioritate față de specificitate
!important inversează rezultatul obișnuit: o regulă a autorului marcată !important învinge o declarație inline neimportantă, indiferent de specificitate. Prioritățile pot fi setate și programatic cu 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"))
Moștenirea și cuvântul cheie inherit
Proprietățile moștenibile, cum ar fi color, curg de la părinte la copil, cu excepția cazului în care copilul are propria valoare locală — o regulă locală înlocuiește întotdeauna una moștenită. Cuvântul cheie explicit inherit copiază valoarea calculată a părintelui, iar pe un element rădăcină fără părinte revine la valoarea inițială a proprietății:
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"))
Ghid rapid
Instalați de la PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Rezolvați un conflict în trei părți — regulă de clasă vs. regulă de ID vs. declarație 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 & Licențiere
Aspose.HTML FOSS pentru Python este distribuit sub licența MIT — utilizarea comercială, modificarea și redistribuirea sunt permise. Codul sursă este pe GitHub și versiunile sunt livrate către PyPI ca aspose-html-foss.