Mesin Tata Letak
Mesin Tata Letak
Lapisan tata letak mengubah DOM yang sudah di-styling menjadi geometri: sebuah pohon kotak, lalu fragmen dengan ukuran dan posisi. Ini adalah tahap setelah gaya yang dihitung, dan output-nya adalah objek Python biasa yang dapat Anda inspeksi.
Dari DOM ke Pohon Kotak
build_box_tree() menghasilkan BoxRoot berisi BoxNode entri dari dokumen yang telah di-styling, mengklasifikasikan model tampilan setiap elemen melalui classify_display() terhadap enumerasi Display. ComputedStyle dan EdgeSizes membawa gaya per-kotak serta pengukuran model kotak.
Tata Letak Blok
layout_block_tree() melakukan tata letak tingkat blok pada pohon kotak, menghasilkan FragmentRoot yang berisi BlockFragment entri dengan geometri yang telah diselesaikan.
Tata Letak Inline
Konten inline dibentuk menjadi ShapedRun dan InlineTextFragment, disusun menjadi baris LineFragment melalui layout_inline_fragments() dan flush_inline_run().
Pagination
paginate_fragments() membagi output fragmen menjadi PageFragment halaman, menghormati BreakHints, dengan PageMarginBoxes memodelkan area margin halaman dan flush_page() menyelesaikan setiap halaman.
Tips dan Praktik Terbaik
- Selesaikan gaya terhitung sebelum tata letak — pohon kotak berasal dari elemen yang bergaya
- Periksa
EdgeSizesketika dimensi kotak terlihat salah; margin dan padding diselesaikan di sana - Jaga agar pohon kotak dan pohon fragmen tetap terpisah dalam model mental Anda: kotak menggambarkan struktur, fragmen menggambarkan geometri yang ditempatkan
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Output fragmen kosong | Penataan dijalankan pada pohon yang tidak bergaya atau kosong | Lampirkan stylesheet dan konten terlebih dahulu |
| Klasifikasi tampilan tidak terduga | Nilai terhitung display elemen berbeda dari asumsi | Periksa hasil classify_display() untuk kotak |
| Pemecahan halaman di tempat yang tidak tepat | Break hints tidak disetel | Berikan BreakHints kepada paginate_fragments() |
FAQ
Apa perbedaan antara kotak dan fragmen?
Kotak (BoxNode) menggambarkan struktur tata letak yang berasal dari gaya; fragmen (BlockFragment, LineFragment) adalah hasil penempatan dengan geometri.
Apakah mesin menangani paginasi?
Ya — paginate_fragments() menghasilkan PageFragment halaman dengan kotak margin.
Dari mana rangkaian teks berasal?
Konten sebaris dibentuk menjadi objek ShapedRun dan dirakit menjadi baris LineFragment.
API Reference Ringkasan
| Kelas/Metode | Deskripsi |
|---|---|
build_box_tree | Turunkan pohon kotak dari DOM yang bergaya |
layout_block_tree | Jalankan tata letak blok pada pohon kotak |
layout_inline_fragments | Susun konten inline menjadi baris |
paginate_fragments | Pisahkan fragmen menjadi halaman |
BoxNode | Satu kotak dalam struktur tata letak |
PageFragment | Satu halaman yang telah ditata |