254

On Firefox 28, I'm using <input type="number"> works great because it brings up the numerical keyboard on input fields which should only contain numbers.

In Firefox 29, 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~10 digit number anyway.

Is it possible to disable this with CSS or jQuery?

10
  • 2
    If you don't want the spin arrows, then don't use type="number". You can use type="text" and the pattern attribute to set a regex to make sure it's a number.
    – gen_Eric
    Commented Apr 29, 2014 at 18:51
  • 4
    -webkit-inner-spin-button -webkit-outer-spin-button with -webkit-appearance: none; margin: 0; Dont Work in Firefox. Commented Apr 29, 2014 at 19:13
  • 14
    @RocketHazmat: type="number" is required for mobile browsers to show the numeric keyboard instead of the full keyboard.
    – CodeManX
    Commented Aug 16, 2015 at 12:59
  • 4
    <input type="tel"> it's only numbers and it doesn't include spinners.
    – TomasVeras
    Commented Oct 2, 2015 at 20:00
  • 7
    Changing type="text" is a bad idea because touch devices will show the wrong keyboard.
    – WhyNotHugo
    Commented Feb 28, 2016 at 8:01

8 Answers 8

625

According to this blog post, you need to set -moz-appearance:textfield; on the input.

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" step="0.01"/>

8
  • 2
    I wrapped this in @-moz-document url-prefix() { ... } and it does what I want: hides the spinners in Firefox, where they look bad, but keep them alive in other browsers, including ones that bring up the numeric keyboard as the OP mentioned. Commented Nov 21, 2014 at 3:51
  • 5
    Some more useful information from Geoff Graham: Numeric Inputs – A Comparison of Browser Defaults Commented Mar 25, 2015 at 19:58
  • 5
    this works and indeed it removes the spinners, but then you are now able to enter alphanumeric characters into it. Hope somebody finds a way to handle that scenario without having to check the entered keys if they are numbers or not.
    – Jovanni G
    Commented Oct 13, 2017 at 17:09
  • 3
    @JovanniG: Even if you don't remove the spinners, you can still enter non-numeric characters into the input in Firefox. Try it with the demo on MDN. Chrome prevents non-numeric input in both examples. Commented Oct 16, 2017 at 9:54
  • 1
    @alxndr: Also, I've just tried the "Run code snippet" in Chrome 66, and it works as expected. Commented Apr 20, 2018 at 10:44
63

It's worth pointing out that the default value of -moz-appearance on these elements is number-input in Firefox.

If you want to hide the spinner by default, you can set -moz-appearance: textfield initially, and if you want the spinner to appear on :hover/:focus, you can overwrite the previous styling with -moz-appearance: number-input.

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

I thought someone might find that helpful since I recently had to do this in attempts to improve consistency between Chrome/FF (since this is the way number inputs behave by default in Chrome).

If you want to see all the available values for -moz-appearance, you can find them here (mdn).

1
  • 2
    moz-appearance: number-input; didn't work for me, but I just used "auto" instead.
    – Aardvark
    Commented Mar 27, 2023 at 20:39
13

In SASS/SCSS style, you can write like this:

input[type='number'] {
  -moz-appearance: textfield;/*For FireFox*/

  &::-webkit-inner-spin-button { /*For Webkits like Chrome and Safari*/
    -webkit-appearance: none;
    margin: 0;
  }
}

Definitely this code style can use in PostCSS.

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


/* for mozilla */  
   input[type=number] {-moz-appearance: textfield;}
0
4

Faced the same issue post Firefox update to 29.0.1, this is also listed out here https://bugzilla.mozilla.org/show_bug.cgi?id=947728

Solutions: They(Mozilla guys) have fixed this by introducing support for "-moz-appearance" for <input type="number">. You just need to have a style associated with your input field with "-moz-appearance:textfield;".

I prefer the CSS way E.g.:-

.input-mini{
-moz-appearance:textfield;}

Or

You can do it inline as well:

<input type="number" style="-moz-appearance: textfield">
0
4

In 2021, there is a much better solution to make your firefox like Google Chrome. You should use focus and hover, too.

input[type="number"] {
    appearance: none; /* textfield also works! */
}

input[type="number"]:focus, 
input[type="number"]:hover {
    appearance: auto;
}

for more information, please read the documentation

2
  • 1
    This solution finally worked for me. Specifically the appearance: auto;. I also wanted to mention that appearance: none; no longer works, but textfield does. Commented Feb 13, 2023 at 17:56
  • This is good, it's a bit annoying how if the text is centered, it jumps to the left when the spinners are shown. It would be better if the spinners were there but just invisible
    – Raj
    Commented Jun 14 at 14:21
3

This worked for me:

    input[type='number'] {
    appearance: none;
}

Solved in Firefox, Safari, Chrome. Also, -moz-appearance: textfield; is not supported anymore (https://developer.mozilla.org/en-US/docs/Web/CSS/appearance)

1

I mixed few answers from answers above and from How to remove the arrows from input[type="number"] in Opera in scss:

input[type=number] {
  &,
  &::-webkit-inner-spin-button,
  &::-webkit-outer-spin-button {
    -webkit-appearance: none;
    -moz-appearance: textfield;
    appearance: none;

    &:hover,
    &:focus {
      -moz-appearance: number-input;
    }
  }
}

Tested on chrome, firefox, safari
1
  • Maybe you can move the browser prefix attributes like -moz- to last to prevent override by none prefix attributes. ``` { appearance: none; -webkit-appearance: none; -moz-appearance: textfield; } ```
    – John Trump
    Commented Jun 27, 2022 at 7:56

Not the answer you're looking for? Browse other questions tagged or ask your own question.