input文字框寬度自適應
實際應用中,可能需要input文字框能夠根據輸入字元的所佔據的寬度自動調節尺寸。
直接計算輸入字元所佔據的寬度,就如同直接稱量大象體重一樣比較困難。
可以和當年曹衝一樣轉換思路,達到殊途同歸的效果。
下面分享一個比較巧妙的實現方式,需要的朋友可以做一下參考。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #dis, #txt { font-size:12px; } #dis { position:absolute; z-index:1000; left:-500px; } </style> <script> window.onload = function () { let otxt = document.getElementById("txt"); let ospan = document.getElementById("dis"); otxt.onkeyup = function () { ospan.innerHTML = this.value; if (ospan.offsetWidth > otxt.offsetWidth) { this.style.width = ospan.offsetWidth + "px"; } } } </script> </head> <body> <input type="text" id="txt"/><br/> <span id="dis"></span> </body> </html>
預設狀態下,文字框有一個最小寬度,當輸入的文字總寬度超過文字框預設寬的時候,能夠實現寬度自適應效果。
下面是自適應效果的實現原理與程式碼分解註釋。
一.實現原理:
預設input文字框的寬度並不能實現自適應,也很難去計算輸入文字具體的寬度。
轉換一下思路,將輸入文字框的內容同步到一個隱藏的span元素。
span是內聯元素,能夠根據內容的寬度自動伸展和收縮,並且很容易計算它的寬度。
然後將span元素的寬度設定為文字框的寬度,這樣就實現了文字框寬度自適應效果。
二.程式碼註釋:
[CSS] 純文字檢視 複製程式碼#dis { position:absolute; z-index:-1000; left:-500px; }
將span元素設定為絕對定位,並將left屬性值設定為-500px。
這樣此元素就不會出現在頁面可視範圍,且不會影響其他文件的佈局。
[JavaScript] 純文字檢視 複製程式碼let otxt = document.getElementById("txt"); let ospan = document.getElementById("dis");
通過document.getElementById方法分別獲取文字框和span元素物件。
[JavaScript] 純文字檢視 複製程式碼otxt.onkeyup = function () {}
為文字框註釋keyup事件處理函式,當按鍵彈起即會執行此函式。
[JavaScript] 純文字檢視 複製程式碼ospan.innerHTML = this.value;
當按鍵彈起之後,會將文字框的值寫入span,基本達到了同步效果。
[JavaScript] 純文字檢視 複製程式碼if (ospan.offsetWidth > otxt.offsetWidth) { this.style.width = ospan.offsetWidth + "px"; }
文字框有一個預設寬度(或者人為設定的最小寬度),判斷span元素當前的寬度是否大於這個預設寬度。
如果大於,那麼就將文字框的寬度設定為當前span元素的寬度,實現了寬度自適應效果。
三.相關閱讀:
(1).絕對定位可以參閱CSS position:absolute 絕對定位一章節。
(2).z-index可以參閱CSS z-index屬性一章節。
(3).innerHTML可以參閱JavaScript innerHTML一章節。
(4).offsetWidth可以參閱JavaScript offsetWidth一章節。
相關文章
- 固定寬度下,CSS 實現自適應文字CSS
- CSS 自適應內容寬度的輸入框CSS
- Android FixedTextView 字型大小自適應文字框AndroidTextView
- 微信小程式 – 富文字圖片寬度自適應(正則)微信小程式
- 手機直播原始碼,讓div寬度自適應文字內容原始碼
- 三列寬度自適應佈局
- echarts圖示如何自適應寬度Echarts
- 一對一直播系統原始碼,UICollectionViewCell自適應文字寬度原始碼UIView
- flex一欄寬度固定一欄寬度自適應佈局Flex
- 三列布局中間寬度自適應
- 兩列居中寬度自適應佈局
- CSS實現圖片寬度自適應CSS
- 兩列布局,自適應寬度練習
- textarea文字框高度自適應程式碼例項
- 一列寬度固定一列寬度自適應佈局
- 一列居中寬度自適應佈局
- CSS input 文字框樣式CSS
- CSS input文字框樣式CSS
- CSS匹配input text文字框CSS
- 前端頁面高度和寬度自適應怎麼做?前端
- gridview自動適應列寬View
- jQuery textarea框高度自適應jQuery
- flutter根據給定寬度自適應縮放字型大小Flutter
- css--常見左右盒子寬度高度自適應佈局CSS
- QTableWidget行高列寬自適應QT
- input文字框焦點背景變色
- Html佈局左右寬度固定中間自適應解決方案HTML
- EasyExcel 自適應列寬、隱藏列、動態列、單元格下拉框選擇資料、單元格文字格式Excel
- css 實現圖片寬度自適螢幕,高度與寬度成固定比例CSS
- 兩欄佈局,左側可伸縮,右側寬度自適應
- 簡單的Css控制bootstrap內容頁面的img寬度自適應CSSboot
- 設定bootstrap modal模態框的寬度和寬度boot
- css之左邊定寬右邊自適應CSS
- app直播原始碼,Flutter 寬高自適應APP原始碼Flutter
- input文字框獲取焦點伸縮效果
- vxe-table 列寬拖拽模式設定,自適應列寬,固定列寬模式
- element ui表單el-form的label自適應寬度並右對齊UIORM
- iframe巢狀(等寬高比自適應:aspectRatio)巢狀