Μηχανή Διάταξης

Μηχανή Διάταξης

Η στρώση διάταξης μετατρέπει ένα μορφοποιημένο 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Μία διατεταγμένη σελίδα

Δείτε επίσης

 Ελληνικά