一行程式碼即可自動調整元素大小,並編輯內容。
如果沒有 field-sizing,您必須猜測文字欄位輸入內容的平均大小,或是使用 JavaScript 計算字元,並在使用者輸入文字時增加元素高度或寬度,才能建立大小適當的輸入欄位。換句話說,要追蹤使用者在輸入內容中輸入的內容並不容易,而且容易出錯。
使用 field-sizing 時,您只需要一行 CSS 即可根據內容啟用大小調整功能。這種根據內容調整大小的樣式也適用於 textarea 以外的元素!
textarea, select, input {
field-sizing: content;
}
快速連結
喜歡短片嗎?
Wes Bos 和 Jhey 各自製作了一段很棒的 Twitter 影片,向大家介紹 field-sizing。
哪些元素會受到欄位大小影響?
以下列出 <form> 元素適用的 field-sizing,以及對各元素產生的效果摘要。
<textarea>
輸入內容會縮小為 min-inline-size 或配合預留位置大小。
使用者輸入文字時,輸入內容會沿著行內方向擴展,直到達到行內大小上限為止。此時,文字會換行,輸入內容的區塊大小也會擴展,以容納新的一行。
<select>和<select multiple>
選取元素會縮小,以配合所選選項。
具有 multiple 屬性的選取器會擴大,以配合最寬的選項,並視需要增加高度,以容納選項數量。
<input type="text">、<input type="email"> 和 <input type="number">
輸入內容會縮小為 min-inline-size 或配合預留位置大小。
使用者輸入內容時,輸入欄會沿著內嵌方向擴展,直到達到 max-inline-size 為止,此時溢位會剪輯輸入值。
<input type="file">
輸入內容會收合為按鈕和預先填入的檔案名稱文字。
上傳檔案後,輸入欄位會變寬,寬度等於按鈕加上檔案名稱文字。
查看、測試及比較結果
以下是互動式範例,可讓您瞭解受 field-sizing 影響後,各表單元素的前後行為差異。
深入瞭解
使用 [placeholder] 時,預留位置會變成內容。先前已提及這點,但由於設定表單樣式時瞭解這點很重要,因此在此再次強調。長或短的預留位置會變更輸入內容的內在大小 (使用 field-sizing:
content 時)。
處理空白和溢位樣式
使用 field-sizing 代表您必須額外進行一些作業。Ahmad Shadeed 將其稱為「防禦性 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,且只接受 fixed 或 content 這兩個值。