2011-04-02 194 views
7

我需要使用textarea来显示一些文本。问题是,如果我放置4-5行文本滚动条将出现。我如何使用CSS/HTML,以使textarea的大小与内容一样大(无滚动条)。Textarea调整大小

  • textarea的并不需要改变它的大小dynamicaly,我用它只是显示一个文本(我还可以使用禁用的textarea)

  • 我想textarea的只verticaly舒展。

如果你想知道:
我使用textarea的显示从数据库中的一些文字,所以在创建文本区域(在它的文字)时,应立即显示整个文本没有滚动条。

+1

textarea的整点是让用户输入文字。如果你想显示文本,使用适当的语义元素(可能是div,p或pre)。 – Quentin 2011-04-03 14:42:13

回答

5

恐怕你不得不求助于javascript来设置你的textarea的高度。您可以使用scrollHeight属性来确定总高度。

或者,您可以使用div并将div设置为textarea。 div会自动增长,因为无论如何它是一个禁用的textarea,你不需要它成为一个textarea。

1

您可以使用CSS height:和width:attributes,例如, G。像 <textarea style="width:400px;height:300px">...</textarea>,只需使用你想要的尺寸。

另外,如果要禁止滚动条,请使用overflow:hidden

+0

问题是所显示的文字大小不一,所以我不能说“宽度:300px;” 。一个文本区域可以是200px大小,另一个可以是800px ... – Cristy 2011-04-02 12:46:04

0

查找最可能显示的字体的高度。我不确定CSS/HTML,但可以使用Javascript/PHP/ASP.net使用地图来确定文本的大小基于字符的数量。如果你用等宽字体来做,这将会更容易。为什么使用文本区域时,只能使用一个标签来完成相同的操作?

+0

我使用textarea是因为它是我前一段时间制作的网站,然后我用textarea做了它,我无法改变它。我的意思是,当你输入一个div,span时,div会自动调整大小。我不能“激活”在textarea自动调整大小吗?:D – Cristy 2011-04-02 12:47:08

+0

那么,每一个控制是做不同的事情。 Textareas故意制作,以免重新调整大小。你需要使用textarea的原因是什么? – FreeSnow 2011-04-02 12:48:53

+0

因为我在一年前创建了一个网站,所以让我们添加一些广告(包含文本)。那时候我用textareas来点击它,现在我想改变它们的外观。我不想浏览已发布的所有广告,并用div替换“textarea”。 – Cristy 2011-04-02 12:56:05

0

如果你不介意使用,你可以使用JavaScript从下面的文章中的一个方法: http://james.padolsey.com/javascript/jquery-plugin-autoresize/ http://scvinodkumar.wordpress.com/2009/05/28/auto-grow-textarea-doing-it-the-easy-way-in-javascript/

但是从你的追问我假设你想纯CSS的解决方案。 然后你可以使用简单的div和下面的CSS(如果你只是想显示文本)的textarea的只是模仿appereance:

div { 
    cursor: text; 
    background: lightGray; 
    border: 1px solid gray; 
    font-family: monospace; 
    padding: 2px 0px 0px 2px; 
} 
+0

“坏”已经完成。我在之前创建的页面中使用了textarea,我希望对所有页面都做这些,而不改变页面的任何内容,只更改CSS filme – Cristy 2011-04-03 14:21:41

+0

对于CSS(即使使用CSS3)也是不可能的。你必须诉诸使用一小段JavaScript。 – Eskat0n 2011-04-04 05:36:26

4

好吧,我刚刚发现这个和它的作品非常漂亮:

<html> 
<head> 
<script> 
function textAreaAdjust(o) { 
    o.style.height = "1px"; 
    o.style.height = (25+o.scrollHeight)+"px"; 
} 
</script> 
</head> 
<body> 
<textarea onkeyup="textAreaAdjust(this)" style="overflow:hidden"></textarea> 
</body> 
</html> 

现在,我不应该认为你知道Javascript(但你可能)。

只要运行

textAreaAdjust(document.getElementById("id of your text area")) 

类似的东西应该工作。我不是最好的Javascript(甚至没有关闭,我刚开始使用它)

这似乎做了类似于你想要的东西。第一个代码示例是针对一个textarea,它根据其中的内容(输入时)进行动态更改。这将需要几个变化,以得到它想要的。

+0

我知道JavaScript,但我不想在这里使用它。另外,我说textarea不必是可编辑的,或者在写入时改变它的大小。它只需要显示其中的所有文本(当页面加载时)而没有滚动条。 – Cristy 2011-04-03 14:17:41

+0

我知道C++,我也可以创建这个宏,但...有趣的是哪里? xD – Cristy 2011-04-07 13:54:21

+0

很多很多。最好创建一个干净的书面网站,而不是使用黑客行为。特别是在与客户打交道时。 – FreeSnow 2011-04-07 13:56:39

0

我假设name属性没有使用。您可以使用此替代(HTML5):

http://jsfiddle.net/JeaffreyGilbert/T3eke/

+0

Wtf?每当我按div输入时,就会发生一些奇怪的事情:))它在那个里面创建另一个div。 – Cristy 2011-04-03 14:15:47

+0

http://jsfiddle.net/JeaffreyGilbert/T3eke/1/ – 2011-04-03 15:58:03

12
<!DOCTYPE html> 
<html> 
<head> 
<title>autoresizing textarea</title> 
<style type="text/css"> 
textarea { 
    border: 0 none white; 
    overflow-y: auto; 
    padding: 0; 
    outline: none; 
    background-color: #D0D0D0; 
    resize: none; 
} 
</style> 
<script type="text/javascript"> 
var observe; 
if (window.attachEvent) { 
    observe = function (element, event, handler) { 
     element.attachEvent('on'+event, handler); 
    }; 
} 
else { 
    observe = function (element, event, handler) { 
     element.addEventListener(event, handler, false); 
    }; 
} 
function init (maxH) { 
     var text = document.getElementById('text'); 
    var maxHeight=maxH; 
    var oldHeight= text.scrollHeight; 
    var newHeight; 
    function resize() { 

    text.style.height = 'auto'; 
    newHeight= text.scrollHeight; 
    if(newHeight>oldHeight && newHeight>maxHeight ) 
    { 
     text.style.height=oldHeight+'px'; 

    } 
    else{ 
     text.style.height = newHeight+'px'; 
     oldHeight= text.scrollHeight; 
    } 

    } 
    /* 0-timeout to get the already changed text */ 
    function delayedResize() { 
     window.setTimeout(resize, 0); 
    } 
    observe(text, 'change', resize); 
    observe(text, 'cut',  delayedResize); 
    observe(text, 'paste', delayedResize); 
    observe(text, 'drop', delayedResize); 
    observe(text, 'keydown', delayedResize); 

    text.focus(); 
    text.select(); 
    resize(); 
} 
</script> 
</head> 
<body onload="init(200);"> 
<textarea rows="1" style="height:1em;" id="text"></textarea> 
</body> 
</html> 

http://jsfiddle.net/TDAcr/

+3

辉煌,阿敏!我觉得我已经找到了这个在互联网上的黄金。你应得到超过四票的选票,但我只能得到一票,我可以给你。 – Charlesism 2013-12-28 11:46:26

0

可以使用div像textarea的。很可能是这样的:

<div contenteditable="true" style="width:250px; border:1px solid #777" ></div