html结构:

<div class="container" id="container">
<div class="text-wrapper">
<pre></pre>
<textarea placeholder="请输入内容"></textarea>
</div>
</div>

原理:使用 pre(可以保留空格和换行)元素保存 textarea 的内容,使得父元素 div 的高度撑高,再设置 textarea 的高度为 100%即可

css样式:

*,
*:before,
*:after {
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
} body {
font-size: 14px;
font-family: '微软雅黑',"Helvetica Neue", Helvetica, Arial, sans-serif;
color: #333;
background-color: #fff;
line-height: 1.6;
} body, div, pre, textarea {
margin:;
padding:;
} .container {
width: 800px;
margin: 20px auto;
} .text-wrapper {
position: relative;
margin-bottom: 20px;
} .text-wrapper pre {
display: block;
visibility: hidden;
width: 100%;
min-height: 40px;
padding: 8px 10px;
font-size: 14px;
line-height: 1.6;
border: 1px solid #aed0ea;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
} .text-wrapper textarea {
position: absolute;
top:;
left:;
display: inline-block;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 8px 10px;
font-size: 14px;
line-height: 1.6;
vertical-align: middle;
background-color: #fff;
border: 1px solid #aed0ea;
border-radius: 4px;
overflow: hidden;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
resize: none;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
-moz-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
} .text-wrapper textarea:focus {
border-color: #66afe9;
outline:;
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}

js代码:

var laoq = (function(){
var addHandler = function(ele,type,fn){
if(ele.addEventListener){
ele.addEventListener(type,fn,false);
}else if(ele.attachEvent){
ele.attachEvent('on' + type,fn);
}else{
ele['on' + type] = fn;
}
}; var setTextareaAutoHeight = function(){
addHandler(document.getElementById('container'),'input',function(){
var event = event || window.event,
target = event.target || event.srcElement; if(target.type.toLowerCase() !== 'textarea') return; var preele = target.previousElementSibling; preele && preele.tagName.toLowerCase() === 'pre' && target.parentElement.classList.contains('text-wrapper') && (preele.innerText = target.value);
});
}; return{
setTextareaAutoHeight:setTextareaAutoHeight
};
})();

调用方式:

window.onload = function(){
laoq.setTextareaAutoHeight();
};

js实现textarea自适应高度的更多相关文章

  1. textarea自适应高度,div模仿textarea可编辑实现自适应高度,placeholder使用图标

    1.textarea自适应高度,placeholder使用图标 自适应高度,有很多种办法: 1)jq: $("textarea").on("input",fun ...

  2. div模拟textarea自适应高度

    之前在公司做项目的时候,有这么一个需求,要我写一个评论框,可以随着评论的行数增加而自动扩大,最开始我想用textarea实现,但是后来尝试后发现textarea并不适合,textarea的高度不会随着 ...

  3. textarea自适应高度

    最近做项目遇见了这个自适应高度的问题,也在网上找了些资料,大多选择用DIV模拟textarea,但是这样就有安全性的问题,因为你是可以直接将HTML代码输入进去的. 接下来介绍的这种办法是采用两个te ...

  4. js实现iframe自适应高度

    转自:http://www.jb51.net/article/15780.htm 对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的! 不带边框的iframe因为能 ...

  5. 简单实现一个textarea自适应高度

    textarea自适应的实现方法很多,原理其实比较简单:监听textarea的input或者键盘事件,获取元素的scrollHeight,重置textarea元素的高度. 预览地址:textarea ...

  6. Textarea自适应高度 JS实现,兼容IE6\7\8\9\10\11

    <!DOCTYPE html> <html> <head> <title>autoresizing textarea</title> < ...

  7. jquery文本框textarea自适应高度

    浏览器中默认的文本框是不能根据内容的增多变高,只能固定高度有滚动条,体验不是很好,找了很多方法兼容都不行,总算找到个兼容良好的方法: <body> <textarea id=&quo ...

  8. textarea 自适应高度

    试了好多方法,包括百度了好多.一旦接口获取的内容,就不好用了.有时候就是脑袋转不过来,想了好久的方法居然那么简单,然后,脑洞大开,忽然想到还可以这样弄, 很简单,两句话 var textareaHei ...

  9. 使用div模拟textarea,实现文本输入框高度自适应(附:js控制textarea实现文本输入框高度自适应)

    一.使用textarea标签进行多行文本的输入有很多限制,比如不能实现高度自适应,会出现难看的滚动条等问题. HTML5中添加了一个新属性contenteditable,该属性可以让input,tex ...

随机推荐

  1. Flutter 基础控件

    内容: Button Image.Icon Switch.Checkbox TextField Form 1.Button RaisedButton 漂浮按钮 FlatButton 扁平按钮 Outl ...

  2. HbaseShell启动

    找到hbase目录 进入bin目录 ./hbase shell 成功

  3. InfluxDB因修改默认数据目录导致服务无法正常运行的问题(权限问题)

    在实际的生产中,考虑的实际情况,我们会调整一些默认配置,例如,数据目录.InfluxDB修改默认的Data目录后,因权限问题,服务无法正常运行.以下是具体的分析测试过程. 配置文件为 /etc/inf ...

  4. TensorFlow从1到2(十四)评估器的使用和泰坦尼克号乘客分析

    三种开发模式 使用TensorFlow 2.0完成机器学习一般有三种方式: 使用底层逻辑 这种方式使用Python函数自定义学习模型,把数学公式转化为可执行的程序逻辑.接着在训练循环中,通过tf.Gr ...

  5. java8-02-再探Lambda表达式

    Lambda表达式   主要作用替代匿名内部类   达到简化代码的操作                                  Lambda表达式 在对象中的使用   Employee类

  6. 201871010113-刘兴瑞《面向对象程序设计(java)》第十二周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  7. 洛谷 P5658 括号树

    \(50pts\) #include <cstdio> #include <cstring> #include <iostream> #include <al ...

  8. Java连载41-this关键字其他注意事项、static方法

    一.this关键字 1.this在多数情况下都会省略 2.this不能用在含有static的方法之中. 3.static的方法的调用是不需要对象的,直接使用格式:类名.方法名:没有当前对象,自然不能访 ...

  9. Http协议请求方法及body类型(思路比较清晰的)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u010244522/article/de ...

  10. Unity Settings Deamon crash in 16.04 every time after boot

    安装ubuntu 16.04的时候,出现这样一个错误: unity-settings-deamon crashed with SIGSEGV in up_exported_dae (can't rea ...