CSS text-wrap: balance

這項傳統排版技術可手動撰寫換行符,讓文字區塊保持平衡,現在也適用於 CSS。

text-wrapbalance 值屬於 CSS Text Level 4。請參閱這篇文章中的範例,瞭解一行 CSS 如何大幅改善文字版面配置。

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 121.
  • Safari: 17.5.

試用示範版

如果沒有 text-wrap: balance,設計師、內容編輯者和發布商幾乎沒有工具可以變更行平衡的方式。他們能使用的最佳選項是 <wbr>&shy;,協助引導文字版面配置,針對換行和斷字位置做出更明智的決策。

開發人員無法得知標題或段落的最終大小、字型大小,甚至是語言。瀏覽器中包含所有變數,可有效且美觀地處理文字換行。因此,我們會看到如以下圖片所示的標題換行:

廣告標題以開發人員工具醒目顯示,跨越內嵌空間的完整寬度,且第二行有兩個懸掛字。
試用示範版
.unbalanced {
  max-inline-size: 50ch;
}

使用 text-wrap: balance (CSS Text 4),您可以要求瀏覽器找出最適合文字的平衡換行解決方案。瀏覽器知道所有因素,例如字型大小、語言和分配的區域。目前瀏覽器平衡文字換行的結果如下:

標題會像先前的開發人員工具一樣醒目顯示,但這次不會跨越整個寬度。標題會在結尾前換行,因此是平衡的文字區塊。
試用示範版
.balanced {
  max-inline-size: 50ch;
  text-wrap: balance;
}

並排顯示靜態圖片,且不疊加偵錯資訊,有助於進行比較。

上兩個範例會一併顯示,一個標示為不平衡,另一個則為平衡。

平衡的文字區塊會讓眼睛更舒適,也更容易吸引目光,整體而言更易於閱讀。

尋找平衡點

讀者最先看到的就是標題,因此標題應具備視覺吸引力,且容易閱讀。這能吸引使用者注意,並提供品質和保證感。良好的排版能讓讀者安心,鼓勵他們繼續閱讀。

傳統上,這項工作是由設計師手動或以光學方式完成,因為設計師平衡文字時,是為了讓眼睛感到舒適,而非數學。這個主題通常稱為指標與光學對齊。對於《紐約時報》等大型出版物而言,標題平衡是使用者體驗中非常重要的細節。

試用示範

在排版中平衡文字的歷史可追溯至印刷術的早期,當時印刷人員會手動放置字母。隨著工具和技術不斷演進,結果也隨之改變。 如今,設計師可運用顏色、粗細、大小等元素,在設計中平衡文字。

不過,網頁版可用的控制選項較少,因為文件會根據使用者變更大小和顏色。text-wrap: balance 運用印刷業設計師的成果和傳統,以自動化方式將文字平衡的藝術帶到網路上。

廣告標題平衡

這會是 text-wrap: balance 的主要用途,也應該是。利用大小吸引目光,並讓文字對稱且易於閱讀。使用下列 CSS 將所有標題設為平衡的文字換行:

h1,h2,h3,h4,h5,h6 {
  text-wrap: balance;
}

單純套用這個樣式可能無法提供您預期的結果,因為文字需要換行,因此必須從某處套用最大行長度。您會在本文的範例中看到 max-inline-size,這個樣式與 max-width 類似,但可以針對任何語言設定一次。

限制

平衡文字的工作並非免費。瀏覽器需要反覆執行疊代,找出最佳的平衡換行解決方案。這項效能費用已由規則減輕,僅適用於六行以下換行文字

試用示範版

效能注意事項

不建議將文字換行平衡套用至整個設計。由於六行限制,這項要求會浪費資源,且可能影響網頁轉譯速度。

錯誤做法
* {
  text-wrap: balance;
}
建議改用
h1, h2, h3, h4, h5, h6, blockquote {
  text-wrap: balance;
}

這項功能的一大優點是,您不必等待並與字型載入時間同步,即可平衡文字換行,就像您目前使用 JavaScript 時一樣。瀏覽器會處理這項作業!

white-space 屬性的互動

平衡文字與 white-space 屬性會互相競爭,因為前者要求不換行,後者則要求平衡換行。如要解決這個問題,請取消設定空白字元屬性,然後再次套用平衡換行。

.balanced {
  white-space: unset;
  text-wrap: balance;
}

平衡不會變更元素的行內大小

部分 JavaScript 解決方案可平衡文字換行,並變更所含元素的 max-width,因此具有優勢。這項解決方案還能「縮小包裝」平衡的區塊。text-wrap: balance 沒有這種效果,請參閱以下範例:

標題會像先前的開發人員工具一樣醒目顯示,但這次不會跨越整個寬度。標題會在結尾前換行,因此是平衡的文字區塊。

您會發現開發人員工具顯示的寬度在結尾處有許多額外空間,對吧?這是因為這只是換行樣式,而非大小變更樣式。因此,至少在我看來,在某些情況下,text-wrap: balance 並不適用。舉例來說,資訊卡內的標題 (或任何有邊框或陰影的容器)。

諷刺的是,平衡的文字換行會造成所含元素不平衡。

瀏覽器使用的技術簡短說明

瀏覽器會有效執行二元搜尋,找出不會造成任何額外行的最小寬度,並在一個 CSS 像素 (而非顯示像素) 停止。為進一步減少二元搜尋中的步驟,瀏覽器會從平均行寬的 80% 開始。