数値入力フィールドのスピンボタンを非表示にする方法
問題
type="number"
の入力フィールドには、デフォルトでインクリメント/デクリメントボタン(スピンボタン)が表示されます。これらのボタンを非表示にし、クリーンな入力インターフェースを実現する方法について解説します。
html
<input type="number" placeholder="電話番号" class="border p-4 outline-none">
解決策
推奨方法: inputmode="numeric"の使用
最もシンプルで互換性の高い解決策は、type="number"
の代わりにinputmode="numeric"
を使用することです。
html
<input type="text" inputmode="numeric" class="border-2">
メリット
- スピンボタンが表示されない
- キーボード入力が数値専用になる
- すべてのモダンブラウザでサポート(2021年12月以降)
- デフォルトのブラウザスタイルに依存しない一貫した表示
CSSを使用した方法
既存のtype="number"
入力フィールドのスピンボタンを非表示にする場合、ブラウザごとに異なるアプローチが必要です。
グローバルなスタイル設定
css
@layer base {
input[type="number"] {
/* Firefox用 */
appearance: textfield;
/* Chrome, Edge, Safari用 */
&::-webkit-inner-spin-button,
&::-webkit-outer-spin-button {
appearance: none;
}
}
}
個別のクラスでの適用
特定のフィールドのみに適用したい場合は、カスタムユーティリティクラスを作成します。
css
@utility hide-spin-button {
appearance: textfield;
&::-webkit-inner-spin-button,
&::-webkit-outer-spin-button {
appearance: none;
}
}
html
<input type="number" class="hide-spin-button border-2">
インラインスタイル(Tailwind CSS)
Tailwind CSSのバニラ記法を使用したインラインでの解決策:
html
<input
type="number"
class="[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none border-2"
/>
html
<input
type="number"
class="[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none border-2"
/>
css
@layer base {
input[type="number"] {
appearance: textfield;
&::-webkit-inner-spin-button,
&::-webkit-outer-spin-button {
appearance: none;
}
}
}
ブラウザ対応状況
inputmode="numeric"
- ✅ Chrome 66+ (2018年4月)
- ✅ Firefox 95+ (2021年12月)
- ✅ Safari 12.1+ (2019年3月)
- ✅ Edge 79+ (2020年1月)
標準のappearanceプロパティ
Tailwind CSS v4では、2023年のベースラインに合わせて標準のappearance
プロパティが使用できます。
注意点
appearance: none
を使用すると、他のデフォルトスタイルもリセットされる可能性があります- 古いブラウザでは、ベンダープレフィックス(
-webkit-
,-moz-
)が必要な場合があります - スピンボタンを非表示にしても、数値の検証機能は保持されます
まとめ
新しいプロジェクトではinputmode="numeric"
の使用を推奨します。既存のtype="number"
入力フィールドを維持する必要がある場合は、CSSを使用してスピンボタンを非表示にすることができます。Tailwind CSS v4では、標準のCSSプロパティを使用したクロスブラウザ対応が可能です。