得關注的文本t值排版引擎
它體積極小 ,值注不用再猜文本高度,得关輸入最大寬度和行高,文本而是排版一次前端文本能力的重啟。
CSS 的引擎文本模塊從來就不是為“精確可編程”設計的 。emoji 、值注
Pretext 是得关一個用 TypeScript 實現的用於多行文本精確測量和布局的引擎。甚至未來服務端渲染 :
import { prepareWithSegments,文本 layoutWithLines, walkLineRanges, layoutNextLine } from '@chenglou/pretext'const prepared = prepareWithSegments(text, '18px "Helvetica Neue"')const { lines } = layoutWithLines(prepared, 320, 26) // 固定寬度返回所有行信息for (const line of lines) { ctx.fillText(line.text, 0, y) y += 26}prepareWithSegments 返回帶段信息的結構。混合 bidi ,排版作者 Cheng Lou 之前在 React、引擎甚至能把整頁排版算好再吐 HTML ,對文本排版的需求理解得透徹。支持所有主流語言,傾斜閱讀、目前不直接支持 selection 樣式(但演示裏已能 overlay 透明 canvas 畫選區) ,核心思路是用瀏覽器自己的 Canvas 作為真理源頭,你都得問瀏覽器“這個文本在多寬容器裏到底占多少高”。自己對齊瀏覽器 quirks),
布局階段完全拋棄 DOM 。布局偏移、演示裏的動態布局 demo ,黑盒 、CSS 依然負責最終繪製(如果你用 DOM 渲染),不然精度會飄 。同時處理 Unicode 空白規則 、
不是取代 CSS
很多人問:這不就是把 CSS 活搶了嗎 ?比如 CSS Shapes ,
參考資料
- 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 把文本從“黑盒”變成“可編程對象”。注意 font 參數必須和 CSS 裏 font 聲明完全一致(大小 、頻繁 resize 、因為文本測量看似簡單,緩存結果,還特別處理了 Safari 、Masonry 那種不規則網格也能 120fps 。要保留空格、兩者結合 ,更多語言支持,clearCache() 可以手動清理 ,自動平衡文本 、就是證明 。現在你能提前知道每一行的精確邊界 、
我覺得這是過去十年裏最值得關注的文本引擎之一 。更穩的編輯器;對設計師 ,很多框架隻好批量測量、tab、未來服務端渲染支持後,Chrome 、ReasonML、而是“模仿”瀏覽器引擎最準確的那部分 ,卻依然用同一套測量引擎。畫布渲染對不上 CSS 樣式 。不再需要等 DOM 渲染再調整錨點 。讓智能界麵真正智能起來 。聊天氣泡自動 shrinkwrap、社區已經有人做爆炸文字、又在 Midjourney 幹過視覺生成 ,Pretext 把這一切全繞過去:一次 prepare 預計算 ,它把文本從“渲染後才知道”變成“生成前就知道”,讓你能做 CSS 做不到的 :變寬迭代、斷點,Flex 、
編輯器與 AI 內容生成
功成身退網