field-sizing
field-sizing CSS 屬性讓你能夠控制具有預設首選尺寸的元素的尺寸調整行為,例如表單控制元件元素。此屬性使你能夠覆蓋預設的尺寸調整行為,允許表單控制元件調整其大小以適應其內容。
此屬性通常用於設定文字 <input> 和 <textarea> 元素的樣式,以允許它們收縮包裹其內容,並在向表單控制元件輸入更多文字時增長。
語法
/* Keyword values */
field-sizing: content;
field-sizing: fixed;
/* Global values */
field-sizing: inherit;
field-sizing: initial;
field-sizing: revert;
field-sizing: revert-layer;
field-sizing: unset;
值
描述
field-sizing: content 覆蓋了表單元素的預設首選尺寸。此設定提供了一種簡單的方法來配置文字輸入框,使其能夠收縮包裹其內容並在輸入更多文字時增長。當它們達到最大尺寸限制(由其容器元素的大小或透過 CSS 設定)時,它們將停止擴充套件,此時需要滾動才能檢視所有內容。
受 field-sizing: content 影響的元素
具體來說,將 field-sizing 設定為 content 會影響以下元素:
- 接受使用者直接文字輸入的表單輸入型別。這包括
email、number、password、search、tel、text和url型別。- 如果控制元件上沒有設定最小寬度,它的寬度將僅與文字游標一樣寬。
- 帶有
placeholder屬性的控制元件將被渲染得足夠大以顯示佔位符文字。 size屬性會修改此類<input>元素的預設首選大小。因此,size對設定了field-sizing: content的<input>元素沒有影響。
file輸入框。無法直接輸入文字;但是,當用戶選擇要上傳的新檔案時,顯示的檔名會發生變化。當設定了field-sizing: content時,控制元件將改變大小以收縮包裹檔名。<textarea>控制元件。值得注意的是,設定了field-sizing: content的<textarea>元素的行為與單行文字控制元件非常相似,但有以下補充:<select>控制元件。當設定了field-sizing: content時,它們的行為可能與你預期的有所不同。效果取決於你建立的<select>控制元件的型別:
field-sizing 與其他尺寸設定的互動
如果使用其他 CSS 尺寸屬性,field-sizing: content 為表單控制元件提供的尺寸靈活性可能會被覆蓋。在使用 field-sizing: content 時,應避免設定固定的 width 和 height,因為它們會重新為控制元件施加固定的大小。但是,將 min-width 和 max-width 等屬性與 field-sizing: content 一起使用非常有效,因為它們允許控制元件隨著輸入的文字增長和收縮,同時也防止控制元件變得過大或過小。
maxlength 屬性會導致控制元件在達到最大字元限制時停止增長。
正式定義
正式語法
field-sizing =
fixed |
content
示例
增長和收縮的文字欄位
此示例說明了 field-sizing: content 對單行和多行文字欄位的影響。這些欄位會隨著文字的新增或刪除而調整其大小,有效地收縮包裹內容,直到達到尺寸的下限或上限。
HTML
此示例中的 HTML 包含三個表單欄位,每個欄位都有一個關聯的 <label>:兩個型別為 text 和 email 的 <input> 元素,以及一個 <textarea> 元素。
<div>
<label for="name">Enter name:</label>
<input type="text" id="name" maxlength="50" />
</div>
<div>
<label for="email">Enter email:</label>
<input type="email" id="email" maxlength="50" placeholder="e.g. a@b.com" />
</div>
<div>
<label for="comment">Enter comment:</label>
<textarea id="comment">This is a comment.</textarea>
</div>
請注意有關 HTML 的以下幾點:
- 前兩個欄位設定了
maxlength屬性,當達到字元限制時,該屬性會阻止欄位大小增加。 <textarea>將在內聯方向上增長,直到達到min-width約束(在下面的 CSS 程式碼中設定)的邊緣,然後開始在塊方向上新增新行以容納後續字元。email輸入框設定了佔位符。這使得該欄位渲染得足夠大以顯示整個佔位符。一旦該欄位獲得焦點並且使用者開始輸入,該欄位的大小將變為min-width值。沒有佔位符的text欄位最初以min-width渲染。
CSS
在 CSS 中,我們對三個表單欄位設定了 field-sizing: content,以及 min-width 和 max-width 來限制輸入框的大小。值得重申的是,如果在欄位上沒有設定最小寬度,它們將只被渲染成與文字游標一樣寬。
我們還為 <label> 提供了一些基本的樣式,以便它們整齊地位於欄位旁邊。
input,
textarea {
field-sizing: content;
min-width: 50px;
max-width: 350px;
}
label {
width: 150px;
margin-right: 20px;
text-align: right;
}
結果
嘗試在下面的欄位中輸入和刪除文字,以探索 field-sizing: content 與其他尺寸屬性一起使用的效果。
控制 <select> 元素的顯示
此示例說明了 field-sizing: content 對 <select> 元素的影響,包括下拉選單型別和多行列表框型別。
HTML
HTML 包含兩組 <select> 元素:一組應用了 field-sizing: content,另一組沒有,以便你看到差異(儘管效果可能不如在文字欄位上那麼明顯)。每組包括一個下拉選單型別和一個多行列表框型別(設定了 multiple 屬性)。
<div class="field-sizing">
<h2>With <code>field-sizing: content</code></h2>
<select>
<option>Bananas</option>
<option>Strawberries</option>
<option selected>Apples</option>
<option>Raspberries</option>
<option>Pomegranate</option>
</select>
<select multiple>
<option>Bananas</option>
<option>Strawberries</option>
<option>Apples</option>
<option>Raspberries</option>
<option>Pomegranate</option>
</select>
</div>
<div>
<h2>Without <code>field-sizing: content</code></h2>
<select>
<option>Bananas</option>
<option>Strawberries</option>
<option selected>Apples</option>
<option>Raspberries</option>
<option>Pomegranate</option>
</select>
<select multiple>
<option>Bananas</option>
<option>Strawberries</option>
<option>Apples</option>
<option>Raspberries</option>
<option>Pomegranate</option>
</select>
</div>
注意: 最佳實踐是為每個表單控制元件包含一個 <label> 元素,以便為每個欄位關聯有意義的文字描述以實現可訪問性(有關更多資訊,請參閱使用有意義的文字標籤)。在此示例中我們沒有這樣做,因為它純粹關注表單控制元件的視覺渲染方面,但你應該確保在生產程式碼中包含表單標籤。
CSS
在 CSS 中,field-sizing: content 僅在第一組 <select> 元素上設定。
.field-sizing select {
field-sizing: content;
}
結果
請注意 field-sizing: content 的以下效果:
- 下拉選單始終適應所顯示選項的大小,隨著選擇不同選項而改變大小。沒有
field-sizing: content時,大小固定為與最長選項一樣寬。 - 多選列表框一次顯示所有選項。沒有
field-sizing: content時,使用者必須滾動框才能檢視所有選項。
規範
| 規範 |
|---|
| CSS 表單控制元件樣式 Level 1 # propdef-field-sizing |
瀏覽器相容性
載入中…