自動增長Textareas的最乾淨技巧「心得分享」
想法是使 <textarea>
更像 <div>
,因此它的高度可以擴充套件以包含當前值。這幾乎是奇怪的,沒有一個簡單的原生解決方案,不是嗎?
現在我得到了一個非常好的原生解決方案。
這裡是演示,如果你只是想要一個工作的例子
<h1>Auto-Growing <code><textarea></code></h1><form action="#0"> <label for="text">Text:</label> <div class="grow-wrap"> <textarea name="text" id="text" onInput="this.parentNode.dataset.replicatedValue = this.value"></textarea> </div></form>複製程式碼
.grow-wrap { /* 簡單的方法將元素疊加在一起,並根據最高者的高度確定它們的大小。 */ display: grid; }.grow-wrap::after { /* 注意奇怪的空間!需要預防跳動行為 */ content: attr(data-replicated-value) " "; /* 這就是textarea文字的表現形式 */ white-space: pre-wrap; /* 隱藏在檢視,點選和螢幕閱讀器中 */ visibility: hidden; }.grow-wrap > textarea { /* 您可以保留此設定,但是在使用者調整大小後,它將破壞自動調整大小 */ resize: none; /* Firefox顯示增長的捲軸,您可以像這樣隱藏。 */ overflow: hidden; }.grow-wrap > textarea,.grow-wrap::after { /* 需要相同的樣式! */ border: 1px solid black; padding: 0.5rem; font: inherit; /* 放在彼此之上 */ grid-area: 1 / 1 / 2 / 2; }body { margin: 2rem; font: 1rem/1.4 system-ui, sans-serif; }label { display: block; }複製程式碼
效果
訣竅是,你要準確地將 <textarea>
的內容複製到一個可以自動展開高度的元素中,並匹配它的大小。
所以你有一個 <textarea>
,它不能自動展開高度。
相反您可以在另一個元素中完全複製該元素的外觀,內容和位置,再複製的元素隱藏起來。
現在,這三個元素都是相互聯絡的。無論哪一個子元素最高,都會把父元素推到那個高度,而另一個子元素也會跟隨。這意味著 <textarea>
的最小高度將成為“基礎”高度,但是如果複製的文字元素碰巧變高了,所有的東西也會隨之變高。
好聰明,我太喜歡了。
您需要確保複製的元素完全相同
相同的字型,相同的填充,相同的頁邊距,相同的邊框...所有內容。這是一個相同的副本,只是在視覺上隱藏了 visibility: hidden;
;如果不是完全一樣的,那麼所有的東西都不會完全正確地生長在一起。
我們還需要在複製的文字上 white-space: pre-wrap;
,因為這就是textareas的表現。
這是最奇怪的部分
在我的演示中,我將 ::after
用於複製的文字。我不確定這是否是最好的方法。對我來說感覺很乾淨,但是我想知道使用 <div aria-hidden =“ true”>
對於螢幕閱讀器是否更安全?
或 visibility: hidden;
夠了嗎?無論如何,那不是奇怪的部分。這是奇怪的部分:
content: attr(data-replicated-value) " ";複製程式碼
因為我使用的是偽元素,偽元素是將 data
屬性從元素中取出並以額外的空間將內容呈現到頁面的行(這是奇怪的部分)。如果你不這樣做,最終的結果會讓人感覺 "跳脫"。我不能說我完全理解它,但它似乎更好地尊重了跨textarea和文字元素的換行行為。
如果你不想使用偽元素,嘿嘿,我沒意見,只要注意跳動的行為即可。
作者:杭州程式設計師張張
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2310/viewspace-2826732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 最‘乾淨’的程式語言——空白程式語言
- 乾貨丨RPA郵件自動化技巧
- 乾貨分享:PPT製作技巧
- 【Mysql 學習】自動增長列MySql
- 增強 React 列表渲染:乾淨且可重用的模式React模式
- 百姓日用乾淨軟體分享——來自技術凝鍊的通俗讀物
- 如何把印表機驅動解除安裝乾淨 印表機驅動解除安裝乾淨的教程
- c mac生成器(自動增長)Mac
- 6個小技巧教你編寫乾淨整潔的程式碼
- 【分享】追長龍最安全的方法
- mysql自增長列MySql
- 【譯】12個編寫乾淨且可擴充套件的JavaScript技巧套件JavaScript
- Linux企業運維高效技巧心得及分享Linux運維
- 乾貨分享!優秀介面設計技巧(一)
- LeetCode(面試)中寫出乾淨的程式碼(小技巧合集)LeetCode面試
- win10防毒軟體怎麼關閉乾淨_win10自帶的防毒軟體如何關閉乾淨Win10防毒
- 【乾貨分享】20條PHP程式碼優化技巧PHP優化
- 經驗分享:乾淨整潔程式碼(clean code)的特點 - oliver
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 分享12306搶票心得-最終篇
- php乾淨程式碼PHP
- DB2巧用欄位自動增長主鍵的方法DFDB2
- mysql重置自增長屬性MySql
- 分享一些git小技巧,與個人心得體會Git
- SQLite設定主鍵自動增長及插入語法SQLite
- PLG SaaS 案例:如何實踐外鏈自動增長策略?
- 各位大俠,鍵值自動增長怎麼解決?
- 乾貨分享:Totoro 在自動化測試領域的深耕與收穫
- ES6+好用的小技巧,讓你的程式碼更乾淨,短巧,易讀
- 如何寫出優質乾淨的程式碼,這6個技巧你不能錯過!
- 微軟演算法面試題:如何找最長的增長子序列微軟演算法面試題
- 為什麼事務日誌自動增長會降低你的效能
- .NET執行insert語句返回自動增長列ID的值
- 成長心得
- MySQL設定表自增步長MySql
- 乾貨分享|資料視覺化報表製作技巧視覺化
- 亞馬遜:2020年淨銷售額增長38%亞馬遜
- 哪個軟體一鍵重灌系統最好最純淨 2022最乾淨重灌win10系統軟體教程Win10