如何让textarea的高度自适应

 我来答
骆友heaven
2017-09-15 · TA获得超过1121个赞
知道小有建树答主
回答量:297
采纳率:81%
帮助的人:53.6万
展开全部
另外找一个元素,和textarea设置一样的样式,当textarea输入的时候,将内容填充到该元素内,然后再将该元素的高度赋值给textarea。

这个元素比较苛刻了,不仅要接收textarea的文字内容,也要接收格式,比如回车什么的,很明显是pre标签了。
写在pre标签里的东西可以原格式输出,如果要在别的元素,比如div上实现类似的效果,可能需要使用一些CSS,比如white-space:pre,诸如此类的代码。

直接上代码了:
首先准备一个pre,一个textarea:
<pre class="input" id="pre"></pre>
<textarea class="input" id="textarea"></textarea>

然后给他们设置相同的样式:
.input {
padding: 10px;
width: 300px;
min-height: 150px;
border: 1px solid #ccc;
resize: none;
font-size: 20px;
line-height:30px;
overflow: hidden;
word-wrap: break-word;
}

这里设置了min-height,给他们一个最小高度,里面的字体行高的都设置的一样,这样他们的表现就一致了。注意:为了纯英文的换行,加上word-wrap。
最后一段简单的脚本:
var textarea = document.getElementById('textarea');
var pre = document.getElementById('pre');

textarea.oninput = function() {
pre.textContent = textarea.value;
textarea.style.height = pre.offsetHeight + 'px';
}

监听textarea的input事件,更新自身的高度。

这时候,高度自适应的textarea已经构造完成了。但是pre这个元素我们是不想让他显示的,需要把他隐藏掉,但不能简单的display:none,这样就取不到pre的高度了,所以使用另外一个属性visibility,不过这个属性还是会占用空间的,把pre绝对定位即可:
.hide {
position: absolute;
z-index: -100;
visibility: hidden;
}

<pre class="input hide" id="pre"></pre>

大功告成!

不过还有一些兼容性工作要做,IE8以下是不支持oninput事件的,但他们支持一个更强大的属性:onpropertychange。
可能有的童鞋会觉得可以使用onkeyup或者onkeydown事件,我在chrome下试验了下,在textarea改变高度的时候,会有闪动,oninput的表现就比较平滑。推荐使用oninput。
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
百度网友9afc83e
2017-09-15 · TA获得超过1805个赞
知道小有建树答主
回答量:1395
采纳率:70%
帮助的人:670万
展开全部
利用textarea的scrollHeight属性,设置高度为scrollHeight。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式