input type =“ text”要素内のテキストの折り返しHTML / CSS


98

以下に示すHTMLは、

<input type="text"/>

次のようにブラウザに表示されます。


次のテキストを追加すると、

速い茶色のキツネは怠惰な犬を飛び越えました。

以下のHTMLを使用して、

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

次のようにブラウザに表示されます。


しかし、私はそれを次のようなブラウザに表示したいと思います。


input要素のテキストを折り返したい。これはtextareaなしで達成できますか?


3
いいえ、できないと思います。しかし、なぜtextareaがオプションではないのですか?
ペッカ2011年

37
複数行のテキストの入力を許可したくないため、textareaの使用がオプションではない場合があります。1行のテキストを折り返すだけです(注:これらは同じものではありません)。
Flatliner DOA 2013

標準化のためにCSSWGでこの正確な目的のために議論された解決策がありますが、残念ながら私は問題を見つけることができません。
ヌル


1
@Pekka웃は関連性があるわけではありませんが、いくつかの理由があります。textareasでhtml5検証を使用できない。パターン制約を使用してtextareasを検証することはできません。textareaは、input type = text(type textである入力です!)の不要な同義語であり、2倍のスタイル設定などを意味します。要するに、多くの理由があります。
PeterKionga-Kamau19年

回答:


63

それがtextarea'の仕事です-複数行のテキスト入力の場合。それinput をしません; それを行うように設計されていません。

したがって、を使用しtextareaます。視覚的な違いに加えて、JavaScriptを介して同じ方法でアクセスします(valueプロパティを使用)。

inputイベントを介して、単にreplace(/\n/g, '')。を使用して改行が入力されるのを防ぐことができます。


74
これは、入力時に折り返されていることを表示しながら、入力の1行を収集する方法の質問に実際には答えていません。
ehdv 2014年

3
これに関する主な問題は、textareaがモバイルデバイスの移動ボタンを抑制することです。
ダン

2
@alexその通り。したがって、実際の複数行入力が必要な場合は、textareaの方が適していますが、単語でラップされた入力が必要な場合は、cssソリューションの方が適しています。
ダン

1
これは<textarea>jQueryのオートコンプリートのようなものでは機能しないと言っていましたが、<input>をに変更するだけ<textarea>で十分です。標準のためにやった!
Sablefoste 2016年

9
上で述べたように:行の折り返し!==複数行の文字列。質問に答えないので、なぜこれが受け入れられた答えなのかわかりません。
mattLummus 2017

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でテストしたところ、動作しませんが、Safari9とChrome48では動作するようです:cssdesk.com/dbCSQ
Jason Sperske 2016

6
@JasonSperskeによって取り付けデモは、Firefox 45でないクロム50でもない私のために動作しません
ツェルニー

デモはLinuxのchrome48で動作しますが、自分のページの同じcssは動作しません。
Mnebuerquo 2016

43
ソリューションは少なくとも
chrome50

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を使用する必要があります。wrap="soft"コードでtextareaを使用し、オプションで次のような残りの属性を使用します。

<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;は、スタイル領域で次のような属性を使用します。textareaのサイズを変更できないresize:none;ようにするには、次のようなスタイルを使用できます。

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

このようにして、入力テキストボックスとまったく同じように機能するが、入力テキストを使用せずに行を使用する、ワードラップと最大文字長「40」文字の14行10列のテキストエリアを作成または例証できます。

注: textareaは、行<input type="text" name="tbox" size="10"></input>まったく処理しないように作成された入力とは異なり、行を処理します。


7

内部の値が1行の文字列であるが、単語でラップされた形式でユーザーに表示されるテキスト入力を作成するには、または他の要素で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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.