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émPříčinaOprava
Výstup prázdného fragmentuRozvržení spuštěno na neformátovaném nebo prázdném stromuNejprve připojte šablony stylů a obsah
Neočekávaná klasifikace zobrazeníVypočtená hodnota display prvku se liší od předpokladuZkontrolujte výsledek classify_display() pro box
Zalomení stránky na podivných místechNení 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/MetodaPopis:
build_box_treeOdvoďte strom boxů ze stylovaného DOM
layout_block_treeSpusťte blokové rozložení nad stromem boxů
layout_inline_fragmentsSestavit inline obsah do řádků
paginate_fragmentsRozdělit fragmenty na stránky
BoxNodeJedna box v rozvržení struktury
PageFragmentJedna rozvržená stránka

Viz také:

 Čeština