Ẩn Spinner trong Số đầu vào - Firefox 29


202

Trên Firefox 28, tôi đang sử dụng <input type="number">các công trình tuyệt vời vì nó hiển thị bàn phím số trên các trường nhập chỉ chứa số.

Trong Firefox 29, sử dụng đầu vào số hiển thị các nút xoay ở bên phải của trường, trông giống như crap trong thiết kế của tôi. Tôi thực sự không cần các nút, bởi vì chúng vô dụng khi bạn cần viết một cái gì đó giống như một số 6 ~ 10 chữ số.

Có thể vô hiệu hóa điều này với CSS hoặc jQuery?


2
Nếu bạn không muốn mũi tên quay, thì đừng sử dụng type="number". Bạn có thể sử dụng type="text"patternthuộc tính để đặt regex để đảm bảo đó là số.
Tên lửa Hazmat

4
-webkit-Internal-spin-button -webkit-outs-spin-button với -webkit-ngoại hình: none; lề: 0; Đừng làm việc trong Firefox.
NereuJunior

12
@RocketHazmat: type="number"được yêu cầu cho các trình duyệt di động để hiển thị bàn phím số thay vì bàn phím đầy đủ.
CodeManX

3
<input type="tel">nó chỉ là những con số và nó không bao gồm những con quay.
TomasVeras

5
Thay đổi type="text"là một ý tưởng tồi vì các thiết bị cảm ứng sẽ hiển thị bàn phím sai.
WhyNotHugo

Câu trả lời:


523

Theo bài đăng trên blog này , bạn cần phải thiết lập -moz-appearance:textfield;trên 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"/>


1
Tôi đã gói nó vào @-moz-document url-prefix() { ... }và nó thực hiện những gì tôi muốn: ẩn các spinners trong Firefox, nơi chúng trông xấu, nhưng giữ cho chúng tồn tại trong các trình duyệt khác, bao gồm cả những trình duyệt đưa bàn phím số như OP đã đề cập.
Michael Scheper

4
Một số thông tin hữu ích khác từ Geoff Graham: Đầu vào số - So sánh các mặc định của trình duyệt
Richard Deeming

3
Điều này hoạt động và thực sự nó loại bỏ các spinners, nhưng sau đó bạn có thể nhập các ký tự chữ và số vào nó. Hy vọng ai đó tìm ra cách xử lý tình huống đó mà không phải kiểm tra các phím đã nhập nếu chúng có phải là số hay không.
Jovanni G

1
@JovanniG: Ngay cả khi bạn không xóa các spinners, bạn vẫn có thể nhập các ký tự không phải là số vào đầu vào trong Firefox. Hãy thử nó với bản demo trên MDN . Chrome ngăn đầu vào không phải là số trong cả hai ví dụ.
Richard Deeming

1
@alxndr: Ngoài ra, tôi vừa thử "Chạy đoạn mã" trong Chrome 66 và nó hoạt động như mong đợi.
Richard Deeming

50

Thật đáng để chỉ ra rằng giá trị mặc định của -moz-appearancecác thành phần này nằm number-inputtrong Firefox.

Nếu bạn muốn ẩn spinner theo mặc định, bạn có thể đặt -moz-appearance: textfieldban đầu và nếu bạn muốn spinner xuất hiện trên :hover/ :focus, bạn có thể ghi đè lên kiểu dáng trước đó -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"/>

Tôi nghĩ ai đó có thể thấy hữu ích vì gần đây tôi đã phải làm điều này trong nỗ lực cải thiện tính nhất quán giữa Chrome / FF (vì đây là cách đầu vào số hoạt động theo mặc định trong Chrome).

Nếu bạn muốn xem tất cả các giá trị có sẵn cho -moz-appearance, bạn có thể tìm thấy chúng ở đây (mdn).


11

Trong SASS/ SCSSstyle, bạn có thể viết như thế này:

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

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

Chắc chắn phong cách mã này có thể sử dụng trong 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;}

3

Đối mặt với vấn đề tương tự bài đăng cập nhật Firefox lên 29.0.1, điều này cũng được liệt kê ở đây https://ormszilla.mozilla.org/show_orms.cgi?id=947728

Giải pháp: Họ (những người Mozilla) đã khắc phục điều này bằng cách giới thiệu hỗ trợ cho "-moz-ngoại hình" cho <input type="number">. Bạn chỉ cần có một kiểu được liên kết với trường đầu vào của bạn với "-moz-appearance:textfield; ".

Tôi thích cách CSS Ví dụ: -

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

Hoặc là

Bạn cũng có thể thực hiện nội tuyến:

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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.