转自轩枫阁 - http://www.xuanfengge.com/textarea-on-how-to-achieve-a-high-degree-of-adaptive.html
方法一:div模拟textarea文本域轻松实现高度自适应
因为textarea不支持自适应高度,就是定好高度或者是行数之后,超出部分就会显示滚动条,看起来不美观。
而用DIV来模拟时,首先遇到的问题是:div怎么实现输入功能?
可能我们还是第一次见到这个属性contenteditable,如一个普通的block元素上加个contenteditable="true"
就实现编辑,出现光标了。如
<div contenteditable="true"></div>
contenteditable属性虽是HTML5里面的内容,但是IE似乎老早就支持此标签属性了。所以,兼容性方面还是不用太担心的。
CSS代码
.textarea{ width: 400px; min-height: 20px; max-height: 300px; _height: 120px; margin-left: auto; margin-right: auto; padding: 3px; outline: 0; border: 1px solid #a0b3d6; font-size: 12px; line-height: 24px; padding: 2px; word-wrap: break-word; overflow-x: hidden; overflow-y: auto; border-color: rgba(82, 168, 236, 0.8); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); }
HTML代码
<div class="textarea" contenteditable="true"><br /></div>
CSS代码中,因为IE6不支持min/max,所以做了hack,其他的也好理解。
方法二:文本框textarea根据输入内容自适应高度
这个写法是用原生JS写的,考虑了很多兼容性问题,完全和新浪微博的回复效果一样的功能。有兴趣的童鞋可以仔细分析下代码。
CSS代码
#textarea { display: block; margin:0 auto; overflow: hidden; width: 550px; font-size: 14px; height: 18px; line-height: 24px; padding:2px; } textarea { outline: 0 none; border-color: rgba(82, 168, 236, 0.8); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); }
javascript代码
<textarea id="textarea" placeholder="回复内容"></textarea> <script> var text = document.getElementById("textarea"); autoTextarea(text);// 调用 </script>
************************************************************************
根据以上写了两种类型的textarea高度自增的样例,其中对ie一些版本支持不好。
其中样式对textarea框的hover、focus做了处理,可根据自己需要对css样式增删。点这里下载。