當textarea內容增多時,就會出現一個讓人討厭的滾動條,怎麼樣讓textarea高度隨內容自適應呢?html
contenteditable 屬性規定元素內容是否可編輯。jquery
(若是元素未設置 contenteditable 屬性,那麼元素會從其父元素繼承該屬性)git
HTML:github
<div contenteditable="true"></div>
CSS:瀏覽器
min-height: 100px; width: 200px;
優勢:簡單明瞭jquery插件
缺點:1.須要過濾HTML標籤flex
2.IE6瀏覽器對min/max無效this
min-height: 200px; _height: 200px;
3.placeholder和maxlength等屬性須要js設置spa
4.換行的問題插件
iE瀏覽器下(IE6~8),輸入文字回車的時候,div內部是會自動產生p標籤包含每行元素的,而其餘瀏覽器貌似是產生br標 籤。因爲默認的p標籤是有1em大小的上下margin值的,清除p標籤的margin值:
p{ margin: 0; }
JS:
$("textarea:first").on("input propertychange keyup change",function(){ $(this).height(this.scrollHeight); }) // Add input event listeners // * input for modern browsers // * propertychange for IE 7 & 8 // * keyup for IE >= 9: catches keyboard-triggered undos/cuts/deletes // * change for IE >= 9: catches mouse-triggered undos/cuts/deletions (when textarea loses focus)
// scrollHeighr返回元素的完整高度,textarea的默認border,padding要置0
基本上全部的jquery插件核心都是這段代碼,可是實際上它的效果很是坑爹
1.它響應的是keyup事件,所以也就是說確定會有延遲。
2.它也有兼容性問題,再某些瀏覽器上(好比safari),它的scrollHeight
會莫名奇妙地多出一些,看起來很是奇怪
HTML:
<div class="expandingArea "> <pre><span></span><br></pre> <textarea placeholder="輸入文字"></textarea> </div>
其中的expandingArea的樣式僅有
.expandingArea{ position:relative; }
目的是用於textarea相對於expandingArea絕對定位:
textarea{ position:absolute; top:0; left:0; height:100%; }
經過這樣的樣式設置,textArea的高度會始終等於expandingArea的高度。
pre{ display:block; visibility:hidden; }
pre以塊形式存在,而且不可見,可是是佔用空間的。
這時需要把textarea中的內容實實的同時到pre裏的span標籤中,pre會隨內容的高度變化而變化,expandingArea的高度又隨pre變化,由於textarea的高度100%textarea的高度會隨expandingArea變化,
這方法來自github一位大神,附上demo連接,有具體的js實時綁定已經html標籤過濾