【发布时间】:2013-03-28 12:20:35
【问题描述】:
我正在做一个项目,我的 div 中有各种大小的数据。当用户点击其中一个 div 时,它需要变成一个可编辑的文本区域。宽度是恒定的,但我希望高度从原始 div 的高度开始,然后在添加滚动条之前增长到最大高度。这可能吗?
【问题讨论】:
-
最大高度是多少?
-
是的,这听起来可能。你需要javascript来做到这一点。
我正在做一个项目,我的 div 中有各种大小的数据。当用户点击其中一个 div 时,它需要变成一个可编辑的文本区域。宽度是恒定的,但我希望高度从原始 div 的高度开始,然后在添加滚动条之前增长到最大高度。这可能吗?
【问题讨论】:
您可以使用contenteditable,让用户直接输入div,这是一个演示:http://jsfiddle.net/gD5jy/
<div contenteditable>
type here...
</div>
div[contenteditable]{
border: 1px solid black;
max-height: 200px;
overflow: auto;
}
【讨论】:
pre 替换了div,并在Chrome 中得到了我想要的换行和换行。当我看到他的评论时,我检查了 Firefox,最后不得不将 white-space: pre-wrap 添加到我的 CSS 中。我没有尝试其他浏览器。
关于这个主题有一篇很棒的 A List Apart 文章:Expanding Text Areas Made Elegant
【讨论】:
container.className += "active"; 更改为container.className += " active"; 以使作者的代码正常工作。
这里是 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>
对我来说很好用
【讨论】:
textarea 不包含换行符,只是换行怎么办?
我用 Javascript 创立的最佳解决方案 (on 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>
【讨论】: