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. Android项目模块化/组件化开发(非原创)

    文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...

  2. ORACLE DATAGUARD 日志传输状态监控

    ORACLE DATAGUARD的主备库同步,主要是依靠日志传输到备库,备库应用日志或归档来实现.当主.备库间日志传输出现GAP,备库将不再与主库同步.因此需对日志传输状态进行监控,确保主.备库间日志 ...

  3. PHP代码篇(六)--如何根据邀请人id查询满足条件的会员上级

    说,如果有一个会员表,每一个会员都有一个邀请人from_id字段(记录该会员是谁邀请的),知道一个会员id,现在需要查询某一个会员是否是该会员的下级. 表如下: 一.当下需求 1.我们需要知道会员id ...

  4. Automatic Tuning of Undo Retention 常见问题 (Doc ID 1579779.1)

    Automatic Tuning of Undo Retention Common Issues (Doc ID 1579779.1) APPLIES TO: Oracle Database - En ...

  5. Linux方案级ROM/RAM优化记录

    关键词:readelf.bloat-o-meter.graph-size.totalram_pages.reserved.meminfo.PSS.procrank.maps等等. 根据项目的需求,进行 ...

  6. platform平台device和driver如何匹配【转】

    转自:https://www.cnblogs.com/sky-heaven/p/6869591.html 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接 ...

  7. Mac下编译libpomelo静态库,并在cocos2dx项目中引用

    最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用.之前在windows系统下编译libpomelo,并在VS中引入比较顺利:但是,目前对Ma ...

  8. 公司员工表示 nginx 之父被警方带走

    ZDNet 12 日报导,俄罗斯警方当天突击搜查了 NGINX 公司(nginx 服务器项目商业化公司)在莫斯科的办事处,并带走了 NGINX 公司联合创始人 Igor Sysoev 与 Maxim ...

  9. Windows如何连接Linux(CentOS 7.x)的redis

    参考链接:https://www.cnblogs.com/wangyang0210/p/10244479.html

  10. 如何解决android 通知栏不显示的问题

    android 8.0 以后的版本,在创建通知栏的时候,加了一个channelId的东西.要想在上述版本中显示通知,总共分两步 1.创建Channel if (Build.VERSION.SDK_IN ...