【JavaScript】placeholderに改行を入れる方法

placeholder のヒント文を2行・3行に分けて表示したい」というニーズはよくあります。結論から言うと、<textarea> なら改行できます。逆に <input> は1行入力なので改行は表示できません。

ネット上には「placeholderは改行できない」「CSSの white-space が必要」といった誤った情報も見られます。この記事では、実際に動く正しい方法だけを解説します。

この記事の結論:<textarea>placeholder は、HTMLなら &#10;、JavaScriptなら \n を入れるだけで改行されます。CSSの white-space 指定は不要です。<input> は1行のため改行できないので、ヒントはラベルや補助テキストで補います。
スポンサーリンク

textareaなら改行できる(HTMLだけでOK)

もっとも簡単な方法です。placeholder 属性の中で、改行したい位置に改行を表すHTMLエンティティ &#10;(LF=ラインフィード)を書きます。

HTML: で改行する
<textarea placeholder="お名前を入力&#10;(例:山田 太郎)" rows="4"></textarea>

これだけで、プレースホルダーが2行で表示されます。JavaScriptもCSSも要りません。実際の表示は次のとおりです。

↓ 実際の表示例:

JavaScriptで動的に設定する

入力内容やページの状態に応じてプレースホルダーを切り替えたい場合は、JavaScriptで設定します。placeholder プロパティに 改行文字 \n を含む文字列を代入するだけです。

JavaScript:\n で改行する
const el = document.getElementById("note");

// \n がそのまま改行として表示される
el.placeholder = "1行目のヒント\n2行目のヒント\n3行目のヒント";
よくある誤解:「CSSの white-space: pre-line を指定しないと改行されない」という説明を見かけますが、これは不要です。<textarea> のプレースホルダーは、\n(または &#10;)が入っていればそれ自体で改行表示されます。white-space は入力された値の表示を制御するプロパティで、プレースホルダーの改行とは無関係です。

inputでは改行できない(代替手段)

<input>1行だけの入力欄なので、placeholderに &#10;\n を入れても改行されず、多くのブラウザでは空白に置き換えられるか無視されます。

複数行のヒントを出したいときは、placeholderに詰め込まず、ラベルや入力欄の下の補助テキストで補うのがアクセシビリティ的にも適切です。

HTML:ラベル+補助テキストで補う
<label for="zip">郵便番号</label>
<input id="zip" placeholder="例:100-0001">
<p class="hint">ハイフンありで入力してください</p>

入力欄に最初から文字を出す方法(placeholdervalue の違い)は入力フォームに最初からテキストを表示する方法、入力をリアルタイムに扱う実装はフォーム入力をリアルタイムで監視する方法を参考にしてください。

placeholderの色・行間をCSSで整える

改行した複数行プレースホルダーは行間を少し広げると読みやすくなります。スタイルは ::placeholder 疑似要素で指定します。

CSS:::placeholder のスタイル
textarea::placeholder {
  color: #999;
  font-style: italic;
  line-height: 1.6; /* 改行時の行間を調整 */
}

色・フォント・フローティングラベルなど詳しいスタイリングはplaceholderのスタイル完全ガイドにまとめています。

placeholderを説明文の代わりにしない

使いすぎに注意:プレースホルダーは入力を始めると消えてしまうため、入力中に内容を確認できません。改行を使って長い説明を詰め込むより、恒久的に表示されるラベルや補助テキストに分けたほうが、ユーザーにも支援技術(スクリーンリーダー)にも親切です。プレースホルダーはあくまで「入力例の軽いヒント」に留めましょう。

なお、HTMLの仕様上はplaceholderに改行を含めることは推奨されていませんが、<textarea> については主要ブラウザ(Chrome・Firefox・Edge・Safari)が改行を反映するため、実務では問題なく使えます。

よくある質問(FAQ)

QJavaScriptでplaceholderに改行を入れるには?
A<textarea> なら、el.placeholder = "1行目\n2行目" のように改行文字 \n を含む文字列を代入するだけで改行表示されます。CSSの追加指定は不要です。
QHTMLだけで複数行のplaceholderにできますか?
Aできます。placeholder="1行目&#10;2行目" のように、改行位置にHTMLエンティティ &#10; を入れます。JavaScriptもCSSも使わずに <textarea> で複数行表示になります。
Qinputのplaceholderは改行できますか?
Aいいえ。<input> は1行入力のため改行は表示できません。複数行のヒントが必要なら、placeholderに詰め込まずラベルや補助テキストで補うのが適切です。
Qplaceholderの文字色やフォントをCSSで変更するには?
A::placeholder セレクタで指定します。例:textarea::placeholder { color: #999; font-style: italic; }。モダンブラウザならベンダープレフィックスなしで対応できます。

まとめ

<textarea> のプレースホルダーは、HTMLなら &#10;、JavaScriptなら \n を入れるだけで改行できます。よく見かける「CSSの white-space が必要」という説明は誤りで、指定は不要です。

<input> は1行のため改行できないので、複数行のヒントはラベルや補助テキストで補いましょう。プレースホルダーは入力時に消えてしまう性質があるため、長い説明文の代わりにはせず、軽いヒントに留めるのが使いやすいフォームのコツです。