精準對齊文字

網頁功能: text-box

問題說明

瀏覽器會自動在文字字元上方和下方加入額外的空白字元,以配合行高和字型專屬指標,例如上緣和下緣。這個「幽靈空間」會導致無法使用標準 CSS 達到像素完美的垂直對齊。

常見問題包括:

  • 圖示未對齊:即使使用 align-items: center,文字在視覺上仍會比相鄰圖示低或高。
  • 邊框間距不正確:由於字型的內部行距,含有 padding: 12px 的按鈕在視覺上看起來頂端或底部有更多空間。
  • 齊平對齊:如果不使用「魔術數字」負邊界,就無法將大寫字母的頂端與容器或相鄰圖片的頂端對齊。

解決方法

text-box-trim 和 text-box-edge 屬性 (簡寫為 text-box) 可讓您根據特定字型指標,修剪這個內部前置字元。將文字方塊裁剪至大寫高度 (大寫字母頂端) 和字母基準線 (多數字母底部),即可確保元素的定界框與視覺內容相符。

導入策略

  1. 必要:將 text-box-trim: trim-both (或 text-box 簡寫) 套用至包含文字的元素。
  2. 必填:使用 text-box-edge 指定要用於修剪的指標。如要對齊大部分 UI,請使用 cap alphabetic。
  3. 建議使用這項屬性,在彈性或格線容器中,將內容垂直置中。
  4. 建議使用這項功能,確保 CSS padding 值與文字和容器邊緣之間的視覺間距相符。
  5. 請勿用於長篇內文,因為這類文字需要傳統行距才能確保可讀性。最適合用於標題、按鈕和 UI 標籤。

導入指南

用途 1:修剪徽章的內部前置字元

不同字型的文字上下內建間距也不同。這可能會導致設計不一致,或文字無法在徽章中置中。如要讓容器的邊框間距完全貼合文字,請使用 text-box: trim-both cap alphabetic。這對於徽章或標記等密集 UI 元件特別有用。這樣一來,內邊距就會從文字邊緣開始。

.badge {
  padding: 10px;
  background: hotpink;
  border-radius: 10px;
  /* 
    Trims the top to the cap-height and 
    the bottom to the alphabetic baseline.
  */
  text-box: trim-both cap alphabetic;
}

應用實例 2:文字置中並加上圖示

使用 Flexbox 對齊文字和圖示時,「幽靈空間」通常會讓文字看起來稍微偏離中心。修剪方塊可確保版面配置引擎使用實際可見的字母高度進行對齊。

.button {
  display: inline-flex;
  align-items: center;
  gap: 8px; 
}
/* 
  text-box does NOT inherit, and must be applied directly to the text element.
*/
.button-text{
  /* 
    The flex container now centers against the 
    visible letters, not the invisible font box.
  */
  text-box: trim-both cap alphabetic;
}

應用實例 3:將文字與頂端邊緣對齊

如要將標題與相鄰圖片或裝飾元素的頂端完美對齊,請使用 trim-start cap alphabetic。即使不修剪結尾,也必須定義結尾邊緣。

.hero {
  display: flex;
  align-items: flex-start;
}

h1 {
  /* MANDATORY: The bottom edge must also be defined, even though only the top is trimmed. */
  text-box: trim-start cap alphabetic;
}

最佳做法

  • 建議使用 text-box 簡寫,讓程式碼更簡潔:text-box: <trim-direction> <edges>。
  • 務必指定兩側邊緣,即使只修剪一側也一樣 (除非使用預設的 text 邊緣)。
  • 建議搭配 line-height,控管間距。修剪功能會移除文字第一行和最後一行的前置字元,但 line-height 仍會影響多行文字的行距。
  • 請勿套用至所有元素。請只在需要精確對齊時使用。

備用策略

text-box 是漸進增強功能。在不支援的瀏覽器中,文字會以預設行距顯示。版面配置仍可正常運作,但精確度會略為降低。由於舊版瀏覽器會安全地忽略這些屬性,因此不需要特殊的備用程式碼。

其他考量

  1. 字型指標:不同字型有不同的內部指標。cap alphabetic 是可靠的預設值,但某些字型或用途可能需要 ex (x 高度),才能更妥善地對齊小寫字母。
  2. 多行文字:修剪功能會套用至區塊的第一行和最後一行。內部線路不受影響。