LayoutNG 是新版版面配置引擎,預計在 Chrome 76 發布。我們將推出幾項令人期待的即時改善功能,並陸續推出更多效能提升和進階版版面配置功能。
新功能
- 改善效能隔離。
- 更完善的支援:支援拉丁文以外的文字。
- 修正浮動和邊界的問題。
- 修正大量網頁相容性問題。
請注意,LayoutNG 會分階段推出。在 Chrome 76 中,LayoutNG 用於內嵌和區塊版面配置。其他版面配置基本元素 (例如表格、彈性容器、格線和區塊分割) 將在後續版本中替換。
開發人員可見的異動
雖然對使用者可見的影響應會降到最低,但 LayoutNG 會以非常細微的方式變更某些行為、修正數百項測試,並改善與其他瀏覽器的相容性。儘管我們盡了最大努力,但這項變更可能會導致部分網站和應用程式的顯示或行為略有不同。
成效特徵也大不相同;雖然整體成效與先前相似或略勝一籌,但某些用途可能會看到成效提升,而其他用途則可能會出現某種程度的退步,至少在短期內是如此。
浮動
LayoutNG 重新實作對浮動元素 (float: left;
和 float: right;
) 的支援,修正浮動元素與其他內容相關的多項正確性問題。
疊加的內容
舊版浮動實作方式在將內容置於浮動元素周圍時,未正確考量邊界,導致內容部分或完全重疊浮動元素。這類錯誤最常見的情況是,圖片位於段落旁邊,而避開邏輯無法考量行高。(請參閱 Chromium 錯誤 #861540)。
同一個行內也可能會發生同樣的問題。以下範例顯示浮動元素 (#895962) 後方有負邊距的區塊元素。文字不得與浮動文字重疊。
格式化背景資訊位置
當形成區塊格式化內容的元素在浮動小工具旁邊調整大小時,舊版版面配置引擎會嘗試調整區塊的大小,直到達到固定次數後才會放棄。這種做法會導致不可預測且不穩定的行為,且與其他實作方式不符。在 LayoutNG 中,系統會在調整區塊大小時考量所有浮動值。(請參閱 Chromium 錯誤 #548033)。
絕對和固定定位現在更符合 W3C 規範,且與其他瀏覽器的行為更為一致。這兩種方法的差異最明顯的情況有兩種:
- 多行內嵌包含區塊
如果絕對定位的包含區塊橫跨多行,舊版引擎可能會錯誤地只使用部分行來計算包含區塊邊界。 - 垂直書寫模式
舊版引擎在垂直書寫模式中將流程外元素放置在預設位置時,會發生許多問題。如要進一步瞭解改善的寫入模式支援功能,請參閱下一節。
由右至左 (RTL) 語言和直向書寫模式
LayoutNG 的設計初衷是為了支援直向書寫模式和 RTL 語言,包括雙向內容。
雙向文字
LayoutNG 支援 萬國碼標準定義的最新雙向演算法。這項更新不僅修正各種轉譯錯誤,還包含缺少的功能,例如支援成對的括號 (請參閱 Chromium 錯誤 #302469)。
直交流
LayoutNG 可提高垂直流版面配置的準確度,包括絕對定位物件的放置方式,以及正交流箱的大小 (尤其是在使用百分比時)。在 W3C 測試套件中的 1,258 項測試中,103 項在舊版版面配置引擎中失敗的測試在 LayoutNG 中通過。
內建大小
在正交書寫模式中,如果區塊包含子項,現在會正確計算內在大小。
文字版面配置和斷行
舊版 Chromium 版面配置引擎會逐一排列文字元素和行。這種做法在大多數情況下都運作良好,但需要大量額外的複雜性才能支援指令碼並達到良好的效能。而且也容易出現測量不一致的情形,導致大小與內容容器的大小或內容出現細微差異,或出現不必要的換行符號。
在 LayoutNG 中,文字會以段落層級排版,然後分割成多行。這可提升效能、提升文字算繪品質,並提供更一致的斷行方式。以下詳細說明最明顯的差異。
跨元素邊界彙整
在某些文字系統中,某些字元在相鄰時可視為連在一起。請參考以下阿拉伯文範例:
在 LayoutNG 中,即使字元位於不同元素中,也能進行彙整。套用不同樣式時,連接也會保留。(請參閱 Chromium 錯誤 #6122)。
字元是語言書寫系統的最小單位。舉例來說,在英文和其他使用拉丁字母的語言中,每個字母都是一個字元。
下圖分別顯示以下 HTML 在舊版版面配置引擎和 LayoutNG 中的轉譯結果:
<div>نسق</div>
<div>نس<span>ق</span></div>
中文、日文和韓文 (CJK) 連字元
雖然 Chromium 已支援連字元,並預設啟用連字元,但仍有一些限制:由於採用最佳化算繪技術,舊版版面配置引擎不支援涉及多個 CJK 代碼點的連字元。LayoutNG 會移除這些限制,並支援所有書寫系統的連字元。
以下範例顯示使用 Adobe SourceHanSansJP 字型的三個選用連字:
尺寸與內容元素
對於大小與內容相符的元素 (例如內嵌區塊),目前的版面配置引擎會先計算區塊的大小,然後對內容執行版面配置。在某些情況下 (例如字型經過大量調整),這可能會導致內容大小與區塊不相符。在 LayoutNG 中,系統會根據實際內容的大小來調整區塊大小,因此這個失敗模式已遭到淘汰。
以下範例顯示了大小與內容相符的黃色方塊。它使用 Lato 字型,該字型會使用字距調整 T 和 - 之間的間距。黃色方塊的邊界應與文字的邊界相符。
換行
與上述問題類似,如果大小與內容區塊的內容較大 (寬度較寬),內容有時可能會不必要地換行。這種情況相當罕見,但有時會發生在混合方向性的內容。
其他資訊
如要進一步瞭解 LayoutNG 修正的特定相容性問題和錯誤,請參閱上述連結的相關問題,或搜尋 Chromium 錯誤資料庫中標示為「Fixed-In-LayoutNG」的錯誤。
如果您懷疑 LayoutNG 可能導致網站中斷,請提交錯誤報告,我們會進行調查。