CSS 欄位大小

使用可編輯內容自動調整元素大小的程式碼行。

如果沒有 field-sizing,如要建立適當大小的輸入欄位,您必須輸入文字欄位輸入的平均大小,或是使用 JavaScript 計算字元,以及隨著使用者輸入文字時,增加元素高度或寬度。換句話說,如果要追蹤使用者輸入內容,就會發生錯誤。

使用 field-sizing 時,您需要一行 CSS 來根據內容啟用大小設定。這種以內容為依據的大小設定樣式也適用於其他元素,而非僅限於 textarea!

textarea, select, input {
  field-sizing: content;
}

瀏覽器支援

  • Chrome:123。
  • Edge:123。
  • Firefox:不支援。
  • Safari:不支援。

資料來源

規格 | 說明

喜歡短篇影片嗎?

Wes BosJhey 在 Twitter 上各自發布了一部精彩影片,介紹 field-sizing

哪些元素會受到欄位大小的影響?

以下是 field-sizing 適用的 <form> 元素清單,以及各元素的效果摘要。

<textarea>

輸入內容會收合為 min-inline-size,或是配合預留位置的大小。

使用者輸入內容時,輸入內容會沿著內嵌方向擴大,直到達到內嵌大小上限為止。此時文字會換行,輸入內容的區塊大小也會增加,以便符合新行。

<select><select multiple>

select 元素會縮小,以便配合所選選項。

具有 multiple 屬性的選取方塊會根據最寬的選項進行調整,並視需要調整高度,以便容納選項數量。

<input type="text"><input type="email"><input type="number">

輸入內容會縮減為 min-inline-size,或縮減至可配合預留位置的大小。

當使用者輸入內容時,輸入內容會在內嵌方向中增加,直到達到 max-inline-size 為止,此時溢流會裁剪輸入值。

<input type="file">

輸入內容會縮減為按鈕和預先填入的檔案名稱文字。

上傳檔案後,輸入內容的寬度會與按鈕加上檔案名稱文字一樣寬。

查看、測試及比較結果

以下是互動式和最小化範例,說明各個表單元素在 field-sizing 影響下,前後行為的差異。

在 Codepen 上試用

一探究竟

使用 [placeholder] 時,預留位置會成為內容。這項資訊先前已提及,但在此重申,因為這項資訊對於瞭解如何設定表單樣式相當重要。長或短的預留位置會使用 field-sizing: content 變更輸入的內建大小。

在 Codepen 上試用

處理空白和溢出的樣式

使用 field-sizing 確實需要額外的工作。Ahmad Shaded 稱之為「防禦性 CSS」,其目標不一定是明確說明某項內容應有的行為或外觀,而是避免進入不理想的視覺狀態。先前輸入內容的大小固定,但套用 field-sizing: content 後,輸入內容可能會變得太小或太大。

以下樣式是您可以參考的起點。這些物件會協助元素不要收合在方塊內過小,而在 textarea 的情況下,不會擴大到太大。

textarea {
  min-block-size: 3.5rlh;
  min-inline-size: 20ch;
  max-inline-size: 50ch;
}

select {
  min-inline-size: 5ch;
  min-block-size: 1.5lh;
}

input {
  min-inline-size: 7ch;
}

這段 CSS 會使用相對單位設定大小。新的 lh 單位非常適合區塊大小,而 ch 則適合內嵌大小。

欄位大小的預設值為何?

field-sizing 的預設值為 fixed,且只接受 fixedcontent 這兩個值。