Μηχανή Διάταξης
Μηχανή Διάταξης
Η στρώση διάταξης μετατρέπει ένα μορφοποιημένο DOM σε γεωμετρία: ένα δέντρο κουτιών, στη συνέχεια θραύσματα με μεγέθη και θέσεις. Είναι το στάδιο μετά από τα υπολογισμένα στυλ, και οι εξόδους της είναι απλά αντικείμενα Python που μπορείτε να εξετάσετε.
Από το DOM στο Δέντρο Κουτιών
build_box_tree() παράγει ένα BoxRoot από BoxNode εγγραφές από ένα μορφοποιημένο έγγραφο, ταξινομώντας το μοντέλο εμφάνισης κάθε στοιχείου μέσω του classify_display() έναντι της απαρίθμησης Display. Τα ComputedStyle και EdgeSizes μεταφέρουν το στυλ ανά κουτί και τις μετρήσεις του μοντέλου κουτιού.
Διάταξη Μπλοκ
layout_block_tree() εκτελεί διάταξη σε επίπεδο μπλοκ πάνω από το δέντρο κουτιών, παράγοντας ένα FragmentRoot που περιέχει BlockFragment εγγραφές με επιλυμένη γεωμετρία.
Διάταξη Ενσωματωμένη
Το ενσωματωμένο περιεχόμενο διαμορφώνεται σε ShapedRun και InlineTextFragment κομμάτια, συναρμολογείται σε LineFragment γραμμές μέσω layout_inline_fragments() και flush_inline_run().
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 | Εκτέλεση block layout πάνω στο box tree |
layout_inline_fragments | Συναρμολόγηση inline content σε γραμμές |
paginate_fragments | Διαίρεση fragments σε σελίδες |
BoxNode | Ένα box στη δομή layout |
PageFragment | Μία διατεταγμένη σελίδα |