HTML5数値入力のスピンボックスを非表示にできますか?


984

一部のブラウザー(Chromeなど)がタイプ番号のHTML入力用にレンダリングする新しいスピンボックスを非表示にする一貫した方法はありますか?上/下矢印が表示されないようにするためのCSSまたはJavaScriptメソッドを探しています。

<input id="test" type="number">

2
使用しているコードの例を投稿できますか?スクリーンショットもいいので、あなたが何を見ているのかを知っています。私は<input type="number" min="4" max="8" />Chromeを見ていて、横に上下の矢印がある典型的な入力フィールドを見ています。
calvinf 2010

77
あなたは私が見ているものを正確に見ています。type = numberマークアップを維持して、モバイルブラウザーが適切なキーボードを表示し、コンピューターのブラウザーに上下の矢印が表示されないようにします。
Alan

3
数値入力を使用している場合は、最新のiOS、Android、およびデスクトップブラウザーでうまく機能するものを使用してください<input type="number" pattern="[0-9]*" inputmode="numeric">。詳細:stackoverflow.com/a/31619311/806956
アーロングレイ、

1
私が行うことをお勧めするのは、検証を処理するために、jQuery Validatiまたは同様のものに沿ってマークアップを記述し<input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > 、使用することです。私はこのアプローチをテストしていません。そのため、これは答えではなくコメントです。
Agi Hammerthief 2018

回答:


1141

このCSSは、Webkitブラウザーのスピンボタンを効果的に非表示にします(Chrome 7.0.517.44およびSafariバージョン5.0.2(6533.18.5)でテストしました)。

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none;
    margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}

input[type=number] {
    -moz-appearance:textfield; /* Firefox */
}
<input type="number" step="0.01" />

インスペクター(Webkit、Firefoxの場合はFirebug)を使用して、関心のある要素に一致するCSSプロパティを探したり、Pseudo要素を探したりすることができます。この画像は、入力要素type = "number"の結果を示しています。

入力type = numberのインスペクター(Chrome)


23
あなただけ使用できるように、Chromeはもはや問題があると思われていない display: none;セレクタ内の唯一のものとして
philfreo

9
これは残念ながらクロスブラウザではないので、type=numberこれらの矢印を非表示にする必要がある場合は使用しないことをお勧めします。たとえば、現在はOperaに引き続き表示され、この入力タイプを実装すると、FirefoxやIEなどに表示されます。
mgol 2013

max=min=属性を使用する必要があるので、有効なHTML5ではない<input>ような代替ソリューションを使用しtype="text"ます。人々はまた、これらのスピナーを含むOperaについて言及しています。Safari / Chromeに似たOperaのソリューションはありますか?
unode

2
記録のために、Chrome input::-webkit-clear-buttonにはXボタンもあります
aldo.roman.nurena 2013年

2
2019年の時点では、これはFirefoxでは機能しませんでした。このソリューションは私にとって
うまくいき

431

Firefox 29は現在、数値要素のサポートを追加しているため、Webkitおよびmozベースのブラウザーでスピナーを非表示にするためのスニペットを次に示します。

input[type='number'] {
    -moz-appearance:textfield;
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    -webkit-appearance: none;
}
<input id="test" type="number">


それとantonjの回答の「マージン:0」が私が使用したものです
Asfand Qazi

私はマージンなしでそれを使用しました、そして大丈夫そうです(2020年5月)。
クロラフ

359

簡潔な答え:

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

より長い答え:

既存の回答に追加するには...

Firefox:

Firefoxの現在のバージョンでは、これらの要素の-moz-appearanceプロパティの(ユーザーエージェント)デフォルト値はnumber-inputです。これを値に変更すると、textfield効果的にスピナーが削除されます。

input[type="number"] {
    -moz-appearance: textfield;
}

場合によっては、スピナーを最初に非表示にしてから、ホバー/フォーカスに表示することもできます。(これは現在、Chromeのデフォルトの動作です)。その場合は、以下を使用できます。

input[type="number"] {
    -moz-appearance: textfield;
}
input[type="number"]:hover,
input[type="number"]:focus {
    -moz-appearance: number-input;
}
<input type="number"/>


クロム:

Chromeの現在のバージョンでは、これらの要素の-webkit-appearanceプロパティの(ユーザーエージェント)デフォルト値はすでにtextfieldです。スピナーを除去するために、-webkit-appearanceプロパティの値に変更する必要がありますnone::-webkit-outer-spin-button/の::-webkit-inner-spin-button疑似クラス(それは-webkit-appearance: inner-spin-buttonデフォルトでは)。

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

古いバージョンのChromeでmargin: 0マージンを削除するために使用されることを指摘する価値があります。

現在、これを書いている時点で、「inner-spin-button」疑似クラスでのデフォルトのユーザーエージェントスタイルは次のとおりです。

input::-webkit-inner-spin-button {
    -webkit-appearance: inner-spin-button;
    display: inline-block;
    cursor: default;
    flex: 0 0 auto;
    align-self: stretch;
    -webkit-user-select: none;
    opacity: 0;
    pointer-events: none;
    -webkit-user-modify: read-only;
}

14
この答えには、Firefoxの関連情報が含まれているので、何かを開発するときに考慮する必要があるので、私はこの回答をより気に入っています。他のブラウザエンジンを無視するWebkitのみの回答では、多くのことが望まれます
RozzA

!importantをfirefoxソリューションに追加します。LIKETHIS ===> input [type = "number"] {-moz-appearance:textfield!important; }
サジャドサデリ

126

AppleのモバイルSafari向けのユーザーエクスペリエンスコーディングガイドによると、以下を使用してiPhoneブラウザーに数字キーボードを表示できます。

<input type="text" pattern="[0-9]*" />

patternのは\d*また動作します。


5
上記にもかかわらず、チェックされたソリューションは与えられた問題に対して非常にうまく機能します、私はここでこのソリューションに切り替えることにしました。1つの理由は、たとえばOperaブラウザーにも矢印が表示されるためです。次に、Chrome 17でさらに大きな問題が発生しました。一方で、「maxlen」属性が機能しなくなったようです。そこに好きなだけ文字を入力できます。一方、一定の長さを超える数値は単純に丸められます。「iOSデバイスでテンキーを開くだけ」にこのソリューションを使用する方が安全だと思います。
1

私が入力したときにinputfieldの数値をフォーマットするJSがいくつかあり、数値フィールドでは機能しないため、このソリューションも使用しました。だからこれは魅力のように働いた。

19
これは現在、すべてのブラウザーのAndroidでは何もしません。ブラウザー4.2.2、Chrome 28、およびAndroid 4.2のFirefox 23のこのテストページでテストされています。これらのブラウザは、このマークアップを備えた標準のテキストキーボードのみを表示します。
Rory O'Kane 2013

3
AndroidとiOSの両方に適したソリューションを次に示します。stackoverflow.com
Aaron Gray

1
@AaronGrayは正方形に戻りますが、そのソリューションにはデスクトップ用のスピナーがあります。
2016年

39

input type="tel"代わりに使用してみてください。キーボードに数字が表示され、スピンボックスは表示されません。JavaScript、CSS、プラグインなどは必要ありません。


17
このソリューションは、現在のように、どのブラウザーでも検証を行いませんtype=number
Pepijn 2013年

5
電話のキーボード数字キーボードほど良くありませんが、テキストキーボードよりはるかに優れています。電話キーボードには、数字キーボードから省略されている無関係な文字と記号があります。(Android 4.2のこのページでテスト済み)
Rory O'Kane

16
「」はありません。電話キーボードで:-<
gion_13

1
@ RoryO'Kane数字キーボードには、厳密には数字ではない入力を拒否するという非常に大きな欠点があります。
Jochem Kuijpers 2014

4
これは解決策ではなく、HTML5標準ではその愚かさです。input [tel]は電話番号用、input [number]は浮動小数点数を含む一般的な番号用です。したがって、これはまったく解決策ではありません。
Vasil Popov

17

このCSSを追加するだけで、数値の入力時にスピナーを削除します

/* For Firefox */

input[type='number'] {
    -moz-appearance:textfield;
}



/* Webkit browsers like Safari and Chrome */

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

caniuseによるとinput[type=number]{ -webkit-appearance }、chromeには十分ですが、もちろん疑似要素も変更する必要があります。なぜか?
oldboy

8

私はこの問題に遭遇しました input[type="datetime-local"]似ているでこの問題が発生しました。

そして、私はこの種の問題を克服する方法を見つけました。

最初に、「DevTools-> Settings-> General-> Elements-> Show user agent shadow DOM」でchromeのシャドウルート機能をオンにする必要があります。

次に、すべてのシャドウされたDOM要素を確認できます。たとえば、の場合<input type="number">、シャドウされたDOMを持つ完全な要素は次のとおりです。

<input type="number">
  <div id="text-field-container" pseudo="-webkit-textfield-decoration-container">
    <div id="editing-view-port">
      <div id="inner-editor"></div>
    </div>
    <div pseudo="-webkit-inner-spin-button" id="spin"></div>
  </div>
</input>

入力のシャドウDOM [type = "number"

これらの情報によると、@ Joshが言ったように、CSSをドラフトして不要な要素を非表示にすることができます。


3

あなたが要求したものではありませんが、スピンボックスを使用したWebKitのフォーカスバグのため、これを行いました。

// temporary fix for focus bug with webkit input type=number ui
if (navigator.userAgent.indexOf("AppleWebKit") > -1 && navigator.userAgent.indexOf("Mobile") == -1)
{
    var els = document.querySelectorAll("input[type=number]");
    for (var el in els)
        el.type = "text";
}

それはあなたがあなたが必要とするものを助けるためのアイデアを与えるかもしれません。


これは正確には私が話していたものではありませんが、HTML5の標準化が現在欠如しているため、これが提示された最良のソリューションです。デスクトップ用ではなくモバイル用に別のサイトを提供することは(それがどのように実装されているかに関係なく)、現在これを達成する唯一の方法のようです。ただし、DOMに追加する前に、要素のコピーを作成して 'type'の値を変更する必要がありました。IEは、要素がdomに追加されると、入力のタイプを変更することを許可しないため。
アラン、

3

これは私がマウスオーバーとマウスオーバーなしで提案したいより良い答えです

input[type='number'] {
  appearance: textfield;
}
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button,
input[type='number']:hover::-webkit-inner-spin-button, 
input[type='number']:hover::-webkit-outer-spin-button {
-webkit-appearance: none; 
 margin: 0; }

何をmargin: 0達成しますか?また、spin-button疑似要素hoverは新しいブラウザでトリガーされていないようですか?
oldboy

2

Safariでこれを機能させるには、Webkitの調整に!importantを追加すると、スピンボタンが強制的に非表示になります。

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none !important;
    margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}

Operaのソリューションを作成するのにも問題があります。


2

UbuntuのFirefoxでは、

    input[type='number'] {
    -moz-appearance:textfield;
}

私のためにトリックをしました。

追加

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
    -webkit-appearance: none;
}

に私を導きます

不明な疑似クラスまたは疑似要素「-webkit-outer-spin-button」。セレクターが正しくないため、ルールセットは無視されました。

毎回試してみました。内側のスピンボタンについても同じです。


1
-webkit-*Chrome -moz-*用、Mozilla Firefox用です。それがあなたにとってうまくいかなかった理由です。
グスタフギル2017

2

input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button {
     -webkit-appearance: none;
<input id="test" type="number">


6
この回答はすでに何度か出されています。新しい回答が重複している場合に備えて、新しい回答を提供する前に既存の回答を読むと役立ちます。
Dan Dascalescu 2018

1

スピナーが不要な場合は、JavaScriptでの数値入力をテキスト入力に変更してください。

document.getElementById('myinput').type = 'text';

ユーザーによるテキストの入力を停止します。

  document.getElementById('myinput').onkeydown = function(e) {
  if(!((e.keyCode > 95 && e.keyCode < 106)
    || (e.keyCode > 47 && e.keyCode < 58) 
    || e.keyCode == 8
    || e.keyCode == 9)) {
          return false;
      }
  }

次に、スピナーが必要な場合に備えて、JavaScriptを元に戻します。

document.getElementById('myinput').type = 'number';

それは私の目的のためにうまくいきました


1

WebKitおよびBlinkベースのブラウザーとすべての種類のブラウザーでは、次のCSSを使用します。

/* Disable Number Arrow */
input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
}

を使用すると、これはどのブラウザで動作しますwebkitか?14の既存の回答で9年前の質問に回答するときは、回答がどのように、そしてなぜ機能するかについての説明を追加し、それが回答する質問の新しい側面に言及することが重要です。
Jason Aller

0

これが機能するために必要でした

/* Chrome, Safari, Edge, Opera */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button
  -webkit-appearance: none
  appearance: none
  margin: 0

/* Firefox */
input[type=number]
  -moz-appearance: textfield

の余分なラインはappearance: none私にとって鍵でした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.