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
EdgeSizesnä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
| Problem | Orsak | Åtgärd |
|---|---|---|
| Tom fragmentutmatning | Layout körs på ett oformat eller tomt träd | Bifoga stilmallar och innehåll först |
| Oväntad displayklassificering | Elementets beräknade display skiljer sig från antagandet | Kontrollera classify_display() resultat för boxen |
| Sidbrytningar på konstiga ställen | Bryttips ej satta | Tillhandahå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/Metod | Beskrivning |
|---|---|
build_box_tree | Avled boxträdet från en stylad DOM |
layout_block_tree | Kör blocklayout över boxträdet |
layout_inline_fragments | Sätt ihop inline-innehåll i rader |
paginate_fragments | Dela upp fragment i sidor |
BoxNode | En box i layoutstrukturen |
PageFragment | En layoutad sida |