html结构:

  1. <div class="container" id="container">
  2. <div class="text-wrapper">
  3. <pre></pre>
  4. <textarea placeholder="请输入内容"></textarea>
  5. </div>
  6. </div>

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

css样式:

  1. *,
  2. *:before,
  3. *:after {
  4. box-sizing: border-box;
  5. -webkit-box-sizing: border-box;
  6. -moz-box-sizing: border-box;
  7. }
  8.  
  9. body {
  10. font-size: 14px;
  11. font-family: '微软雅黑',"Helvetica Neue", Helvetica, Arial, sans-serif;
  12. color: #333;
  13. background-color: #fff;
  14. line-height: 1.6;
  15. }
  16.  
  17. body, div, pre, textarea {
  18. margin:;
  19. padding:;
  20. }
  21.  
  22. .container {
  23. width: 800px;
  24. margin: 20px auto;
  25. }
  26.  
  27. .text-wrapper {
  28. position: relative;
  29. margin-bottom: 20px;
  30. }
  31.  
  32. .text-wrapper pre {
  33. display: block;
  34. visibility: hidden;
  35. width: 100%;
  36. min-height: 40px;
  37. padding: 8px 10px;
  38. font-size: 14px;
  39. line-height: 1.6;
  40. border: 1px solid #aed0ea;
  41. white-space: pre-wrap;
  42. word-break: break-all;
  43. word-wrap: break-word;
  44. }
  45.  
  46. .text-wrapper textarea {
  47. position: absolute;
  48. top:;
  49. left:;
  50. display: inline-block;
  51. width: 100%;
  52. height: 100%;
  53. box-sizing: border-box;
  54. padding: 8px 10px;
  55. font-size: 14px;
  56. line-height: 1.6;
  57. vertical-align: middle;
  58. background-color: #fff;
  59. border: 1px solid #aed0ea;
  60. border-radius: 4px;
  61. overflow: hidden;
  62. white-space: pre-wrap;
  63. word-break: break-all;
  64. word-wrap: break-word;
  65. resize: none;
  66. transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  67. -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
  68. -moz-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  69. }
  70.  
  71. .text-wrapper textarea:focus {
  72. border-color: #66afe9;
  73. outline:;
  74. box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  75. -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  76. -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  77. }

js代码:

  1. var laoq = (function(){
  2. var addHandler = function(ele,type,fn){
  3. if(ele.addEventListener){
  4. ele.addEventListener(type,fn,false);
  5. }else if(ele.attachEvent){
  6. ele.attachEvent('on' + type,fn);
  7. }else{
  8. ele['on' + type] = fn;
  9. }
  10. };
  11.  
  12. var setTextareaAutoHeight = function(){
  13. addHandler(document.getElementById('container'),'input',function(){
  14. var event = event || window.event,
  15. target = event.target || event.srcElement;
  16.  
  17. if(target.type.toLowerCase() !== 'textarea') return;
  18.  
  19. var preele = target.previousElementSibling;
  20.  
  21. preele && preele.tagName.toLowerCase() === 'pre' && target.parentElement.classList.contains('text-wrapper') && (preele.innerText = target.value);
  22. });
  23. };
  24.  
  25. return{
  26. setTextareaAutoHeight:setTextareaAutoHeight
  27. };
  28. })();

调用方式:

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

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. PostgreSQL 修改表字段常用命令

    --数据库.模式.表名 "identities"."Test"."tab_test" --修改字段名 ALTER TABLE "i ...

  2. HTML <input> 标签的 accept 属性

    <form> <input type="file" name="pic" id="pic" accept="im ...

  3. Vue中通过Vue.extend动态创建实例

    Vue中通过Vue.extend动态创建实例 在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息.我们通常会提前写好这个组件,然后通过v-if = ...

  4. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之五:安装SQL Server

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. axel 多线程下载工具

    yum install axel-2.4-9.el7.x86_64 -y # 选项 --max-speed=x , -s x 最高速度x --num-connections=x , -n x 连接数x ...

  6. android 完全区分double-tap 与 singal-tap 的方法

    需求:viewpager显示图片,需要在双击时对图片进行缩放,单击时在屏幕下方弹出popwindow,由于android的双击本质就是两次单击,但是又不想在双击时触发单击时的动作,所以就在网上各种搜解 ...

  7. JVM GC算法 垃圾回收器

    JVM的垃圾回收算法有三种: 1.标记-清除(mark-sweep):啥都不说,直接上图 2.标记-整理(mark-compact) 3.复制(copy) 分代收集算法                 ...

  8. Codeforces Round #588 (Div. 2)

    传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ...

  9. 大学ACM学习笔记

    高斯消元 该来的总会来的系列 int gauss() { for(int i=1;i<=n;i++)//按照列来枚举,当前之前i-1列全消完了 { int k=i; for(int j=i+1; ...

  10. iOS:从头捋一遍VC的生命周期

    一.介绍 UIViewController是iOS开发中的核心控件,没有它那基本上任何功能都无法实现,虽然系统已经做了所有控件的生命维护,但是,了解它的生命周期是如何管理还是非常有必要的.网上有很多教 ...