Rozvrhovací engine
Rozvrhový engine
Vrstva rozvržení převádí stylovaný DOM na geometrii: strom krabic, pak fragmenty s rozměry a pozicemi. Jedná se o fázi po vypočtených stylech a její výstupy jsou prosté objekty Python, které můžete prohlížet.
Z DOMu do stromu krabic
build_box_tree() vytváří BoxRoot BoxNode položek ze stylovaného dokumentu, klasifikující model zobrazení každého elementu pomocí classify_display() vůči výčtu Display. ComputedStyle a EdgeSizes nesou styl a měření box-modelu pro každou krabici.
Blokové rozvržení
layout_block_tree() provádí blokové rozvržení nad stromem krabic a vytváří FragmentRoot obsahující BlockFragment položky s rozřešenou geometrií.
Inline rozvržení
Vložený obsah je formován do ShapedRun a InlineTextFragment částí, sestaven do LineFragment řádků pomocí layout_inline_fragments() a flush_inline_run().
Pagination
paginate_fragments() rozděluje výstup fragmentů do PageFragment stránek, respektuje BreakHints, přičemž PageMarginBoxes modeluje oblasti okrajů stránky a flush_page() finalizuje každou stránku.
Tipy a osvědčené postupy
- Vyřešte vypočtené styly před rozvržením — strom boxů vychází ze stylovaných elementů
- Zkontrolujte
EdgeSizes, když vypadají rozměry boxu špatně; okraje a vnitřní odsazení se řeší tam - Udržujte strom boxů a strom fragmentů oddělené ve svém mentálním modelu: boxy popisují strukturu, fragmenty popisují umístěnou geometrii
Běžné problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Výstup prázdného fragmentu | Rozvržení spuštěno na neformátovaném nebo prázdném stromu | Nejprve připojte šablony stylů a obsah |
| Neočekávaná klasifikace zobrazení | Vypočtená hodnota display prvku se liší od předpokladu | Zkontrolujte výsledek classify_display() pro box |
| Zalomení stránky na podivných místech | Není nastaveno vodítko pro přerušení | Poskytněte BreakHints do paginate_fragments() |
FAQ
Jaký je rozdíl mezi boxem a fragmentem?
Boxy (BoxNode) popisují strukturu rozvržení odvozenou ze stylů; fragmenty (BlockFragment, LineFragment) jsou umístěné výsledky s geometrií.
Zvládá engine stránkování?
Ano — paginate_fragments() vytváří PageFragment stránky s okrajovými boxy.
Odkud pocházejí textové běhy?
Vložený obsah je tvarován do objektů ShapedRun a sestavován do řádků LineFragment.
API Reference Shrnutí
| Třída/Metoda | Popis: |
|---|---|
build_box_tree | Odvoďte strom boxů ze stylovaného DOM |
layout_block_tree | Spusťte blokové rozložení nad stromem boxů |
layout_inline_fragments | Sestavit inline obsah do řádků |
paginate_fragments | Rozdělit fragmenty na stránky |
BoxNode | Jedna box v rozvržení struktury |
PageFragment | Jedna rozvržená stránka |