Silnik układu

Silnik układu

Warstwa układu przekształca wystylowany DOM w geometrię: drzewo pudełek, a następnie fragmenty z rozmiarami i pozycjami. Jest to etap po obliczonych stylach, a jej wyniki to proste obiekty Python, które można przeglądać.


Od DOM do drzewa pudełek

build_box_tree() tworzy BoxRoot BoxNode wpisów z wystylowanego dokumentu, klasyfikując model wyświetlania każdego elementu za pomocą classify_display() względem wyliczenia Display. ComputedStyle i EdgeSizes zawierają styl per-pudełko oraz pomiary modelu pudełka.

Układ blokowy

layout_block_tree() wykonuje układ na poziomie bloków nad drzewem pudełek, produkując FragmentRoot zawierający BlockFragment wpisy z rozwiązanymi danymi geometrycznymi.

Układ inline

Zawartość inline jest kształtowana w ShapedRun i InlineTextFragment kawałki, składane w LineFragment linie za pomocą layout_inline_fragments() i flush_inline_run().

Pagination

paginate_fragments() dzieli wyjście fragmentu na PageFragment strony, respektując BreakHints, przy czym PageMarginBoxes modeluje obszary marginesów strony, a flush_page() finalizuje każdą stronę.


Wskazówki i najlepsze praktyki

  • Rozwiąż obliczone style przed układem — drzewo pudełek pochodzi od elementów ze stylami
  • Sprawdź EdgeSizes, gdy wymiary pudełka wydają się niepoprawne; marginesy i wypełnienie rozwiązują się tam
  • Trzymaj drzewo pudełek i drzewo fragmentów odrębne w swoim modelu mentalnym: pudełka opisują strukturę, fragmenty opisują umieszczoną geometrię

Typowe problemy

ProblemPrzyczynaRozwiązanie
Pusty wynik fragmentuUruchomienie układu na nieostylowanym lub pustym drzewieNajpierw dołącz arkusze stylów i treść
Nieoczekiwana klasyfikacja wyświetlaniaObliczona wartość display elementu różni się od założeniaSprawdź wynik classify_display() dla pola
Podziały stron w nieodpowiednich miejscachWskazówki podziału nie są ustawioneDostarcz BreakHints do paginate_fragments()

FAQ

Jaka jest różnica między boxem a fragmentem?

Boxy (BoxNode) opisują strukturę układu pochodzącą ze stylów; fragmenty (BlockFragment, LineFragment) to umieszczone wyniki z geometrią.

Czy silnik obsługuje paginację?

Tak — paginate_fragments() generuje PageFragment stron z margin boxes.

Skąd pochodzą ciągi tekstowe?

Treść inline jest kształtowana w obiekty ShapedRun i składana w linie LineFragment.


API Reference Podsumowanie

Klasa/MetodaOpis
build_box_treeWyprowadź drzewo pola ze stylowanego DOM
layout_block_treeUruchom układ blokowy nad drzewem pudełek
layout_inline_fragmentsZłóż zawartość inline w linie
paginate_fragmentsPodziel fragmenty na strony
BoxNodeJedno pudełko w strukturze układu
PageFragmentJedna strona układana

Zobacz także

 Polski