我可以让文本区域随着文本增长到最大高度吗?

问题描述 投票:0回答:6

我正在开发一个项目,其中的 div 中的数据可以是各种大小。当用户单击其中一个 div 时,它需要变成一个可编辑的文本区域。宽度是恒定的,但我希望高度从原始 div 的高度开始,然后在添加滚动条之前增长到最大高度。这可能吗?

html css textarea
6个回答
69
投票

您可以使用

contenteditable
,让用户直接输入
div
,这里有一个演示:http://jsfiddle.net/gD5jy/

HTML

<div contenteditable>
    type here...
</div>

CSS

div[contenteditable]{
    border: 1px solid black;
    max-height: 200px;
    overflow: auto;
}

8
投票

有一篇关于此主题的优秀 A List Apart 文章:扩展文本区域变得优雅


6
投票

这是 JavaScript 函数

// TextArea is the Id from your textarea element
// MaxHeight is the maximum height value
function textarea_height(TextArea, MaxHeight) {
    textarea = document.getElementById(TextArea);
    textareaRows = textarea.value.split("\n");
    if(textareaRows[0] != "undefined" && textareaRows.length < MaxHeight) counter = textareaRows.length;
    else if(textareaRows.length >= MaxHeight) counter = MaxHeight;
    else counter = 1;
    textarea.rows = counter; }

这里是css样式

.textarea {
height: auto;
resize: none; }

这是 HTML 代码

<textarea id="the_textarea" onchange="javascript:textarea_height(the_textarea, 15);" width="100%" height="auto" class="textarea"></textarea>

对我来说效果很好


1
投票

我用 Javascript 创建的最佳解决方案(在developer.mozilla.org),并且适合在一行中使用并且具有一点风格。

单独的Javascript仅对演示的自动编写有用。

/*
      AUTO TYPE TEXT FROM THIS S.O. ANSWER: 
          https://stackoverflow.com/a/22710273/4031083
          Author @Mr.G
*/
var demo_input = document.getElementById('txtArea');

var type_this = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed blandit turpis, eu auctor arcu.\r\n\r\nCras iaculis urna non vehicula volutpat. Nullam tincidunt, ex sit amet commodo pulvinar, lorem ex feugiat elit, non eleifend nisl metus quis erat.";
var index = 0;

window.next_letter = function() {
    if (index <= type_this.length) {
        demo_input.value = type_this.substr(0, index++);
        demo_input.dispatchEvent(new KeyboardEvent('keyup'));
        setTimeout("next_letter()", 50);
    }
}

next_letter();
<!-- THE MAIN PART -->
<textarea 
  id = "txtArea"
  cols="20" 
  rows="4" 
  onkeyup="if (this.scrollHeight > this.clientHeight) this.style.height = this.scrollHeight + 'px';"
  style="overflow:hidden;
         transition: height 0.2s ease-out;">
         
</textarea>


0
投票

我知道这个问题相当老了,但是我用来动态缩放

textarea
的一个技巧是检查
scrollTop
元素的
textarea
是否大于零,因为这意味着它是可滚动的。如果它是可滚动的,只需在
while
循环中增加行,而
scrollTop
大于零...

if(textarea.scrollTop>0){
            while(textarea.scrollTop>0){
                textarea.rows++;
            }
        }

-2
投票

旧帖子,但这是谷歌上的最高结果,所以让我分享我的简单答案。

我只是做了一个每 200 毫秒运行一次的函数,更新文本区域。这是一个非常简单的方法,但它对我有用。

请忽略CSS!只是装饰用的。

function textarea_height() {
    var textarea = document.getElementById("htmlinput");
  textarea.rows = textarea.value.split("\n").length;
}
setInterval(textarea_height, 200);
#htmlinput {
  border-color: black;
  border-radius: 15px;
  border-width: 3.3px;
  font-family: monospace;
  background-color:lightgray;
  width: calc(98%);
  padding: 5.5px;
}
<html>
<head>
<title> StackOverflowExample </title>
</head>
<body>

  <textarea id="htmlinput">Here is my
  Very Cool
  Text Area
  it even fits
  to the lines of
  the text!</textarea>

</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.