快速了解CSS表單尺寸屬性field-sizing
最近Chrome 123又推出了一個新的 CSS 屬性:field-sizing。有了它,可以輕松實現(xiàn)輸入框尺寸自動跟隨輸入內(nèi)容的效果,花一分鐘了解一下吧~
一、快速了解field-sizing
field-sizing 表示“場地”尺寸,在這里指的是表單輸入框的尺寸,語法很簡單,可以取兩個值,如下
field-sizing: fixed | content
其中,fixed表示固定大小,也就是目前瀏覽器的默認(rèn)行為,輸入框必須要給定一個具體的尺寸
而content表示輸入框的尺寸完全由輸入內(nèi)容決定。
舉個例子,下面是一個文本域
<textarea></textarea>
默認(rèn)表現(xiàn)是這樣的
圖片
可以看到,按回車時,出現(xiàn)了滾動條,這個大家應(yīng)該再熟悉不過了
這時,如果添加以下屬性
textarea{
field-sizing: content;
}
結(jié)果...變成了這樣
圖片
因為這時沒有內(nèi)容,所以也就沒有了尺寸,所以一般還需要手動加個尺寸
textarea{
field-sizing: content;
width: 200px;
}
現(xiàn)在寬度固定了,高度仍然有內(nèi)容決定
圖片
這樣就實現(xiàn)了一個回車自動增加高度的輸入框了,是不是很方便?
還可以設(shè)置最小尺寸,這樣就更符實際規(guī)需求了
textarea{
field-sizing: content;
width: 200px;
min-height: 40px;
}
效果如下
圖片
二、其他輸入元素
除了前面的文本域textarea,input也比較實用,比如要實現(xiàn)一個寬度自適應(yīng)內(nèi)容的輸入框
input{
min-width: 100px;
field-sizing: content;
}
效果如下
圖片
另外,select元素也是支持的
<select>
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
<option>這是一個很長很長的選項</option>
</select>
默認(rèn)情況下,select元素的寬度是由最長的那一項決定的
圖片
這樣在比較短的選項在選中時就比較突兀,現(xiàn)在我們設(shè)置自適應(yīng)內(nèi)容尺寸
select{
field-sizing: content;
}
比上面要好很多了
圖片
以上幾個demo可以查看以下鏈接(Chrome 123+)
- CSS field-sizing (juejin.cn)[1]
三、相比可編輯 div 的好處
在以往,我們通常是通過給div設(shè)置可編輯屬性,來實現(xiàn)內(nèi)容自適應(yīng)
<div contenteditable="true">
</div>
雖然也能實現(xiàn),但是有很多表單特性就丟失了。
- onchange事件缺失,由于只是普通的div,所以無法監(jiān)聽change事件
- value屬性缺失,也就是無法通過div.value讀取或者設(shè)置輸入內(nèi)容
- minLength、maxLength屬性缺失,無法直接設(shè)置最大最小長度
- 表單提交信息缺失,無法通過默認(rèn)的new Form(表單)來獲取表單內(nèi)容
- 在 vue、react這些框架中也無法直接雙向綁定等等
[1]CSS field-sizing (juejin.cn): https://code.juejin.cn/pen/7349831204134191131