Disable webkit's spin buttons on input type="number"?
Asked Answered
C

6

207

I have a site which is primarily for mobile users but desktop too.

On Mobile Safari, using <input type="number"> works great because it brings up the numerical keyboard on input fields which should only contain numbers.

In Chrome and Safari however, using number inputs displays spin buttons at the right side of the field, which looks like crap in my design. I really don't need the buttons, because they are useless when you need to write something like a 6-digit number anyway.

Is it possible to disable this with -webkit-appearance or some other CSS trick? I have tried without much luck.

Cascio answered 20/10, 2010 at 7:53 Comment(1)
If you prefer to use type="text" for other reasons and only switched to number for the numerical keyboard feature, you can use pattern="[0-9]*" to get the keyboard feature, allowing you to retain type="text". See #6172403Juna
C
120

The below css works for both Chrome and Firefox

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;
}
Compote answered 15/10, 2014 at 9:36 Comment(2)
better solution than above (more complete)Waterway
-moz-appearance:textfield; addition was the only answer that worked for me. Thanks!Penniepenniless
Z
287

I discovered that there is a second portion of the answer to this.

The first portion helped me, but I still had a space to the right of my type=number input. I had zeroed out the margin on the input, but apparently I had to zero out the margin on the spinner as well.

This fixed it:

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
Zymo answered 27/1, 2011 at 3:28 Comment(6)
Awesome. I had a similar issue, but with a slightly different CSS strategy, which lead to entirely new problems...Killifish
Does anyone know of a way to fix the scroll behaviour where you can scroll up and down infinitely? I've set min=0.01 (and max to some arbitrary value) in my input element, but I'd prefer to have the scrollwheel just go up and down the page. I'm using AngularJS and I can't find anything atm.Divided
Linking back to an authoritative source for this specific problem and this kind of information: css-tricks.com/snippets/css/turn-off-number-input-spinnersBoulanger
to be clear, this does not remove the mouse scroll functionality!Seattle
You can use display:none;. Also there is no need to specify margin:0 at all, developers should check stuff from time to time themselves!Bareback
-moz-appearance: textfield for FirefoxQuasi
C
120

The below css works for both Chrome and Firefox

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;
}
Compote answered 15/10, 2014 at 9:36 Comment(2)
better solution than above (more complete)Waterway
-moz-appearance:textfield; addition was the only answer that worked for me. Thanks!Penniepenniless
C
17

Not sure if this is the best way to do it, but this makes the spinners disappear on Chrome 8.0.552.5 dev:

input[type=number]::-webkit-inner-spin-button {
    -webkit-appearance: none;
}
Crunode answered 20/10, 2010 at 17:38 Comment(2)
@JethroLarson What's it not working on? You could try -webkit-outer-spin-button instead.Crunode
this worked great for type="date" : input[type=date]::-webkit-outer-spin-button { -webkit-appearance: none; }Fbi
B
11

It seems impossible to prevent spinners from appearing in Opera. As a temporary workaround, you can make room for the spinners. As far as I can tell, the following CSS adds just enough padding, only in Opera:

noindex:-o-prefocus,
input[type=number] {
    padding-right: 1.2em;
}
Betimes answered 23/5, 2011 at 15:45 Comment(2)
@Knu Indeed, but it's worth mentioning here because the code in the answer leaves the inputs unusable with Opera.Betimes
@Goulvench please don't :) I've found it very useful, someone else might, too.Sensate
B
0

Another solution to avoid the browser default spinner for the number type by changing

  1. type into text

  2. inputmode into numeric and

  3. number only pattern "[0-9]*"


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

Unlike 'number' type, the above solution still allows the user to enter non-number characters in the input box but you can avoid invalid submission by listening to the oninvalid event.

Berkie answered 29/8, 2021 at 7:9 Comment(0)
Z
-2

You can also hide spinner with following trick :

input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  opacity:0;
  pointer-events:none;
}
Zenobia answered 24/7, 2017 at 10:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.