लेआउट इंजन
लेआउट इंजन
लेआउट लेयर एक स्टाइल्ड DOM को ज्योमेट्री में बदलती है: एक बॉक्स ट्री, फिर आकार और स्थितियों के साथ फ्रैगमेंट। यह गणना किए गए स्टाइल्स के बाद का चरण है, और इसके आउटपुट साधारण Python ऑब्जेक्ट्स होते हैं जिन्हें आप निरीक्षण कर सकते हैं।
DOM से बॉक्स ट्री तक
build_box_tree() एक BoxRoot BoxNode प्रविष्टियों का उत्पन्न करता है, प्रत्येक तत्व के डिस्प्ले मॉडल को classify_display() के माध्यम से Display एन्युमरेशन के विरुद्ध वर्गीकृत करता है। ComputedStyle और EdgeSizes प्रति-बॉक्स स्टाइल और बॉक्स-मॉडल माप को धारण करते हैं।
ब्लॉक लेआउट
layout_block_tree() बॉक्स ट्री पर ब्लॉक-लेवल लेआउट करता है, एक FragmentRoot उत्पन्न करता है जिसमें BlockFragment प्रविष्टियाँ समाधानित ज्योमेट्री के साथ होती हैं।
इनलाइन लेआउट
इनलाइन सामग्री को ShapedRun और InlineTextFragment टुकड़ों में ढाला जाता है, जिसे layout_inline_fragments() और flush_inline_run() के माध्यम से LineFragment पंक्तियों में संयोजित किया जाता है।
Pagination
paginate_fragments() फ्रैगमेंट आउटपुट को PageFragment पृष्ठों में विभाजित करता है, BreakHints का सम्मान करते हुए, PageMarginBoxes पृष्ठ-मार्जिन क्षेत्रों को मॉडल करता है और flush_page() प्रत्येक पृष्ठ को अंतिम रूप देता है।
टिप्स और सर्वोत्तम प्रथाएँ
- लेआउट से पहले संगणित शैलियों को हल करें — बॉक्स ट्री स्टाइल किए गए तत्वों से प्राप्त होता है।
- जब बॉक्स के आयाम गलत दिखें तो
EdgeSizesकी जाँच करें; मार्जिन और पैडिंग वहीं हल होते हैं। - अपने मानसिक मॉडल में बॉक्स ट्री और फ्रैगमेंट ट्री को अलग रखें: बॉक्स संरचना का वर्णन करते हैं, फ्रैगमेंट रखी गई ज्यामिति का वर्णन करते हैं।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
| खाली फ्रैगमेंट आउटपुट | लेआउट अनस्टाइल्ड या खाली ट्री पर चलाया गया | पहले स्टाइलशीट्स और कंटेंट संलग्न करें |
| अनपेक्षित डिस्प्ले वर्गीकरण | एलिमेंट का गणना किया गया display अनुमान से अलग है | बॉक्स के लिए classify_display() परिणाम जाँचें |
| पृष्ठ विभाजन असामान्य स्थानों पर | ब्रेक संकेत सेट नहीं हैं | BreakHints को paginate_fragments() तक प्रदान करें |
FAQ
बॉक्स और फ्रैगमेंट में क्या अंतर है?
बॉक्स (BoxNode) शैली से प्राप्त लेआउट संरचना का वर्णन करते हैं; फ्रैगमेंट (BlockFragment, LineFragment) ज्यामिति के साथ रखे गए परिणाम होते हैं।
क्या इंजन पेजिनेशन संभालता है?
हाँ — paginate_fragments() PageFragment पृष्ठों को मार्जिन बॉक्स के साथ बनाता है।
टेक्स्ट रन कहाँ से आते हैं?
इनलाइन कंटेंट को ShapedRun वस्तुओं में आकार दिया जाता है और उन्हें LineFragment लाइनों में संकलित किया जाता है।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
build_box_tree | स्टाइल्ड DOM से बॉक्स ट्री प्राप्त करें |
layout_block_tree | बॉक्स ट्री पर ब्लॉक लेआउट चलाएँ |
layout_inline_fragments | इनलाइन कंटेंट को पंक्तियों में संयोजित करें |
paginate_fragments | फ़्रैगमेंट्स को पृष्ठों में विभाजित करें |
BoxNode | लेआउट संरचना में एक बॉक्स |
PageFragment | एक व्यवस्थित पृष्ठ |