2014年に制作した記事を2016/09に加筆修正
(値が空の)入力フォームにあらかじめテキスト(入力例など)や画像を表示しておき、ユーザがフォーカスすると消えて入力できるようになるといったものを見たことがあると思います。
従来はjsなどを駆使して実現していましたが、HTML5ではplaceholder属性を使って簡単に実装できるようになりました。
ただし、古いブラウザなどではplaceholder属性が使えなかったりするので、企業のwebサイトなどで古いブラウザもサポートすると明言している場合は、従来通りjsなどを使うことになります。
テキストボックスなどにプレースホルダーであらかじめ表示された文字はフォーカスすると消えてしまうので、例えばその内容が「1,000文字以内。特殊文字NG。改行可。」などと長々とした注意書きだった場合、入力中にユーザーが「あれ?何文字以内だっけ?」などと思っても、わからなくなってしまう問題があります。
重要な注意事項である場合は、テキストボックスの外側にも注意書きを常に表示しておくなどの配慮が必要です。
placeholder属性に対応していないブラウザでは、テキストボックス内になにも表示されません。
プレースホルダーであらかじめ表示されるテキストが消えるタイミングは、OS及びブラウザ(及びそれらのバージョン)の組み合わせによって違うようです。
<input type="text" placeholder="テキスト">
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
これといって特別なことはする必要はありません。inputタグやtextareaタグにplaceholder属性を追加して、適切なテキストを入れてください。
テキストカラーはブラウザ(もしくはOS)側でなんとなくそれっぽい色にしてくれるみたいですが、これもOS・ブラウザ(それらのバージョン)の組み合わせによって異なるようです。
擬似セレクタを使って装飾できます。
OS・ブラウザ(それらのバージョン)の組み合わせによってはcssが効いたり効かなかったりするようです。
:placeholder-shown { color: #999; } /* ベンダープレフィックスなし */
::-webkit-input-placeholder { color: #999; } /* コロン(:)2つ必要 */
:-moz-placeholder {color: #999; opacity: 1; } /* Firefox 18- */
::-moz-placeholder { color: #999; opacity: 1; } /* Firefox 19+ コロン(:)2つ必要 */
:-ms-input-placeholder { color: #999; } /* IE 10+ */
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
いずれ、placeholder-shownに統一されると思うのですが、ご覧のとおり2016/09現在、記述がバラバラです。注意してください。
placeholder属性に対応していないブラウザに対しては、jsを使って対処する方法があります。
IE6でも動作するはずです。
<input type="text" style="color:#999;" onblur="sText(this)" onfocus="cText(this)" value="テキスト">
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
inputタグに直にスタイルを設定している以外は、とくにcssの設定は必要ないです。
function cText(obj){
if(obj.value==obj.defaultValue){
obj.value="";
obj.style.color="#5a5a5a";
}
}
function sText(obj){
if(obj.value==""){
obj.value=obj.defaultValue; //FF対策
obj.style.color="#999";
}
}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
背景画像で入力補助するパターンです。js使用その1では、inputのtypeがpasswordの時視認できませんが、画像を使うとこの問題を解消できます。
IE6でも動作するはずです。
<input type="text" style="background-image: url(画像ファイルのパス);" onblur="ShowFormGuideImage1(this);" onfocus="HideFormGuideImage(this);" value="">
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
input{
background-repeat: no-repeat;
background-position:0 2px; /*必要であれば、画像の位置も調整*/
}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
cssは背景画像の繰り返しについてなど必要な設定しておきます。
function ShowFormGuideImage1(obj) {
// 画像を表示
if( obj.value == '' ) {
obj.style.backgroundImage='url(画像ファイルのパス)';
}
}
function HideFormGuideImage(obj) {
// 画像を消す
obj.style.backgroundImage = '';
}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
関数名は任意です。
HTML5のplaceholder属性は便利ですが、古いブラウザでは使えないので、jsで対応する方法をご紹介しましたが、上記のjs使用その1のようにvalue属性の初期値を入力補助(プレースホルダー)として表示するようにしてしまうと、この値がユーザ入力値としてサーバーまで送信されてしまうこともありえます。
これを回避するプログラムを組んでも良いのでしょうが、HTML5のplaceholder属性を使うか、js使用その2のようにvalue属性の初期値を使わずに背景画像で表現するなどした方が楽です。
というわけで、ここではIE9以下対策として、placeholder属性を代替するjQueryプラグイン(ah-placeholder.js)を使用する方法をご紹介します。
jqueryのプラグインなので、jQueryライブラリが読み込まれていることが前提です。
左のinputタグはプラグインを適用していないので、IE9以下では入力補助が表示されません。
右のinputタグはIE6でも表示します。
当然ながら、placeholder属性対応済みのブラウザではどちらも入力補助が表示されます。
inputタグのtype属性の値がpasswordの場合、placeholder属性対応済みのブラウザでは視認できる文字列で表示されますが、未対応のブラウザでは視認できない文字列に変換されるので、どうしてもパスワード入力で使いたい場合は、独自で何らかの処理を入れないといけません。よくわからない場合は諦めて、上記のjs使用その2のようにすると良いでしょう。
<input type="text" placeholder="テキスト" class="ph">
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
$(function(){
$('.ph').ahPlaceholder({
placeholderColor : '#999',
placeholderAttr : 'placeholder',
likeApple : true
});
});
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
このプラグインは、placeholder属性が有効なブラウザでは実行されないようになっているので、html側でplaceholder属性を使用した場合、placeholderColorオプションやlikeAppleオプションはplaceholder属性が有効なブラウザでは無効です(placeholder属性が有効なブラウザでテキストカラーを変えたいときはcssで対処してください)。
title属性を使用すれば、このプラグインが動くブラウザすべてにこれらのオプションが適用されます。
はじめの方にもちらっと書きましたが、プレースホルダーを使用する際には配慮が必要です。
例えば、プレースホルダーをラベル代わりに使ってしまうと、何か入力しようとするとプレースホルダーのテキストは消えてしまうので、一体何を入力すべきフォームなのかわからなくなってしまいます。
placeholder(入力補助)は本当に必要なのか、かえってユーザの負担になっていないか、目的に沿った使い方をしているか・・・等々よく考えて使用してください。
本来は入力補助がなくてもユーザが迷わないように、入力フォームを設計すべきです。