textarea 要素内の placeholder 属性で改行するには
前回の記事で placeholder 属性というものを紹介した。
placeholder 属性は1行テキストボックスだけでなく、テキストエリアにも使える。そして、テキストエリアでも使えるということは、プレースホルダの文言も改行できるのではないか、と考えて調べてみた次第。
やり方を調べてみると、実体参照で改行コードを書くパターンと、実際にコード中に改行を入れるパターン、そして Webkit 系でのみ CSS を使って改行するパターンと、大きく3種類が見つかった。
実体参照で改行コードを書く
実体参照。10進数だと
、16進数だと 

で、CR・LF を挿入する、というやり方だ。textarea 要素内に value として書く場合は、どのブラウザでも改行されるが、placeholder 属性の値に書いた場合は、Chrome 50 と IE11 でしか有効にならなかった。
コード中に改行を入れる
<textarea placeholder="感想を
お書き
ください"></textarea>
こんな風なコードにする。
<textarea>初期値を
改行して
書く</textarea>
こうやって value として初期値を書くときに改行するのは、実体参照で書いた時と同様、どのブラウザでも改行されるが、こちらも改行が有効になるのは Chrome 50 と IE11 だけだった。
CSS で改行する
上のサイトなどで紹介されていた方法。
<textarea placeholder="First line"></textarea>
という HTML に対し、
textarea::-webkit-input-placeholder::after {
display:block;
content:"Second line \a Third line";
}
と書くことで、2行目以降を追加できるというもの。\a
は、CSS における改行のエスケープ文字とのこと。
しかしこれを確認しているときに Chrome のバージョンを 48 から 50 にアップしたら、効かなくなってしまった。どうやら Chrome では修正されてしまった模様。同じ Webkit 系ということで、OS X における Safari 9.1 ではまだ有効だが、バージョンアップによって対応されなくなるかもしれない。
デモコードで確認
MacBook Pro を買ったこともあり、OS 間の差異も含めて現行ブラウザでの表示仕様を確認してみた。以下のデモをドウゾ。
- デモ : Placeholder In Textarea
- コード : frontend-sandboxes/index.html at master · Neos21/frontend-sandboxes
Chrome と Firefox が Windows・Mac OS X の両 OS をサポートしていて、この2つは OS 間で表示差異がなかった。良い時代になりましたなぁ…。
Firefox はどういう方法でも改行できなかった。実現するには JavaScript で value を書き換えてやらないとダメか。
「改行できればしておきたい」程度で良いのであれば、Chrome と IE11 向けに、10進数か16進数のどちらでも良いので、実体参照で書くのが良さげか。
仕様上は改行を許容していない?
こちらで見ると、改行を許容しないように見える。
placeholder = string without line breaks
A short hint (one word or a short phrase) intended to aid the user when entering data into the control represented by its element.
Value: Any string that contains no line feed (U+000A, "LF") or carriage return (U+000D, "CR") characters.
こちらを見ると、改行を許容するように、と読み取れる。
- 参考 : HTML 5.2: 4.10. Forms
- 参考 : 4.10 フォーム — HTML5 日本語訳
User agents should present this hint to the user when the element's value is the empty string and the control is not focused (e.g. by displaying it inside a blank unfocused control). All U+000D CARRIAGE RETURN U+000A LINE FEED character pairs (CRLF) in the hint, as well as all other "CR" (U+000D) and "LF" (U+000A) characters in the hint, must be treated as line breaks when rendering the hint.
どれが正解なんだろう?
まぁ、テキストエリアのプレースホルダを改行したい、なんてそうないと思うので、あんまり気にしなくてもいいか。w