当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标签过滤