ガレコレ
Garage Collection
 
2013年12月18日(水)~19日(木)
<input type="number"> #■パソコン・通信

 HTML5で採用された<input>の属性を、詳しく勉強しました。

 新しい属性が、どのブラウザにどれくらい対応しているかは、参考にした幾つかのサイトでは、足並みが揃っていないばかりか、間違っている箇所も見受けられました。進化の途中って、整理するのが難しいんですよね。そこで、下記の最新ブラウザで検証してみました。

・IE
 
11.0.9600.16476
・Firefox
 
26.0
・Safari
 
5.1.7(7534.57.2)・・・Windows用最終版?
・Google
 
Chrome
 
31.0.1650.63
 
m
・Opera
 
12.16
・Luscape
 
6.8.10.27186
 ・Trident
 
11.0.9600.16476
 ・Gecko
 
Plugin
 
3.6.28/Gecko
 
1.9.2.28
 ・WebKit
 
Plugin
 
1.3.7/WebKit
 
535.3
 
r95080

 なお、Safari(iPhone)では、下記の属性はすべて有効ではなく、type属性はtype="text"として扱われます。Androidスマホは、保有していないので未確認です。



【type="number"
 
min="*"
 
step="*"】
 数字入力欄の右側の上下のボタンを「スピンボタン」と呼びます。

<input
 
type="number"
 
value="0"
 
min="0"
 
step="1000"
 
name="yen"
 
style="text-align:right;">円
※min:最小値、step:ステップ(初期値1)

 上記のように、記述しておけば便利ですね。1000円単位で上下できて、マイナスにはなりません。

 データベースしかり、Excelでも、「入力規則」が当たり前のように備わっているのに、HTML5では既定していないのでしょうか、ブラウザ対応はまちまちです。

・スピンボタンあり、入力規則有効
 Google
 
Chrome,
 
Opera
 ※Operaでは、文字の右寄せもしてくれます。
・スピンボタンあり、入力規則なし
 
(数字要求あり。入力サポートまで。)
 Safari,
 
Lunascape[WebKit]
・スピンボタンなし、入力規則有効
 IE,
 
Lunascape[Trident]
 ※minは内容まで警告してくれるが、stepは警告だけ。
・スピンボタンなし、入力規則なし
 
(type="text"と同じ。)
 Firefox,
 
Lunascape[Gecko]

 結局、IE11の中途半端な対応が致命的で、stepの利用ができず、JavaScriptでチェックしないといけませんね。その項目の入力完了時にチェックするか(onChage)、送信時にチェックするか(onSubmit)の2種類の方法が考えられます。

【step="0"】
 エラーと認識されるのか、スピンボタンで初期設定通りの増減1となります。

【step="any"】
<input
 
type="number"
 
step="any">
※スピンボタン非表示ではありません。
・スピンボタン表示、増減0
 Safari
・スピンボタン表示、増減1
 Google
 
Chrome,
 
Opera,
 
Lunascape[WebKit]

【電話番号】
<input
 
type="tel">
※正規表現で制限を掛けなければ、余り意味がありません。

【メールアドレス】
<input
 
type="email">。
・*@*.*の入力形式
 なし。ガレコレでは、JavaScriptでチェックする。
・*@*の入力形式
 IE、Firefox、Google
 
Chrome、Opera、Lunascape[Trident]
・未対応
 Safari,
 
Lunascape[Gecko,WebKit]

【入力必須】
<input
 
type="*"
 
required>
※パソコンでは、Safariのみ未対応。Windows版は1年以上も古いので、Mac版などはきっと有効なのだろう。

【オートフォーカス】
 HTML文書のロード後、フォーカスします。
<input
 
type="*"
 
autofocus>
※パソコンでは、すべてのブラウザが対応。もちろん、古いブラウザであるIE8では、非対応。

【利用できそうな属性】
 type="number"
 type="email"
 required
 autofocus
※IE8などにも対応させるには、JavaScriptで記述します。



 スピンボタンを表示させない方法を調べてみると、下記のような記述を見つけました。

<style
 
tyle="text/css">
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button
 
{
 
 
-webkit-appearance:none;
 
 
margin:0;
}
</style>

 Safari、Google
 
Chrome
 
では、数字入力において、スピンボタンが入力欄の内側に表示されているので、::-webkit-inner-spin-buttonの擬似クラスを指定するだけで効果があります。Opera
 
では、外側にあるので、outerの方で効くかと思いきや、非表示になりません。もともと、ブラウザの描写エンジンが、WebKitじゃありませんからね。-webkit-
 
は、CSSに正式採用されると、これが取れた表現になるのでしょう。

 つまり、下記のように記述すると、指定したidのスピンボタンだけが消えます。

<style>
#id_zip::-webkit-inner-spin-button
 
{
 
 
 
 
-webkit-appearance:none;
}
</style>
<input
 
type="number"
 
id="id_zip">



 なお、inputタグのCSSが細かく指定できなくて、今まで不便だなあと思っていたら、下記のように記述できたんですね。ひょうたんから駒で、いいもん見っけました。

<style>
input[type=number]
 
{
 
 
color:red;
}
input[type=text]
 
{
 
 
color:blue;
}
input[type=submit]
 
{
 
 
color:lime;
}
</style>

P.S.
 
Windows用Safariは、2012年5月9日以来、提供されていないんだね。挙動が、古くておかしいと思ったもん。Windowsでのチェックは、もう意味がないので外します。
http://support.apple.com/kb/dl1531?viewlocale=ja_JP

P.S.2
 
Lunascapeは、3つのエンジンを最新版でサポートしていくのが、無理になっているご様子。チェックから外します。

P.S.3
 
Windows版では、Google
 
Chromeが一番いいブラウザだと判断します。IE開発者の頭の中を疑いますね。
 
お問い合わせ

Warning: pg_query(): Query failed: ERROR: duplicate key value violates unique constraint "gc_counter_pkey" in /home/vps100824749/public_html/index.php on line 1313

Warning: pg_affected_rows() expects parameter 1 to be resource, boolean given in /home/vps100824749/public_html/index.php on line 1314
error: insert into counter