Motor de randare
Motor de layout
Stratul de layout transformă un DOM stilizat în geometrie: un arbore de cutii, apoi fragmente cu dimensiuni și poziții. Este etapa de după stilurile calculate, iar ieșirile sale sunt obiecte simple Python pe care le poți inspecta.
De la DOM la arborele de cutii
build_box_tree() produce un BoxRoot de BoxNode intrări dintr-un document stilizat, clasificând modelul de afișare al fiecărui element prin classify_display() în raport cu enumerarea Display. ComputedStyle și EdgeSizes conțin stilul per-cutie și măsurătorile modelului de cutie.
Aranjare pe bloc
layout_block_tree() efectuează aranjarea la nivel de bloc peste arborele de cutii, producând un FragmentRoot care conține BlockFragment intrări cu geometrie rezolvată.
Aranjare în linie
Conținutul în linie este modelat în piese ShapedRun și InlineTextFragment, asamblate în linii LineFragment prin layout_inline_fragments() și flush_inline_run().
Pagination
paginate_fragments() împarte rezultatul fragmentului în pagini PageFragment, respectând BreakHints, cu PageMarginBoxes modelând zonele de margine ale paginii și flush_page() finalizând fiecare pagină.
Sfaturi și bune practici
- Rezolvă stilurile calculate înainte de aranjare — arborele de cutii derivă din elementele stilizate
- Inspectează
EdgeSizescând dimensiunile cutiei par incorecte; marginile și umplerea se rezolvă acolo - Păstrează arborele de cutii și arborele de fragmente distincte în modelul tău mental: cutiile descriu structura, fragmentele descriu geometria plasată
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
| Ieșire de fragment goală | Execuție de aspect pe un arbore neformatat sau gol | Atașați mai întâi foile de stil și conținutul |
| Clasificare de afișare neașteptată | Valoarea calculată display a elementului diferă de presupunere | Verificați rezultatul classify_display() pentru cutie |
| Întreruperi de pagină în locuri ciudate | Indicii de întrerupere ne setate | Furnizați BreakHints către paginate_fragments() |
FAQ
Care este diferența dintre un box și un fragment?
Box-urile (BoxNode) descriu structura de aranjament derivată din stiluri; fragmentele (BlockFragment, LineFragment) sunt rezultatele plasate cu geometrie.
Motorul gestionează paginarea?
Da — paginate_fragments() produce PageFragment pagini cu box-uri de margine.
De unde provin secvențele de text?
Conținutul în linie este modelat în obiecte ShapedRun și asamblat în linii LineFragment.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
build_box_tree | Derivați arborele de cutii dintr-un DOM stilizat |
layout_block_tree | Rulați aranjamentul pe blocuri asupra arborelui de cutii |
layout_inline_fragments | Asamblează conținutul în linie în linii |
paginate_fragments | Împarte fragmentele în pagini |
BoxNode | Un bloc în structura de aranjament |
PageFragment | O pagină aranjată |