Motor de diseño

Motor de maquetación

La capa de maquetación convierte un DOM con estilo en geometría: un árbol de cajas, luego fragmentos con tamaños y posiciones. Es la etapa después de los estilos calculados, y sus resultados son objetos Python simples que puedes inspeccionar.


Del DOM al árbol de cajas

build_box_tree() produce un BoxRoot de BoxNode entradas a partir de un documento con estilo, clasificando el modelo de presentación de cada elemento mediante classify_display() contra la enumeración Display. ComputedStyle y EdgeSizes transportan el estilo por caja y las mediciones del modelo de caja.

Maquetación de bloques

layout_block_tree() realiza la maquetación a nivel de bloque sobre la estructura de cajas, produciendo un FragmentRoot que contiene BlockFragment entradas con geometría resuelta.

Maquetación en línea

El contenido en línea se moldea en piezas ShapedRun y InlineTextFragment, ensambladas en líneas LineFragment mediante layout_inline_fragments() y flush_inline_run().

Pagination

paginate_fragments() divide la salida de fragmentos en PageFragment páginas, respetando BreakHints, con PageMarginBoxes modelando áreas de margen de página y flush_page() finalizando cada página.


Consejos y Mejores Prácticas

  • Resuelve los estilos computados antes del diseño — el árbol de cajas se deriva de los elementos con estilo
  • Inspecciona EdgeSizes cuando las dimensiones de la caja parezcan incorrectas; los márgenes y el relleno se resuelven allí
  • Mantén el árbol de cajas y el árbol de fragmentos separados en tu modelo mental: las cajas describen la estructura, los fragmentos describen la geometría colocada

Problemas Comunes

ProblemaCausaSolución
Salida de fragmento vacíoEjecución de diseño en un árbol sin estilo o vacíoAdjunte primero las hojas de estilo y el contenido
Clasificación de visualización inesperadaEl display calculado del elemento difiere de la suposiciónVerifique el resultado de classify_display() para la caja
Saltos de página en lugares extrañosIndicaciones de salto no establecidasProporcione BreakHints a paginate_fragments()

FAQ

¿Cuál es la diferencia entre una caja y un fragmento?

Las cajas (BoxNode) describen la estructura de diseño derivada de los estilos; los fragmentos (BlockFragment, LineFragment) son los resultados ubicados con geometría.

¿El motor maneja la paginación?

Sí — paginate_fragments() produce PageFragment páginas con cajas de margen.

¿De dónde provienen los segmentos de texto?

El contenido en línea se forma en objetos ShapedRun y se ensambla en líneas LineFragment.


API Reference Resumen

Clase/MétodoDescripción
build_box_treeDerive el árbol de cajas a partir de un DOM con estilo
layout_block_treeEjecutar el diseño de bloques sobre el árbol de cajas
layout_inline_fragmentsEnsambla el contenido en línea en líneas
paginate_fragmentsDividir fragmentos en páginas
BoxNodeUna caja en la estructura de diseño
PageFragmentUna página maquetada

Ver también

 Español