Elrendezőmotor
Elrendezésmotor
Az elrendezés réteg a stílusos DOM-ot geometriává alakítja: egy dobozfát, majd méretekkel és pozíciókkal rendelkező töredékeket. Ez a szakasz a számított stílusok után következik, és kimenetei egyszerű Python objektumok, amelyeket megtekinthet.
A DOM-tól a dobozfáig
build_box_tree() egy BoxRoot-t BoxNode bejegyzésből hoz létre egy stílusos dokumentumból, minden elem megjelenítési modelljét a classify_display() segítségével a Display felsorolás ellenőrzésével osztályozva. ComputedStyle és EdgeSizes tartalmazzák az egyes dobozok stílusát és a dobozmodell méréseit.
Blokk elrendezés
layout_block_tree() blokk-szintű elrendezést hajt végre a dobozfa felett, egy FragmentRoot-t hoz létre, amely BlockFragment bejegyzést tartalmaz feloldott geometriával.
Beágyazott elrendezés
A beágyazott tartalom ShapedRun és InlineTextFragment darabokra alakul, amelyeket LineFragment sorokba szerelnek össze a layout_inline_fragments() és flush_inline_run() segítségével.
Pagination
paginate_fragments() a fragmentkimenetet PageFragment oldalra osztja, tiszteletben tartva a BreakHints-t, a PageMarginBoxes modellezi az oldalmargó területeket, a flush_page() pedig minden oldalt befejez.
Tippek és bevált gyakorlatok
- A számított stílusokat a elrendezés előtt kell feloldani — a dobozfa a stilizált elemekből származik.
- Ellenőrizze a
EdgeSizes-t, ha a dobozméretek hibásnak tűnnek; a margók és a kitöltés ott kerülnek feloldásra. - Tartsa külön a dobozfát és a fragmentfát a mentális modelljében: a dobozok a szerkezetet írják le, a fragmentek a elhelyezett geometriát.
Gyakori problémák
| Probléma | Ok | Javítás |
|---|---|---|
| Üres töredék kimenet | Elrendezés futtatása egy stílus nélküli vagy üres fán | Először csatold a stíluslapokat és a tartalmat |
| Váratlan megjelenítési osztályozás | Az elem számított display eltér a feltételezéstől | Ellenőrizze a classify_display() eredményt a dobozhoz |
| Oldaltörések furcsa helyeken | A törési tippek nincsenek beállítva | Szolgáltassa a BreakHints a paginate_fragments() számára |
FAQ
Mi a különbség egy doboz és egy töredék között?
A dobozok (BoxNode) leírják a stílusokból származó elrendezésstruktúrát; a töredékek (BlockFragment, LineFragment) a geometriával rendelkező elhelyezett eredmények.
A motor kezeli a lapozást?
Igen — paginate_fragments() PageFragment oldalt hoz létre margódobozokkal.
Honnan származnak a szövegfolyamok?
A beágyazott tartalom ShapedRun objektumokká alakul, és LineFragment sorokká áll össze.
API Reference Összefoglaló
| Osztály/Módszer | Leírás |
|---|---|
build_box_tree | Származtassa a dobozfa struktúrát egy stílusos DOM-ból |
layout_block_tree | Futtassa a blokk elrendezést a dobozfa felett |
layout_inline_fragments | Állítsa össze az inline tartalmat sorokba |
paginate_fragments | Bontsa szét a töredékeket oldalakra |
BoxNode | Egy doboz az elrendezési struktúrában |
PageFragment | Egy elrendezett oldal |