js实现textarea自适应高度
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自适应高度的更多相关文章
- textarea自适应高度,div模仿textarea可编辑实现自适应高度,placeholder使用图标
1.textarea自适应高度,placeholder使用图标 自适应高度,有很多种办法: 1)jq: $("textarea").on("input",fun ...
- div模拟textarea自适应高度
之前在公司做项目的时候,有这么一个需求,要我写一个评论框,可以随着评论的行数增加而自动扩大,最开始我想用textarea实现,但是后来尝试后发现textarea并不适合,textarea的高度不会随着 ...
- textarea自适应高度
最近做项目遇见了这个自适应高度的问题,也在网上找了些资料,大多选择用DIV模拟textarea,但是这样就有安全性的问题,因为你是可以直接将HTML代码输入进去的. 接下来介绍的这种办法是采用两个te ...
- js实现iframe自适应高度
转自:http://www.jb51.net/article/15780.htm 对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的! 不带边框的iframe因为能 ...
- 简单实现一个textarea自适应高度
textarea自适应的实现方法很多,原理其实比较简单:监听textarea的input或者键盘事件,获取元素的scrollHeight,重置textarea元素的高度. 预览地址:textarea ...
- Textarea自适应高度 JS实现,兼容IE6\7\8\9\10\11
<!DOCTYPE html> <html> <head> <title>autoresizing textarea</title> < ...
- jquery文本框textarea自适应高度
浏览器中默认的文本框是不能根据内容的增多变高,只能固定高度有滚动条,体验不是很好,找了很多方法兼容都不行,总算找到个兼容良好的方法: <body> <textarea id=&quo ...
- textarea 自适应高度
试了好多方法,包括百度了好多.一旦接口获取的内容,就不好用了.有时候就是脑袋转不过来,想了好久的方法居然那么简单,然后,脑洞大开,忽然想到还可以这样弄, 很简单,两句话 var textareaHei ...
- 使用div模拟textarea,实现文本输入框高度自适应(附:js控制textarea实现文本输入框高度自适应)
一.使用textarea标签进行多行文本的输入有很多限制,比如不能实现高度自适应,会出现难看的滚动条等问题. HTML5中添加了一个新属性contenteditable,该属性可以让input,tex ...
随机推荐
- PostgreSQL 修改表字段常用命令
--数据库.模式.表名 "identities"."Test"."tab_test" --修改字段名 ALTER TABLE "i ...
- HTML <input> 标签的 accept 属性
<form> <input type="file" name="pic" id="pic" accept="im ...
- Vue中通过Vue.extend动态创建实例
Vue中通过Vue.extend动态创建实例 在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息.我们通常会提前写好这个组件,然后通过v-if = ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之五:安装SQL Server
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- axel 多线程下载工具
yum install axel-2.4-9.el7.x86_64 -y # 选项 --max-speed=x , -s x 最高速度x --num-connections=x , -n x 连接数x ...
- android 完全区分double-tap 与 singal-tap 的方法
需求:viewpager显示图片,需要在双击时对图片进行缩放,单击时在屏幕下方弹出popwindow,由于android的双击本质就是两次单击,但是又不想在双击时触发单击时的动作,所以就在网上各种搜解 ...
- JVM GC算法 垃圾回收器
JVM的垃圾回收算法有三种: 1.标记-清除(mark-sweep):啥都不说,直接上图 2.标记-整理(mark-compact) 3.复制(copy) 分代收集算法 ...
- Codeforces Round #588 (Div. 2)
传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ...
- 大学ACM学习笔记
高斯消元 该来的总会来的系列 int gauss() { for(int i=1;i<=n;i++)//按照列来枚举,当前之前i-1列全消完了 { int k=i; for(int j=i+1; ...
- iOS:从头捋一遍VC的生命周期
一.介绍 UIViewController是iOS开发中的核心控件,没有它那基本上任何功能都无法实现,虽然系统已经做了所有控件的生命维护,但是,了解它的生命周期是如何管理还是非常有必要的.网上有很多教 ...