June 7, 2011
PC画面の場合はさほど問題になりませんが、スマートフォンで入力値が数値の場合(郵便番号や電話番号など)には、数字入力用キーパッド(HTMLのinput type="number"input type="text"にpattern="[0-9]*"を指定してあげるとユーザービリティーが向上します。pattern属性は、正規表現で入力文字を制限する指定で、[0-9]*は数字に限定するという意味です。[0-9]*を指定すると自動的に英字キーボードの場合に数字用キーパッドが表示されます。input type="number"は、iOS4では問題なかったのですが、iOS5のSafariの仕様変更により連続した数字3桁を入力した場合に自動的にカンマが挿入されるのと、先頭に「0(ゼロ)」が入力できなくなったので避けたほうが無難です。
ただし、PC版のほとんどのブラウザではHTML5の「input type="number"」が正常に認識されませんので、javaScriptでスマートフォンと判定された特定のID属性を持つフォーム要素のtype属性をnumberに置換することで対処します。
iPhoneに関しては、英文字のキーパッドが指定されている状態では、先頭文字を入力する際、自動的に大文字指定になってしまいます(Windowsで言うところのShiftボタンが押された状態)。
特にログインIDやパスワード入力時には「大文字/小文字の入力違い」によるログインエラーを誘発する可能性があるため、画面内に存在するすべてのinput type="text"もしくは"password"を持つフォーム要素にデフォルトの大文字指定を解除する「autocapitalize="off"」属性を付与します。
フォームのデザイン面では、スマートフォンでviewportの値がuser-scalable=yesになっているかuser-scalableが設定されていない場合に、フォーム要素をfocusするとそのフォーム要素が拡大表示されます。この結果、左右に配置されていた他のフォーム要素や入力項目のタイトルが見切れてしまいますので、何を入力して良いか分からなくなってしまうケースがあるかと思います。スマートフォンでは入力項目のタイトル等はフォームの上下に配置されていることが望ましくなります。一方で、PC版ではこのような配置は見難くなってしまいますので、CSSで切り替えてあげる対処が望ましくなります。せめてスマートフォンで入力例がフォームのすぐ下に配置されていればそれなにりユーザビリティーは確保されるかと。
focus時にどの入力ボックスにカーソルがあてられているのか分かりやすくするために、CSSの「:focus」擬似属性で背景色を変更してあげるとより良くなりそうです。
//画面内に存在するすべての入力ボックスに一律autocapitalize="off"を設定する。
//注:IEでは[hasAttribute]が動作しないため、ローカルでの動作確認にはご注意を。function formTypeControl(){
var obj = document.getElementsByTagName("input");
var all = "";
for(var i = 0; i < obj.length; i++){
//オートキャピタライズ
if(obj[i].hasAttribute("autocapitalize")){
}else{
var textValue = obj[i].getAttribute("type");
if(textValue == "text" || textValue == "password" ){
obj[i].setAttribute("autocapitalize", "off");
//alert("autocapitalizeをONに設定しました。");
}else{
//alert("autocapitalizeを設定しませんでした。");
}
}
//数字入力
var tmpNumberObj = obj[i].getAttribute("name");//alert(tmpNumberObj);
if(
tmpNumberObj == "formのname属性を記述する"||
tmpNumberObj == "formのname属性を記述する"
){
obj[i].setAttribute("type", "number");
}}
}window.onload = function(){
formTypeControl();
}
Androidでは設定できませんが、iPhoneではラジオボタンとチェックボックスの大きさを指定することができます。ラジオボタンやチェックボックスと他の要素が至近距離に配置されていると、誤フリップ(クリック)を招く危険がありますので、大きさと余白を調整します。
ラジオボタンの場合、CSSのwidthやheightでも大きさを調整できますが、widthやheightを指定するとラジオボタンが四角く描画されてしまうので、チェックボックスとの見分けが付かなくなります。ラジオボタンはfont-sizeで指定した方が無難です。
input[type="checkbox"]{
margin:1em;
width:30px;
height:30px;
}
input[type="radio"]{
margin:1em;
font-size:30px;
width:auto;
}
formbad.html
悪い例の入力フォーム。
一見、何が悪いのかわかりませんが、以下の画面キャプチャーで良い例との差を書いていきます。
formgood.html
こちらは良い例の入力フォーム。
【悪い例】
「お名前」の入力フォームをタップして拡大表示された状態。
項目タイトルや入力例が見えないので何を入力して良いか分かりません。
またどこをfocus(どこにポインターがあるのか)しているのかも分かり難いです。
【良い例】
「お名前」の入力フォームをタップして拡大表示された状態。
項目タイトルは見えませんが、入力例がテキストボックスのすぐ下に表示されているので、何を入力したら良いか分かりやすくなっています。
【悪い例】
電話番号を入力しようとしています。
悪い点は、以下です。
●大文字指定(シフトキー)が指定されている。
●そもそも数字入力が必須なのに数字入力のキーパッドへの切替が必要。
【良い例】
電話番号を入力しようとしています。
大文字指定も解除(inputタグにautocapitalize=offを指定)されていますし、入力例も見えます。
更に、数字入力のキーパッドがデフォルトで指定(input type="number")されています。
【悪い例】
仮にこの画面で入力エラーがあったとしたら?と仮定します。ID入力フォームの先頭に半角スペースが入っているかどうか判断できますか?実は、半角スペースは入っていません。CSSでpaddingを大きく取ってしまったので、その判断がつきにくいUIになってしまっています。
【良い例】
入力ボックス内の左右余白を狭くしています。最低限、ID・PWの入力ボックスは対応しておきたいところです。