Công cụ bố cục

Động cơ bố cục

Lớp bố cục chuyển một DOM đã được định kiểu thành hình học: một cây hộp, sau đó là các đoạn với kích thước và vị trí. Đây là giai đoạn sau các kiểu đã tính toán, và các đầu ra của nó là các đối tượng Python thuần túy mà bạn có thể kiểm tra.


Từ DOM tới Cây Hộp

build_box_tree() tạo ra một BoxRoot gồm BoxNode mục từ một tài liệu đã định kiểu, phân loại mô hình hiển thị của mỗi phần tử thông qua classify_display() đối chiếu với danh mục Display. ComputedStyle và EdgeSizes mang kiểu per-box và các đo lường mô hình hộp.

Bố cục khối

layout_block_tree() thực hiện bố cục cấp khối trên cây hộp, tạo ra một FragmentRoot chứa BlockFragment mục với hình học đã được giải quyết.

Bố cục nội tuyến

Nội dung nội tuyến được tạo thành các mảnh ShapedRun và InlineTextFragment, sau đó lắp ráp thành các dòng LineFragment thông qua layout_inline_fragments() và flush_inline_run().

Pagination

paginate_fragments() chia đầu ra fragment thành PageFragment trang, tuân theo BreakHints, với PageMarginBoxes mô hình hoá các khu vực lề trang và flush_page() hoàn thiện mỗi trang.


Mẹo và Thực hành Tốt nhất

  • Giải quyết các kiểu đã tính toán trước khi bố trí — cây hộp được suy ra từ các phần tử đã được định kiểu
  • Kiểm tra EdgeSizes khi kích thước hộp trông sai; lề và khoảng đệm được giải quyết ở đó
  • Giữ cây hộp và cây fragment tách biệt trong mô hình tư duy của bạn: các hộp mô tả cấu trúc, các fragment mô tả hình học đã đặt

Các vấn đề thường gặp

Vấn đềNguyên nhânKhắc phục
Đầu ra đoạn rỗngBố cục chạy trên cây chưa được định dạng hoặc trốngĐính kèm stylesheet và nội dung trước
Phân loại hiển thị không mong đợiGiá trị tính toán display của phần tử khác với giả địnhKiểm tra kết quả classify_display() cho hộp
Ngắt trang ở các vị trí lẻChưa thiết lập gợi ý ngắtCung cấp BreakHints đến paginate_fragments()

FAQ

Sự khác nhau giữa hộp và đoạn là gì?

Các hộp (BoxNode) mô tả cấu trúc bố cục được suy ra từ các kiểu; các đoạn (BlockFragment, LineFragment) là kết quả đã được đặt vị trí kèm hình học.

Động cơ có xử lý phân trang không?

Có — paginate_fragments() tạo ra PageFragment trang với các hộp lề.

Các đoạn văn bản đến từ đâu?

Nội dung nội tuyến được định dạng thành các đối tượng ShapedRun và lắp ráp thành các dòng LineFragment.


API Reference Tóm tắt

Lớp/Phương thứcMô tả
build_box_treeRút ra cây hộp từ DOM đã được định dạng
layout_block_treeThực hiện bố cục khối trên cây hộp
layout_inline_fragmentsLắp ráp nội dung nội tuyến thành các dòng
paginate_fragmentsChia các đoạn thành các trang
BoxNodeMột hộp trong cấu trúc bố cục
PageFragmentMột trang được bố trí

Xem thêm

 Tiếng Việt