Motore di layout

Motore di layout

Il livello di layout trasforma un DOM stilizzato in geometria: un albero di box, poi frammenti con dimensioni e posizioni. È la fase successiva agli stili calcolati, e i suoi output sono semplici oggetti Python che puoi ispezionare.


Dal DOM all’albero di box

build_box_tree() genera un BoxRoot di BoxNode voci da un documento stilizzato, classificando il modello di visualizzazione di ciascun elemento tramite classify_display() rispetto all’enumerazione Display. ComputedStyle e EdgeSizes contengono lo stile per box e le misurazioni del modello di box.

Layout a blocchi

layout_block_tree() esegue il layout a livello di blocco sull’albero di box, generando un FragmentRoot contenente BlockFragment voci con geometria risolta.

Layout in linea

Il contenuto in linea viene modellato in pezzi ShapedRun e InlineTextFragment, assemblati in linee LineFragment tramite layout_inline_fragments() e flush_inline_run().

Pagination

paginate_fragments() divide l’output dei frammenti in PageFragment pagine, rispettando BreakHints, con PageMarginBoxes che modella le aree di margine della pagina e flush_page() che finalizza ogni pagina.


Suggerimenti e migliori pratiche

  • Risolvi gli stili calcolati prima del layout — il box tree deriva dagli elementi stilizzati
  • Ispeziona EdgeSizes quando le dimensioni della casella sembrano errate; i margini e il padding si risolvono lì
  • Mantieni il box tree e il fragment tree distinti nel tuo modello mentale: le box descrivono la struttura, i frammenti descrivono la geometria posizionata

Problemi comuni

ProblemaCausaCorrezione
Output del frammento vuotoEsecuzione del layout su un albero non stilizzato o vuotoAllega prima i fogli di stile e i contenuti
Classificazione di visualizzazione inattesaIl display calcolato dell’elemento differisce dall’assunzioneVerifica il risultato di classify_display() per la casella
Interruzioni di pagina in punti straniSuggerimenti di interruzione non impostatiFornisci BreakHints a paginate_fragments()

FAQ

Qual è la differenza tra un box e un frammento?

I box (BoxNode) descrivono la struttura di layout derivata dagli stili; i frammenti (BlockFragment, LineFragment) sono i risultati posizionati con geometria.

Il motore gestisce l’impaginazione?

Sì — paginate_fragments() produce PageFragment pagine con box di margine.

Da dove provengono i blocchi di testo?

Il contenuto in linea viene modellato in oggetti ShapedRun e assemblato in linee LineFragment.


API Reference Riepilogo

Classe/MetodoDescrizione
build_box_treeDeriva l’albero della casella da un DOM stilizzato
layout_block_treeEsegui il layout a blocchi sull’albero dei box
layout_inline_fragmentsAssembla il contenuto inline in righe
paginate_fragmentsDividi i frammenti in pagine
BoxNodeUn box nella struttura del layout
PageFragmentUna pagina impaginata

Vedi anche

 Italiano