今天需要些一个回复评论的页面,设计师给的初始界面就是一个只有一行的框。然后当时就想这个交互该怎么实现比较好,然后想起了新浪微博的做法:点击评论,默认显示一行,当输入的文字超过一行或者输入Enter时,输入框的高度会随着改变,直到输入完毕。顿时觉得这个细节做得挺不错的,可以效仿下。下面分享2种实现textarea高度自适应的做法,一种是用div来模拟textarea来实现的,用CSS控制样式,不用JS;另一种是利用JS控制的(因为存在浏览器兼容问题,所以写起来比较麻烦);
方法一:div模拟textarea文本域轻松实现高度自适应
demo演示地址:http://www.xuanfengge.com/demo/201308/textarea/demo1.html
因为textarea不支持自适应高度,就是定好高度或者是行数之后,超出部分就会显示滚动条,看起来不美观。
而用DIV来模拟时,首先遇到的问题是:div怎么实现输入功能?
可能我们还是第一次见到这个属性contenteditable,如一个普通的block元素上加个contenteditable="true"
就实现编辑,出现光标了。如
1
|
<div contenteditable="true"></div>
|
contenteditable属性虽是HTML5里面的内容,但是IE似乎老早就支持此标签属性了。所以,兼容性方面还是不用太担心的。
CSS代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
.textarea{
width:400px;
min-height:20px;
max-height:300px;
_height:120px;
margin-left:auto;
margin-right:auto;
padding:3px;
outline:0;
border:1pxsolid#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:inset01px3pxrgba(0,0,0,0.1),008pxrgba(82,168,236,0.6);
}
|
HTML代码
1
|
<div class="textarea"contenteditable="true"><br/></div>
|
CSS代码中,因为IE6不支持min/max,所以做了hack,其他的也好理解。
方法二:文本框textarea根据输入内容自适应高度
demo演示地址:http://www.xuanfengge.com/demo/201308/textarea/demo2.html
这个写法是用原生JS写的,考虑了很多兼容性问题,完全和新浪微博的回复效果一样的功能。有兴趣的童鞋可以仔细分析下代码。
CSS代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#textarea {
display:block;
margin:0auto;
overflow:hidden;
width:550px;
font-size:14px;
height:18px;
line-height:24px;
padding:2px;
}
textarea{
outline:0none;
border-color:rgba(82,168,236,0.8);
box-shadow:inset01px3pxrgba(0,0,0,0.1),008pxrgba(82,168,236,0.6);
}
|
javascript代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/**
* 文本框根据输入内容自适应高度
* @param {HTMLElement} 输入框元素
* @param {Number} 设置光标与输入框保持的距离(默认0)
* @param {Number} 设置最大高度(可选)
*/
varautoTextarea=function(elem,extra,maxHeight){
extra=extra||0;
varisFirefox=!!document.getBoxObjectFor||'mozInnerScreenX'inwindow,
isOpera=!!window.opera&&!!window.opera.toString().indexOf('Opera'),
addEvent=function(type,callback){
elem.addEventListener?
elem.addEventListener(type,callback,false):
elem.attachEvent('on'+type,callback);
},
getStyle=elem.currentStyle?function(name){
varval=elem.currentStyle[name];
if(name==='height'&&val.search(/px/i)!==1){
varrect=elem.getBoundingClientRect();
returnrect.bottom-rect.top-
parseFloat(getStyle('paddingTop'))-
parseFloat(getStyle('paddingBottom'))+'px';
};
returnval;
}:function(name){
returngetComputedStyle(elem,null)[name];
},
minHeight=parseFloat(getStyle('height'));
elem.style.resize='none';
varchange=function(){
varscrollTop,height,
padding=0,
style=elem.style;
if(elem._length===elem.value.length)return;
elem._length=elem.value.length;
if(!isFirefox&&!isOpera){
padding=parseInt(getStyle('paddingTop'))+parseInt(getStyle('paddingBottom'));
};
scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
elem.style.height=minHeight+'px';
if(elem.scrollHeight>minHeight){
if(maxHeight&&elem.scrollHeight>maxHeight){
height=maxHeight-padding;
style.overflowY='auto';
}else{
height=elem.scrollHeight-padding;
style.overflowY='hidden';
};
style.height=height+extra+'px';
scrollTop+=parseInt(style.height)-elem.currHeight;
document.body.scrollTop=scrollTop;
document.documentElement.scrollTop=scrollTop;
elem.currHeight=parseInt(style.height);
};
};
addEvent('propertychange',change);
addEvent('input',change);
addEvent('focus',change);
change();
};
|
HTML代码(写在body里面的)
1
2
3
4
5
|
<textarea id="textarea"placeholder="回复内容"></textarea>
<script>
vartext=document.getElementById("textarea");
autoTextarea(text);// 调用
</script>
|
相关推荐
在探讨“jQuery——TextArea高度自适应”的主题时,我们深入解析了如何利用jQuery库实现文本区域(TextArea)的高度自动调整,以确保其高度能够根据输入的文本量动态变化,从而提供更好的用户体验。以下是对该主题的...
总的来说,创建Vue自定义组件`AutoHeightTextarea`可以方便地实现textarea根据内容自适应高度的效果,同时通过针对性的兼容性处理,可以确保在各种浏览器环境中都有良好的表现。在实际项目中,这样的组件可以大大...
在标题“flex3 textArea 高度自适应”中提到的问题,就是如何实现这样一个功能,让`TextArea`的大小随着其内容的增加而自动调整。 在描述中提到,已经有一个自定义的解决方案,可以依据文本内容自动调整`TextArea`...
为了解决这个问题,我们可以使用JavaScript或者jQuery来实现textarea的高度自适应功能,即根据textarea内的内容动态调整其高度,确保内容始终可见。 `textareaAutoHeight.jquery.js` 是一个基于jQuery的插件,它的...
"textarea 输入框自适应高度"这个主题就是关于如何实现这样一个功能的探讨。 在HTML中,textarea元素默认是不会自动扩展的,当用户输入的文字超过了一定行数,就会出现滚动条。然而,通过一些JavaScript库或自定义...
针对这些问题,我们可以采用特定的技术来实现 `textarea` 的高度自适应和去除滚动条。 首先,`textarea` 的高度自适应通常通过JavaScript库,如jQuery,来实现。jQuery 是一个强大的JavaScript库,它简化了DOM操作...
textarea根据内容自适应高度 组件 注意:要监听input事件改变value值 使用: <autoheight_textarea value="{{value}}" placeholder="写个评论" bindinput="listenerinput"></autoheight_textarea>
用css控制textarea文本域的高度随内容的变化而变化,不出现滚动条....首先,原则上实现textarea自适应必须适用css,不能直接适用“width=100%”这样的写法,具体示例: 复制代码代码如下: <style> textarea {
这个功能可以通过JavaScript来实现,正如标题“Textarea根据内容自适应高度”所描述的那样。本文将详细介绍如何使用JavaScript来控制`Textarea`的内容自适应高度,并提供相关代码示例。 首先,我们来看一下提供的...
之前给大家分享过用Javascript控制文本框textarea高度随内容自适应增长收缩,今天花了点时间换了种实现方法,总结一下 代码如下: jQuery.fn.extend({ autoHeight: function(){ return this.each(function(){ ...
当我们决定使用div来模拟具有高度自适应效果的textarea文本域时,可以借助CSS中的min-height和max-height属性来实现。min-height属性定义了元素的最小高度,而max-height属性则定义了元素的最大高度。如果内容不足以...
为了解决这个问题,我们可以实现一个定宽的`textarea`,使其能够根据内容自动调整高度。这种功能在各种在线编辑器、评论区或表单填写场景中都非常实用。 在HTML中,`textarea`元素具有`rows`和`cols`属性,分别用于...
在网页设计中,为了提供更好的用户体验,经常需要对文本框(`textarea`)进行自适应高度的设置,以便用户在输入大量文字时,文本框能够自动扩展高度,避免出现滚动条。`jQuery`库提供了一个方便的方法来实现这一功能...
本文将探讨如何用`div`实现自适应高度的textarea,并在Angular中实现双向数据绑定。 首先,为什么不用传统的`<textarea>`?虽然`<textarea>`可以设置固定行数并允许用户输入多行文本,但是它并不方便实现动态高度...
但是,为了实现自适应高度,应避免这样做,而是通过CSS来控制行的高度。如果需要设定宽度,可以在field中设置`width`属性。 3. **使用Layui的响应式布局**:Layui提供了响应式布局的支持,可以通过`lay-size`属性来...
本文将详细介绍如何通过JavaScript和CSS来实现`textarea`文本域的宽度和高度自适应。 首先,对于宽度的自动适应,通常我们希望`textarea`能填满其父容器的宽度。在HTML中,我们可以给`textarea`添加一个CSS类,如`...