Layout-Engine

Layout-Engine

Die Layout-Ebene wandelt ein gestyltes DOM in Geometrie um: einen Box-Baum, dann Fragmente mit Größen und Positionen. Sie ist die Phase nach den berechneten Stilen, und ihre Ausgaben sind einfache Python-Objekte, die Sie inspizieren können.


Vom DOM zum Box-Baum

build_box_tree() erzeugt ein BoxRoot von BoxNode Einträgen aus einem gestylten Dokument, wobei jedes Elementmodell über classify_display() gegen die Display-Aufzählung klassifiziert wird. ComputedStyle und EdgeSizes enthalten die pro-Box-Stile und Box-Modell-Messungen.

Block-Layout

layout_block_tree() führt ein Block-Level-Layout über den Box-Baum aus und erzeugt ein FragmentRoot, das BlockFragment Einträge mit aufgelöster Geometrie enthält.

Inline-Layout

Inline-Inhalt wird zu ShapedRun und InlineTextFragment Teilen geformt, zu LineFragment Zeilen zusammengefügt über layout_inline_fragments() und flush_inline_run().

Pagination

paginate_fragments() teilt die Fragmentausgabe in PageFragment Seiten, wobei BreakHints beachtet wird, mit PageMarginBoxes zur Modellierung von Seitenrandbereichen und flush_page() zum Abschluss jeder Seite.


Tipps und bewährte Verfahren

  • Ermitteln Sie berechnete Stile vor dem Layout — der Boxbaum leitet sich von gestylten Elementen ab
  • Untersuchen Sie EdgeSizes, wenn Box-Dimensionen falsch aussehen; margins und padding werden dort aufgelöst
  • Behalten Sie in Ihrem mentalen Modell den Boxbaum und den Fragmentbaum getrennt: Boxen beschreiben die Struktur, Fragmente beschreiben die platzierte Geometrie

Häufige Probleme

ProblemUrsacheLösung
Leere FragmentausgabeLayoutlauf auf einem ungestylten oder leeren BaumStylesheets und Inhalte zuerst anhängen
Unerwartete AnzeigeklassifizierungBerechneter display des Elements weicht von der Annahme abÜberprüfen Sie das Ergebnis von classify_display() für die Box
Seitenumbrüche an ungewöhnlichen StellenUmbruchhinweise nicht gesetztStellen Sie BreakHints für paginate_fragments() bereit

FAQ

Was ist der Unterschied zwischen einer Box und einem Fragment?

Boxen (BoxNode) beschreiben die aus Stilvorlagen abgeleitete Layoutstruktur; Fragmente (BlockFragment, LineFragment) sind die platzierten Ergebnisse mit Geometrie.

Unterstützt die Engine die Paginierung?

Ja — paginate_fragments() erzeugt PageFragment Seiten mit Randboxen.

Woher kommen Textläufe?

Inline-Inhalt wird zu ShapedRun-Objekten geformt und zu LineFragment-Zeilen zusammengesetzt.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
build_box_treeLeiten Sie den Box-Baum aus einem gestylten DOM ab
layout_block_treeFühre das Blocklayout über den Boxbaum aus
layout_inline_fragmentsInline-Inhalt in Zeilen zusammenführen
paginate_fragmentsFragmente in Seiten aufteilen
BoxNodeEine Box in der Layoutstruktur
PageFragmentEine gestaltete Seite

Siehe auch

 Deutsch