CSSOM και Υπολογιζόμενα Στυλ
CSSOM και Υπολογισμένα Στυλ
Το μοντέλο αντικειμένων CSS μετατρέπει το κείμενο του φύλλου στυλ σε ζωντανά αντικείμενα που συμμετέχουν σε μια πραγματική κατάρρευση. Το CSSStyleSheet περιέχει κανόνες, το CSSStyleDeclaration περιέχει δηλώσεις ιδιοτήτων, και το Element.get_computed_style() αναφέρει το επιλυμένο αποτέλεσμα.
Ανάλυση και Σύνδεση Φυλλών Στυλ
Το CSSStyleSheet.replace_sync() αναλύει το κείμενο του φύλλου στυλ· το Document.attach_style_sheet() καταχωρεί το φύλλο ώστε οι κανόνες του να ισχύουν. Οι κανόνες μπορούν επίσης να διαχειρίζονται ατομικά με τα insert_rule(), add_rule() και remove_rule():
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)Η Οικογένεια Κανόνων
Τα αναλυμένα φύλλα περιέχουν κανόνες τύπου: CSSStyleRule για συνηθισμένους επιλεκτές, καθώς και CSSMediaRule, CSSKeyframesRule, CSSFontFaceRule, CSSSupportsRule, CSSImportRule και παραλλαγές σελίδας/στρώματος/χωρου ονομάτων, συλλεγμένες σε ένα CSSRuleList. Τα parse_stylesheet() και parse_rule_text() εκθέτουν άμεσα τη στρώση ανάλυσης.
Δηλώσεις και Ενσωματωμένα Στυλ
Η ιδιότητα style του κάθε στοιχείου είναι μια ζωντανή CSSStyleDeclaration: set_property(), get_property_value(), get_property_priority() και item() δηλώσεις ανάγνωσης και εγγραφής. Οι ενσωματωμένες δηλώσεις υπερισχύουν των κανόνων του δημιουργού με οποιαδήποτε ειδικότητα επιλογέα:
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"))Επίλυση της Κατάρρευσης
Element.get_computed_style() επιστρέφει ένα ComputedStyleDeclaration που αντικατοπτρίζει την ειδικότητα, τη σημασία και την κληρονομικότητα. Ένας κανόνας δημιουργού σημειωμένος !important νικά μια μη-σημαντική ενσωματωμένη δήλωση:
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"))Συμβουλές και Καλές Πρακτικές
- Συνδέστε φύλλα πριν διαβάσετε τα υπολογισμένα στυλ — η ανάλυση αντικατοπτρίζει τα τρέχοντα συνδεδεμένα φύλλα
- Χρησιμοποιήστε το
get_property_priority()για να ελέγξετε το!importantόταν εντοπίζετε απρόσμενους νικητές - Διατηρήστε ένα
CSSStyleSheetανά λογικό φύλλο στυλ;CSSRuleListδιατηρεί τη σειρά των κανόνων, η οποία έχει σημασία για ισοδυναμίες με ίση ειδικότητα - Για ελέγχους κληρονομικότητας, διαβάστε πρώτα την υπολογισμένη τιμή του γονέα, έπειτα του παιδιού
Συνηθισμένα προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
| Η υπολογιζόμενη τιμή αγνοεί έναν κανόνα | Το φύλλο δεν επισυνάπτεται ποτέ | Κλήση Document.attach_style_sheet() |
| Το ενσωματωμένο στυλ χάνει απρόσμενα | Ο κανόνας του συγγραφέα έχει !important | Επισκόπηση με get_property_priority() |
| Απουσία κληρονομημένης τιμής | Η ιδιότητα δεν είναι κληρονομήσιμη ή το παιδί έχει τοπική τιμή | Οι τοπικές τιμές πάντα υπερισχύουν των κληρονομημένων |
FAQ
Πώς μπορώ να αναλύσω το κείμενο CSS σε αντικείμενα;
CSSStyleSheet.replace_sync() για ολόκληρα φύλλα, ή parse_rule_text() για έναν μόνο κανόνα.
Τι επιστρέφει το get_computed_style;
Ένα ComputedStyleDeclaration — διαβάστε τιμές με get_property_value().
Τα ενσωματωμένα στυλ κερδίζουν πάντα;
Αντιμετωπίζουν τους κανόνες του δημιουργού όποιας ειδικότητας, αλλά χάνουν απέναντι σε κανόνες του δημιουργού που είναι σημειωμένοι !important.
API Reference Περίληψη
| Κλάση/Μέθοδος | Περιγραφή |
|---|---|
CSSStyleSheet.replace_sync | Ανάλυση κειμένου φύλλου στυλ επί τόπου |
Document.attach_style_sheet | Καταχωρίστε ένα φύλλο στο έγγραφο |
CSSStyleDeclaration.set_property | Γράψτε μια δήλωση |
CSSStyleDeclaration.get_property_priority | Ελέγξτε για !important |
Element.get_computed_style | Επιλύστε την αλυσίδα για ένα στοιχείο |
parse_stylesheet | Ανάλυση φύλλου στυλ χαμηλού επιπέδου |