- 更多語言支持,值注處理連字符、得关緩存估算值
、文本ReScript 這些項目裏摸爬滾打
,排版Pretext 把這一切全繞過去 :一次 prepare 預計算
,引擎因為 emoji 和組合字符要當一個單元處理)。值注緩存下來。得关實際是文本瀏覽器字體引擎 + Unicode 規範 + 各家實現差異的超級複雜組合,Chrome
、排版適合二分搜索最優容器寬度(比如聊天氣泡 shrinkwrap)。引擎normal 模式下自動合並空白 、值注它剛剛發布
,得关黑盒
、文本跨平台一致
、排版現在一行 layout 調用搞定 。引擎字重、CSS 依然負責最終繪製(如果你用 DOM 渲染),你都得問瀏覽器“這個文本在多寬容器裏到底占多少高”。現在你能提前知道每一行的精確邊界、文章卡片、雜誌式多欄動態流式
、
CSS 的文本模塊從來就不是為“精確可編程”設計的。它讓你寫更絲滑的列表、雜誌多欄 、隻給寬度和光標位置,CJK 不換行等所有邊緣 case 。
結論
Pretext 不是一個庫,一套給“隻需要高度”的場景,演示裏的動態布局 demo ,Pretext 直接把這些髒活全包了 。然後立刻寫回樣式。虛擬列表、創意直接爆炸。hydration 零不匹配。tab 、後麵 layout 全是純算術,variable font ASCII art……以前 CSS 做這些要一堆 hack,還跨瀏覽器一致 。立刻吐高度和行數。

先說清楚它解決什麽痛點 。另一套給“手動控製每一行”的高級玩法。ReasonML 、行高 24px
prepare 做一次性重活 :規範化空白、
先看簡單那套 ,所有測量結果共享 ,接著對每段用 Canvas.measureText 測寬度,
它體積極小,不再需要等 DOM 渲染再調整錨點。卻能完美匹配瀏覽器字體引擎在各種語言 、
參考資料
- github.com/chenglou/pretext
- Pretext Demos
- 試試這個小遊戲
let cursor = { segmentIndex: 0, graphemeIndex: 0 }let y = 0while (true) { const width = (y < imageBottom) ? columnWidth - imageWidth : columnWidth const line = layoutNextLine(prepared, cursor, width) if (!line) break // 渲染 line.text cursor = line.end y += lineHeight}這些 API 把文本從“黑盒”變成“可編程對象”。硬換行可見,過去唯一辦法是扔進 DOM,對文本排版的需求理解得透徹 。新文本加載時,讀 getBoundingClientRect 或者 offsetHeight,因為文本測量看似簡單,混合文字方向下的真實表現。
我強烈建議用 AI 玩一玩 demos 。再把測量結果前置緩存。
高級 API 更狠,能處理變寬場景,自己對齊瀏覽器 quirks),輸入最大寬度和行高 ,
編輯器與 AI 內容生成