CSSOM ve Hesaplanan Stiller
CSSOM ve Hesaplanmış Stiller
CSS nesne modeli, stil sayfası metnini gerçek bir kaskadda yer alan canlı nesnelere dönüştürür. CSSStyleSheet kuralları tutar, CSSStyleDeclaration özellik bildirimlerini tutar ve Element.get_computed_style() çözümlenmiş sonucu raporlar.
Stil Sayfalarının Ayrıştırılması ve Eklenmesi
CSSStyleSheet.replace_sync() stil sayfası metnini ayrıştırır; Document.attach_style_sheet() sayfayı kaydeder, böylece kuralları uygulanır. Kurallar ayrıca insert_rule(), add_rule() ve remove_rule() ile tek tek yönetilebilir:
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)Kural Ailesi
Ayrıştırılmış sayfalar tiplenmiş kurallar içerir: CSSStyleRule sıradan seçiciler için, ayrıca CSSMediaRule, CSSKeyframesRule, CSSFontFaceRule, CSSSupportsRule, CSSImportRule ve sayfa/katman/isim uzayı varyantları, bir CSSRuleList içinde toplanır. parse_stylesheet() ve parse_rule_text() ayrıştırma katmanını doğrudan ortaya çıkarır.
Deklarasyonlar ve Satır İçi Stiller
Her öğenin style özelliği, canlı bir CSSStyleDeclaration‘dir: set_property(), get_property_value(), get_property_priority() ve item() okuma ve yazma bildirimleri. Satır içi bildirimler, herhangi bir seçici özgüllüğüne sahip yazar kurallarından daha üstündür:
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"))Kademeyi Çözümleme
Element.get_computed_style(), özgüllük, önem ve kalıtımı yansıtan bir ComputedStyleDeclaration döndürür. !important olarak işaretlenmiş bir yazar kuralı, önemsiz bir satır içi bildirimi yener:
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"))İpuçları ve En İyi Uygulamalar
- Hesaplanmış stilleri okumadan önce stil sayfalarını ekleyin — çözümleme, şu anda ekli stil sayfalarını yansıtır
- Şaşırtıcı kazananları ayıklarken
!important‘i kontrol etmek içinget_property_priority()‘ı kullanın - Mantıksal stil sayfası başına bir
CSSStyleSheettutun;CSSRuleList, kural sırasını korur, bu da eş-özgüllük bağlamalarında önemlidir - Kalıtım kontrolleri için önce ebeveynin hesaplanmış değerini, ardından çocuğun değerini okuyun
Yaygın Sorunlar
| Sorun | Neden | Düzeltme |
|---|---|---|
| Hesaplanan değer bir kuralı göz ardı ediyor | Sayfa hiç eklenmedi | Çağır Document.attach_style_sheet() |
| Satır içi stil beklenmedik şekilde kayboluyor | Yazar kuralı !important içeriyor | İncele get_property_priority() ile |
| Miras alınan değer eksik | Özellik miras alınamaz veya alt öğenin yerel değeri var | Yerel değerler her zaman miras alınanların önüne geçer |
FAQ
Nasıl CSS metnini nesnelere ayrıştırabilirim?
CSSStyleSheet.replace_sync() tüm sayfalar için, veya parse_rule_text() tek bir kural için.
get_computed_style ne döndürür?
Bir ComputedStyleDeclaration — değerleri get_property_value() ile okuyun.
Satır içi stiller her zaman kazanır mı?
Herhangi bir özgüllükteki yazar kurallarını yenerler, ancak !important ile işaretlenmiş yazar kurallarına yenilirler.
API Reference Özet
| Sınıf/Yöntem | Açıklama |
|---|---|
CSSStyleSheet.replace_sync | Stil sayfası metnini yerinde ayrıştır |
Document.attach_style_sheet | Belgeye bir sayfa kaydet |
CSSStyleDeclaration.set_property | Bir bildirim yaz |
CSSStyleDeclaration.get_property_priority | !important için kontrol et |
Element.get_computed_style | Bir öğe için katmanı çöz |
parse_stylesheet | Düşük seviyeli stil sayfası ayrıştırması |