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
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Pusty wynik fragmentu | Uruchomienie układu na nieostylowanym lub pustym drzewie | Najpierw dołącz arkusze stylów i treść |
| Nieoczekiwana klasyfikacja wyświetlania | Obliczona wartość display elementu różni się od założenia | Sprawdź wynik classify_display() dla pola |
| Podziały stron w nieodpowiednich miejscach | Wskazówki podziału nie są ustawione | Dostarcz 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/Metoda | Opis |
|---|---|
build_box_tree | Wyprowadź drzewo pola ze stylowanego DOM |
layout_block_tree | Uruchom układ blokowy nad drzewem pudełek |
layout_inline_fragments | Złóż zawartość inline w linie |
paginate_fragments | Podziel fragmenty na strony |
BoxNode | Jedno pudełko w strukturze układu |
PageFragment | Jedna strona układana |