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
EdgeSizescuando 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
| Problema | Causa | Solución |
|---|---|---|
| Salida de fragmento vacío | Ejecución de diseño en un árbol sin estilo o vacío | Adjunte primero las hojas de estilo y el contenido |
| Clasificación de visualización inesperada | El display calculado del elemento difiere de la suposición | Verifique el resultado de classify_display() para la caja |
| Saltos de página en lugares extraños | Indicaciones de salto no establecidas | Proporcione 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étodo | Descripción |
|---|---|
build_box_tree | Derive el árbol de cajas a partir de un DOM con estilo |
layout_block_tree | Ejecutar el diseño de bloques sobre el árbol de cajas |
layout_inline_fragments | Ensambla el contenido en línea en líneas |
paginate_fragments | Dividir fragmentos en páginas |
BoxNode | Una caja en la estructura de diseño |
PageFragment | Una página maquetada |