Motor de Layout

Motor de Layout

A camada de layout converte um DOM estilizado em geometria: uma árvore de caixas, depois fragmentos com tamanhos e posições. É a fase após os estilos computados, e suas saídas são objetos Python simples que você pode inspecionar.


Do DOM à Árvore de Caixas

build_box_tree() produz uma BoxRoot de BoxNode entradas a partir de um documento estilizado, classificando o modelo de exibição de cada elemento via classify_display() contra a enumeração Display. ComputedStyle e EdgeSizes carregam o estilo por caixa e as medições do modelo de caixa.

Layout de Bloco

layout_block_tree() realiza o layout em nível de bloco sobre a árvore de caixas, produzindo uma FragmentRoot contendo BlockFragment entradas com geometria resolvida.

Layout Inline

O conteúdo inline é modelado em peças ShapedRun e InlineTextFragment, montadas em linhas LineFragment via layout_inline_fragments() e flush_inline_run().

Pagination

paginate_fragments() divide a saída de fragmentos em PageFragment páginas, respeitando BreakHints, com PageMarginBoxes modelando áreas de margem da página e flush_page() finalizando cada página.


Dicas e Melhores Práticas

  • Resolva estilos computados antes do layout — a estrutura de caixas deriva dos elementos estilizados
  • Inspecione EdgeSizes quando as dimensões das caixas parecem incorretas; margens e preenchimento são resolvidos lá
  • Mantenha a árvore de caixas e a árvore de fragmentos distintas em seu modelo mental: caixas descrevem a estrutura, fragmentos descrevem a geometria posicionada

Problemas Comuns

ProblemaCausaCorreção
Saída de fragmento vaziaExecução de layout em uma árvore sem estilo ou vaziaAnexe folhas de estilo e conteúdo primeiro
Classificação de exibição inesperadaO display computado do elemento difere da suposiçãoVerifique o resultado classify_display() para a caixa
Quebras de página em locais estranhosDicas de quebra não definidasForneça BreakHints para paginate_fragments()

FAQ

Qual é a diferença entre uma caixa e um fragmento?

Caixas (BoxNode) descrevem a estrutura de layout derivada dos estilos; fragmentos (BlockFragment, LineFragment) são os resultados posicionados com geometria.

O motor lida com paginação?

Sim — paginate_fragments() produz PageFragment páginas com caixas de margem.

De onde vêm as sequências de texto?

O conteúdo em linha é moldado em objetos ShapedRun e montado em linhas LineFragment.


API Reference Resumo

Classe/MétodoDescrição
build_box_treeDerive a árvore de caixas a partir de um DOM estilizado
layout_block_treeExecute o layout de blocos sobre a árvore de caixas
layout_inline_fragmentsMonte o conteúdo inline em linhas
paginate_fragmentsDivida fragmentos em páginas
BoxNodeUma caixa na estrutura de layout
PageFragmentUma página formatada

Ver também

 Português