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ă EdgeSizes câ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 golAtașați mai întâi foile de stil și conținutul
Clasificare de afișare neașteptatăValoarea calculată display a elementului diferă de presupunereVerificați rezultatul classify_display() pentru cutie
Întreruperi de pagină în locuri ciudateIndicii de întrerupere ne setateFurnizaț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_treeDerivați arborele de cutii dintr-un DOM stilizat
layout_block_treeRulați aranjamentul pe blocuri asupra arborelui de cutii
layout_inline_fragmentsAsamblează conținutul în linie în linii
paginate_fragmentsÎmparte fragmentele în pagini
BoxNodeUn bloc în structura de aranjament
PageFragmentO pagină aranjată

Vezi și:

 Română