Layoutmotor

Layoutmotor

Layoutlagret omvandlar ett stylat DOM till geometri: ett boxträd, sedan fragment med storlekar och positioner. Det är steget efter beräknade stilar, och dess utdata är enkla Python-objekt som du kan inspektera.


Från DOM till boxträd

build_box_tree() producerar en BoxRoot av BoxNode poster från ett stylat dokument, som klassificerar varje elements visningsmodell via classify_display() mot Display-enumerationen. ComputedStyle och EdgeSizes bär per-lådstil och box-model-mått.

Blocklayout

layout_block_tree() utför blocknivålayout över boxträdet, och producerar en FragmentRoot som innehåller BlockFragment poster med löst geometrin.

Inline-layout

Inline-innehåll formas till ShapedRun och InlineTextFragment delar, sammansatta till LineFragment rader via layout_inline_fragments() och flush_inline_run().

Pagination

paginate_fragments() delar fragmentutdata i PageFragment sidor, med hänsyn till BreakHints, där PageMarginBoxes modellerar sidmarginsområden och flush_page() slutför varje sida.


Tips och bästa praxis

  • Lös beräknade stilar innan layout — boxträdet härrör från stylade element
  • Inspektera EdgeSizes när boxdimensioner ser felaktiga ut; marginaler och padding löses där
  • Håll boxträdet och fragmentträdet åtskilda i din mentala modell: boxar beskriver struktur, fragment beskriver placerad geometri

Vanliga problem

ProblemOrsakÅtgärd
Tom fragmentutmatningLayout körs på ett oformat eller tomt trädBifoga stilmallar och innehåll först
Oväntad displayklassificeringElementets beräknade display skiljer sig från antagandetKontrollera classify_display() resultat för boxen
Sidbrytningar på konstiga ställenBryttips ej sattaTillhandahåll BreakHints till paginate_fragments()

FAQ

Vad är skillnaden mellan en box och ett fragment?

Boxar (BoxNode) beskriver layoutstrukturen som härstammar från stilar; fragment (BlockFragment, LineFragment) är de placerade resultaten med geometri.

Hanterar motorn paginering?

Ja — paginate_fragments() producerar PageFragment sidor med marginalboxar.

Var kommer textsekvenserna från?

Infogat innehåll formas till ShapedRun objekt och sammansätts till LineFragment rader.


API Reference Sammanfattning

Klass/MetodBeskrivning
build_box_treeAvled boxträdet från en stylad DOM
layout_block_treeKör blocklayout över boxträdet
layout_inline_fragmentsSätt ihop inline-innehåll i rader
paginate_fragmentsDela upp fragment i sidor
BoxNodeEn box i layoutstrukturen
PageFragmentEn layoutad sida

Se även

 Svenska