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"))टिप्स और सर्वोत्तम प्रथाएँ
- गणना किए गए शैलियों को पढ़ने से पहले शीट्स संलग्न करें — समाधान वर्तमान में संलग्न शीट्स को दर्शाता है
- अचरजजनक विजेताओं को डिबग करते समय
!importantकी जाँच के लिएget_property_priority()का उपयोग करें - प्रत्येक लॉजिकल स्टाइलशीट के लिए एक
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 | लो-लेवल स्टाइलशीट पार्सिंग |