Tôi có thể ẩn hộp quay số của đầu vào số HTML5 không?


984

Có cách nào nhất quán trên các trình duyệt để ẩn các hộp quay mới mà một số trình duyệt (như Chrome) hiển thị cho đầu vào HTML có số loại không? Tôi đang tìm kiếm một phương pháp CSS hoặc JavaScript để ngăn mũi tên lên / xuống xuất hiện.

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

2
Bạn có thể gửi một ví dụ về mã bạn đang sử dụng? Một ảnh chụp màn hình cũng sẽ rất tuyệt để chúng tôi biết bạn đang nhìn gì. Tôi đang nhìn vào <input type="number" min="4" max="8" />Chrome và thấy một trường nhập liệu thông thường có mũi tên lên xuống ở bên cạnh.
calvinf

77
Bạn đang thấy chính xác những gì tôi đang thấy. Tôi đang cố gắng duy trì kiểu đánh dấu số = số để đảm bảo rằng các trình duyệt di động đưa ra một bàn phím phù hợp và ngăn mũi tên lên xuống xuất hiện trong trình duyệt máy tính.
Alan

3
Nếu bạn đang sử dụng đầu vào số, hãy chắc chắn sử dụng thứ gì đó hoạt động tốt với các trình duyệt iOS, Android và Máy tính để bàn hiện đại : <input type="number" pattern="[0-9]*" inputmode="numeric">. Thông tin thêm: stackoverflow.com/a/31619311/806956
Aaron Gray

1
Những gì tôi đề nghị làm là viết đánh dấu dọc theo các dòng <input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > và sử dụng jQuery Validati hoặc tương tự để xử lý xác thực. Tôi đã không thử nghiệm phương pháp này, đó là lý do tại sao đây là một nhận xét, thay vì một câu trả lời.
Búa búa Agi

Câu trả lời:


1141

CSS này ẩn hiệu quả nút quay cho trình duyệt webkit (đã thử nghiệm nó trong Chrome 7.0.517.44 và Safari Phiên bản 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" />

Bạn luôn có thể sử dụng trình kiểm tra (webkit, có thể là Fireorms cho Firefox) để tìm các thuộc tính CSS phù hợp cho các yếu tố bạn quan tâm, tìm kiếm các yếu tố Pseudo. Hình ảnh này hiển thị kết quả cho loại phần tử đầu vào = "số":

Trình kiểm tra loại đầu vào = số (Chrome)


23
Có vẻ như Chrome không còn gặp sự cố nữa, vì vậy bạn chỉ có thể sử dụng display: none;làm thứ duy nhất bên trong bộ chọn
philfreo

9
Rất tiếc, đây không phải là trình duyệt chéo, vì vậy tôi khuyên bạn không nên sử dụng type=numbernếu bạn phải ẩn các mũi tên này. Ví dụ, hiện tại chúng vẫn được hiển thị trong Opera và chúng sẽ bắt đầu được hiển thị trong Firefox, IE, v.v. khi chúng triển khai loại đầu vào này.
mgol

Tôi cần sử dụng các thuộc tính max=min=trên <input>các giải pháp thay thế như type="text"HTML5 không hợp lệ. Mọi người cũng đề cập đến Opera bao gồm cả những người quay. Có giải pháp nào cho Opera tương tự Safari / Chrome không?
giải mã

2
đối với bản ghi, Chrome cũng có input::-webkit-clear-buttonnút X
aldo.roman.nurena

2
Kể từ năm 2019, điều này không hoạt động với tôi trong Firefox. Giải pháp này hiệu quả với tôi: stackoverflow.com/questions/45396280/ từ
lwitzel

431

Firefox 29 hiện bổ sung hỗ trợ cho các thành phần số, vì vậy đây là đoạn trích để ẩn các spinners trong trình duyệt webkit và 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">


Điều đó cộng với 'lề: 0' từ câu trả lời của antonj là những gì tôi đã sử dụng
Asfand Qazi

Tôi đã sử dụng nó mà không có lề, và có vẻ ổn (tháng 5 năm 2020).
croraf

359

Câu trả lời ngắn:

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" />

Câu trả lời dài hơn:

Để thêm vào câu trả lời hiện có ...

Firefox:

Trong các phiên bản hiện tại của Firefox, giá trị mặc định (tác nhân người dùng) của thuộc -moz-appearancetính trên các thành phần này là number-input. Thay đổi điều đó thành giá trị textfieldcó hiệu quả loại bỏ spinner.

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

Trong một số trường hợp, ban đầu bạn có thể muốn spinner bị ẩn và sau đó xuất hiện trên hover / Focus. (Đây hiện là hành vi mặc định trong Chrome). Nếu vậy, bạn có thể sử dụng như sau:

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


Trình duyệt Chrome:

Trong các phiên bản hiện tại của Chrome, giá trị mặc định (tác nhân người dùng) của thuộc -webkit-appearancetính trên các thành phần này đã có sẵn textfield. Để xóa spinner, -webkit-appearancegiá trị của thuộc tính cần được thay đổi thành nonetrên các lớp ::-webkit-outer-spin-button/ ::-webkit-inner-spin-buttongiả ( -webkit-appearance: inner-spin-buttontheo mặc định).

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

Đáng để chỉ ra rằng margin: 0được sử dụng để xóa lề trong các phiên bản Chrome cũ hơn .

Hiện tại, khi viết bài này, đây là kiểu dáng tác nhân người dùng mặc định trên lớp giả 'nút quay trong':

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
Tôi thích câu trả lời này tốt hơn vì nó bao gồm thông tin firefox có liên quan, khi phát triển một cái gì đó, cần phải được xem xét. các câu trả lời chỉ dành cho webkit mà bỏ qua các công cụ trình duyệt khác để lại nhiều điều mong muốn
RozzA

thêm một! quan trọng vào giải pháp firefox.LIKE NÀY ===> input [type = "number"] {-moz-ngoại hình: textfield! quan trọng; }
sajad saderi

126

Theo hướng dẫn mã hóa trải nghiệm người dùng của Apple cho Safari di động , bạn có thể sử dụng cách sau để hiển thị bàn phím số trong trình duyệt iPhone:

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

Một patternsố \d*cũng sẽ làm việc.


5
Mặc dù ở trên, giải pháp kiểm tra hoạt động rất tốt cho vấn đề nhất định, tôi quyết định chuyển sang giải pháp này, ở đây. Một lý do là, ví dụ như trình duyệt Opera cũng hiển thị các mũi tên mà bạn cũng nên ngăn chặn. Thứ hai, tôi đã quan sát thấy các vấn đề lớn hơn trong Chrome 17. Một mặt, thuộc tính 'maxlen' dường như không còn hoạt động nữa; bạn có thể nhập bao nhiêu ký tự tùy thích vào đó. Mặt khác, các số vượt quá một độ dài nhất định chỉ được làm tròn. Sử dụng giải pháp này cho "chỉ cần mở numpad trên thiết bị iOS" dường như an toàn hơn đối với tôi.
tháng 1

Tôi cũng đã sử dụng các giải pháp này, vì tôi có một số JS tạo thành số trong trường đầu vào khi tôi nhập và nó không hoạt động với trường số. Vì vậy, điều này làm việc như một nét duyên dáng.
Tokimon

19
Điều này hiện không có gì trên Android, trong tất cả các trình duyệt. Đã thử nghiệm trên trang thử nghiệm này trong Trình duyệt 4.2.2, Chrome 28 và Firefox 23 trên Android 4.2. Những trình duyệt đó chỉ hiển thị bàn phím văn bản tiêu chuẩn với đánh dấu này.
Rory O'Kane

3
Đây là một giải pháp hay cho cả Android và iOS: stackoverflow.com/a/31619311/806956
Aaron Gray

1
@AaronGray trở lại hình vuông mặc dù: giải pháp đó có spinners cho máy tính để bàn.
StrangeWill

39

Hãy thử sử dụng input type="tel"thay thế. Nó bật lên một bàn phím với các số và nó không hiển thị các hộp quay. Nó không yêu cầu JavaScript hoặc CSS hoặc plugin hoặc bất cứ thứ gì khác.


17
Giải pháp này hiện không thực hiện bất kỳ xác nhận nào trong bất kỳ trình duyệt type=numbernào.
Pepijn

5
Bàn phím điện thoại không tốt bằng bàn phím số , mặc dù nó tốt hơn nhiều so với bàn phím văn bản . Bàn phím điện thoại có các chữ cái và ký hiệu không liên quan được bỏ qua từ bàn phím số. (Đã thử nghiệm với trang này trên Android 4.2.)
Rory O'Kane

16
không có "." trong bàn phím tel: - <
gion_13

1
@ RoryO'Kane Bàn phím số có một nhược điểm thực sự lớn là nó sẽ từ chối mọi đầu vào không đúng với số.
Joool Kuijpers

4
Đây không phải là một giải pháp và theo tiêu chuẩn HTML5 thì thật ngu ngốc. đầu vào [tel] dành cho số điện thoại, đầu vào [số] dành cho số chung, bao gồm cả số dấu phẩy động. Vì vậy, đây không phải là một giải pháp nào cả.
Vasil Popov

17

Chỉ thêm css này để loại bỏ spinner trên đầu vào của số

/* 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;
}

theo caniuse input[type=number]{ -webkit-appearance }là đủ cho chrome, nhưng tất nhiên bạn cũng cần sửa đổi các yếu tố giả. bất cứ ý tưởng tại sao ??
oldboy

8

Tôi đã gặp vấn đề này với một input[type="datetime-local"], tương tự như vấn đề này.

Và tôi đã tìm ra cách khắc phục loại vấn đề này.

Trước tiên, bạn phải bật tính năng gốc bóng của chrome bằng "DevTools -> Cài đặt -> Chung -> Thành phần -> Hiển thị bóng của tác nhân người dùng DOM"

Sau đó, bạn có thể thấy tất cả các phần tử DOM bị bóng , ví dụ, <input type="number">phần tử đầy đủ với DOM bị bóng là:

<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>

bóng DOM của đầu vào [type = "number"

Và theo những thông tin này, bạn có thể phác thảo một số CSS để ẩn các yếu tố không mong muốn, giống như @Josh nói.


3

Không phải những gì bạn yêu cầu, nhưng tôi làm điều này vì một lỗi tập trung trong WebKit với spinboxes:

// 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";
}

Nó có thể cung cấp cho bạn một ý tưởng để giúp đỡ với những gì bạn cần.


Đây không phải là chính xác những gì tôi đã nói, nhưng do thiếu tiêu chuẩn hóa hiện tại của HTML5, đây là giải pháp tốt nhất được trình bày. Cung cấp một trang web khác cho thiết bị di động so với máy tính để bàn (bất kể nó được triển khai như thế nào) dường như là cách duy nhất để thực hiện việc này hiện tại. Tuy nhiên, tôi đã phải tạo một bản sao của phần tử và thay đổi giá trị 'loại' trước khi thêm nó vào DOM. Vì IE không cho phép sửa đổi loại đầu vào một khi phần tử đã được thêm vào dom.
Alan

3

Đây là câu trả lời tốt hơn tôi muốn đề xuất trên chuột và không có chuột

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; }

không làm margin: 0được gì Ngoài ra, các spin-buttonyếu tố giả dường như không được kích hoạt hovertrong các trình duyệt mới hơn?
oldboy

2

Để thực hiện công việc này trong Safari, tôi thấy việc thêm! Điều quan trọng đối với điều chỉnh webkit buộc nút quay bị ẩn.

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 */
}

Tôi vẫn gặp khó khăn khi tìm ra giải pháp cho Opera.


2

Trên Firefox cho Ubuntu, chỉ cần sử dụng

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

đã lừa tôi

Thêm

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

Sẽ dẫn tôi đến

Lớp giả không xác định hoặc phần tử giả '-webkit-outs-spin-button'. Ruleset bị bỏ qua do bộ chọn xấu.

mọi lúc tôi đều cố gắng Tương tự cho nút quay bên trong.


1
-webkit-*dành cho Chrome, -moz-*dành cho mozilla firefox. Đó là lý do tại sao nó không làm việc cho bạn.
Gusstavv Gil

2

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


6
Câu trả lời này đã được đưa ra nhiều lần rồi. Nó giúp đọc các câu trả lời hiện có trước khi cung cấp một câu trả lời mới, trong trường hợp câu trả lời mới là một bản sao.
Dan Dascalescu

1

Có thể thay đổi đầu vào số bằng javascript thành nhập văn bản khi bạn không muốn một công cụ quay vòng;

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

và ngăn người dùng nhập văn bản;

  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;
      }
  }

sau đó có javascript thay đổi nó trở lại trong trường hợp bạn muốn có một spinner;

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

nó hoạt động tốt cho mục đích của tôi


1

Trong các trình duyệt dựa trên WebKit và Blink & All Kind Of Browser sử dụng CSS sau:

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

Những trình duyệt này sẽ làm việc trên cho sử dụng webkit? Khi trả lời một câu hỏi chín năm tuổi với mười bốn câu trả lời hiện có, điều quan trọng là thêm giải thích về cách thức và lý do câu trả lời của bạn hoạt động và đề cập đến khía cạnh mới của câu hỏi mà nó trả lời.
Jason Aller

0

Tôi cần cái này để làm việc

/* 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

Dòng bổ sung appearance: nonelà chìa khóa cho tôi.


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.