在输入类型=“文本”元素HTML / CSS中包装文本


98

下面显示的HTML,

<input type="text"/>

在浏览器中显示如下:


当我添加以下文本时,

敏捷的棕色狐狸跳过了那只懒狗。

使用以下HTML,

<input type="text" value="The quick brown fox jumped over the lazy dog."/>

它显示在浏览器中,如下所示:


但我希望将其显示在这样的浏览器中:


我希望输入元素中的文字换行。可以在没有文本区域的情况下完成此操作吗?


3
不,我认为不会。但是为什么不能选择textarea?
Pekka

37
有时不能选择使用textarea,因为您不想允许输入多行文本。仅包装一行文字(注意:它们不是同一回事)。
Flatliner DOA

CSSWG已针对此确切目的讨论了一个解决方案,但是遗憾的是我找不到问题。
无效


1
@Pekka웃并不相关,但是一些原因包括:我们不能在textareas上使用html5验证;我们不能使用模式约束来验证文本区域;textarea是输入type = text的不必要同义词(它是文本类型的输入!),意味着两倍的样式等。总之,原因很多。
Peter Kionga-Kamau

Answers:


63

那是textarea工作-用于多行文本输入。该input 不会去做; 它并非旨在做到这一点。

所以用一个textarea。除了它们的视觉差异外,还可以通过JavaScript以相同的方式(使用value属性)对其进行访问。

您可以防止通过input事件输入换行符,而只需使用即可replace(/\n/g, '')


74
这实际上并不能回答在显示输入时包装的输入时如何收集单行输入的问题。
ehdv

3
一个主要的问题是文本区域会抑制移动设备上的“执行”按钮。
Dan

2
@alex确实如此。因此,如果您想使用真正的多行输入,那么textarea会更好,但是如果您只想使用自动换行输入,那么CSS解决方案会更好。
2013年

1
我要说的是,<textarea>这不适用于jQuery的自动完成功能,而只需更改<input><textarea>,这就是所有必要的事情。为标准万岁!
Sablefoste

9
如上所述:包装一行!==多行字符串。我不确定为什么这是可接受的答案,因为它没有回答问题。
mattLummus

36

断字将模仿某些意图

    input[type=text] {
        word-wrap: break-word;
        word-break: break-all;
        height: 80px;
    }
<input type="text" value="The quick brown fox jumped over the lazy dog" />

作为解决方法,此解决方案在某些浏览器上失去了有效性。请检查演示:http : //cssdesk.com/dbCSQ


7
我刚刚在Firefox 43.0.4中对其进行了测试,但是它在Safari 9和Chrome 48中却无法正常工作:cssdesk.com/dbCSQ
Jason Sperske,2016年

6
@JasonSperske随附的演示在Firefox 45和Chrome 50中都不适用于我
。– czerny

该演示适用于Linux上的chrome 48,但在我自己的页面中没有相同的CSS。
Mnebuerquo '16

43
解决方案至少从chrome 50开始过时了:(
userlond

5
忘了这个解决方案:不适用于Chrome 74/75,Firefox 63/67,Edge 42,IE 11和UCBrowser 7.0(但适用于GNOME Web 3.28-AppleWebKit / 605.1.15)
tanguy_k

10

不能使用输入,而需要使用textarea。将textarea与wrap="soft"代码以及其他可选属性一起使用,如下所示:

<textarea name="text" rows="14" cols="10" wrap="soft"> </textarea>

属性:例如,要将其中的文本数量限制为“ 40”个字符,可以添加如下属性maxlength="40"<textarea name="text" rows="14" cols="10" wrap="soft" maxlength="40"></textarea> 隐藏滚动样式。如果你只使用overflow:scroll;overflow:hidden;overflow:auto;将只需要一个滚动条的影响。如果每个滚动条都需要不同的属性,请overflow:scroll; overflow-x:auto; overflow-y:hidden;在样式区域中使用以下属性:要使文本区域不可调整大小,可以使用如下样式resize:none;

<textarea name="text" rows="14" cols="10" wrap="soft" maxlength="40" style="overflow:hidden; resize:none;></textarea>

这样,您可以拥有一个示例文本区域,该区域具有14行10列,带有自动换行,最大字符长度为“ 40”个字符,其作用与输入文本框完全相同,但具有行而不是不使用输入文本。

注意: textarea适用于行,与类似的输入不同<input type="text" name="tbox" size="10"></input>,后者完全不适用于行。


7

要创建文本输入,其中幕后的值是单行字符串,但以自动换行的格式显示给用户,可以在a或其他元素上使用contenteditable属性<div>

const el = document.querySelector('div[contenteditable]');

// Get value from element on input events
el.addEventListener('input', () => console.log(el.textContent));

// Set some value
el.textContent = 'Lorem ipsum curae magna venenatis mattis, purus luctus cubilia quisque in et, leo enim aliquam consequat.'
div[contenteditable] {
  border: 1px solid black;
  width: 200px;
}
<div contenteditable></div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.