Εισαγωγή
Τα περισσότερα εργαλεία HTML σταματούν στο δέντρο. Aspose.HTML FOSS για Python προχωρά ένα επίπεδο παραπέρα: υλοποιεί το αντικειμενικό μοντέλο CSS, έτσι ένα φύλλο στυλ δεν είναι μόνο κείμενο που μεταφέρετε — συμμετέχει σε μια πραγματική αλυσίδα, και κάθε στοιχείο μπορεί να σας πει το στυλ που τελικά παίρνει.
Αυτή η βαθιά εξέταση καλύπτει το επίπεδο CSSOM: ανάλυση φύλλων στυλ με CSSStyleSheet, επεξεργασία δηλώσεων μέσω CSSStyleDeclaration, και ανάγνωση αποτελεσμάτων με Element.get_computed_style() — συμπεριλαμβανομένου του πώς η ειδικότητα, !important, και η κληρονομικότητα αλληλεπιδρούν. Η βιβλιοθήκη βρίσκεται στο PyPI ως aspose-html-foss, αδειοδοτημένη υπό MIT, και είναι καθαρή Python (3.10+), κάτι που την καθιστά πρακτική για επαλήθευση στυλ σε σύνολα δοκιμών και υπηρεσίες όπου ένας headless browser θα ήταν υπερβολικός.
Κύρια Χαρακτηριστικά
Ανάλυση και Σύνδεση Φύλλων Στυλ
CSSStyleSheet.replace_sync() αναλύει το κείμενο του φύλλου στυλ επί τόπου· Document.attach_style_sheet() καταχωρεί το φύλλο στο έγγραφο ώστε να συμμετέχει στην αλυσίδα. Τα φύλλα μπορούν επίσης να δημιουργηθούν κανόνα-κατά-κανόνα με insert_rule(), add_rule() και remove_rule(), ή να δημιουργηθούν από κείμενο με 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)
Η Ειδικότητα Επιλέγει τον Νικητή
Όταν αρκετοί κανόνες στοχεύουν το ίδιο στοιχείο, η υπολογισμένη τιμή ακολουθεί την ειδικότητα του επιλογέα. Ένας επιλογέας ID (ειδικότητα 1,0,0) υπερτερεί έναν επιλογέα κλάσης (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"))
Ενσωματωμένες δηλώσεις και CSSStyleDeclaration
Η ιδιότητα style κάθε στοιχείου είναι ένα ζωντανό CSSStyleDeclaration. Οι δηλώσεις επεξεργάζονται με set_property() και ελέγχονται με get_property_value(), get_property_priority() και item(). Οι ενσωματωμένες δηλώσεις έχουν ειδικότητα (1,0,0), επομένως ξεπερνούν τους κανόνες τύπου και κλάσης από τα φύλλα στυλ του δημιουργού:
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"))
Η σημασία υπερτερεί της ειδικότητας
!important αντιστρέφει το συνηθισμένο αποτέλεσμα: ένας κανόνας δημιουργού που έχει χαρακτηριστεί !important υπερισχύει μιας μη-σημαντικής ενσωματωμένης δήλωσης, ανεξαρτήτως ειδικότητας. Οι προτεραιότητες μπορούν επίσης να οριστούν προγραμματιστικά με 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"))
Κληρονομικότητα και η λέξη-κλειδί inherit
Ιδιότητες που κληρονομούνται, όπως το color, μεταβιβάζονται από τον γονέα στο παιδί εκτός εάν το παιδί έχει τη δική του τοπική τιμή — ένας τοπικός κανόνας πάντα υπερισχύει ενός κληρονομημένου. Η ρητή λέξη-κλειδί inherit αντιγράφει την υπολογισμένη τιμή του γονέα και σε ένα στοιχείο ρίζας χωρίς γονέα επανέρχεται στην αρχική τιμή της ιδιότητας:
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"))
Γρήγορη έναρξη
Εγκατάσταση από PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Επίλυση μιας τριπλής σύγκρουσης — κανόνας κλάσης vs. κανόνας ID vs. ενσωματωμένη δήλωση:
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"))
Ανοιχτός Κώδικας & Αδειοδότηση
Aspose.HTML FOSS για Python διανέμεται υπό την άδεια MIT — η εμπορική χρήση, η τροποποίηση και η αναδιανομή επιτρέπονται. Ο κώδικας είναι στο GitHub και οι εκδόσεις αποστέλλονται στο PyPI ως aspose-html-foss.