Czy mogę ukryć pole spinania wprowadzania liczb HTML5?

984

Czy istnieje spójny sposób w różnych przeglądarkach, aby ukryć nowe pola spinów, które niektóre przeglądarki (takie jak Chrome) renderują dla wprowadzania HTML typu numer? Szukam metody CSS lub JavaScript, aby zapobiec pojawianiu się strzałek w górę / w dół.

<input id="test" type="number">
Alan
źródło
2
Czy możesz opublikować przykład kodu, którego używasz? Zrzut ekranu byłby również świetny, więc wiemy, na co patrzysz. Patrzę na <input type="number" min="4" max="8" />Chrome i widzę typowe pole wprowadzania ze strzałkami w górę i w dół z boku.
calvinf
77
Widzisz dokładnie to, co ja. Usiłuję zachować znacznik type = number, aby przeglądarki mobilne wyświetlały odpowiednią klawiaturę i zapobiegały pojawianiu się strzałek w górę i w dół w przeglądarkach komputerowych.
Alan
3
Jeśli używasz wejść numerycznych, należy użyć czegoś, co odgrywa ładny z nowoczesnymi iOS, Android, i przeglądarek pulpit: <input type="number" pattern="[0-9]*" inputmode="numeric">. Więcej informacji: stackoverflow.com/a/31619311/806956
Aaron Gray
1
Co proponuję robić to pisanie znaczników wzdłuż linii <input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > i przy użyciu jQuery Validati lub podobny do walidacji uchwytu. Nie przetestowałem tego podejścia, dlatego jest to komentarz, a nie odpowiedź.
Agi Hammerthief,

Odpowiedzi:

1141

Ten CSS skutecznie ukrywa przycisk spinania w przeglądarkach webkit (przetestowałem go w Chrome 7.0.517.44 i Safari w wersji 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" />

Zawsze możesz użyć inspektora (webkit, ewentualnie Firebug dla Firefoksa), aby wyszukać dopasowane właściwości CSS dla elementów, które Cię interesują, poszukać Pseudo-elementów. Ten obraz pokazuje wyniki dla typu elementu wejściowego = „liczba”:

Inspektor typu danych wejściowych = liczba (Chrome)

antonj
źródło
23
Wygląda na to, że Chrome nie ma już problemu, więc możesz użyć go display: none;jako jedynej rzeczy w selektorze
philfreo
9
Niestety nie jest to przeglądarka internetowa, więc odradzam używanie tej opcji, type=numberjeśli musisz ukryć te strzałki. Np. Obecnie będą nadal wyświetlane w Operze i zaczną być wyświetlane w przeglądarce Firefox, IE itp., Gdy zaimplementują ten typ danych wejściowych.
mgol
Muszę użyć atrybutów max=i min=na <input>alternatywnych rozwiązaniach, takich jak type="text"niepoprawny HTML5. Ludzie wspominają również o Operze, w tym o błystkach. Czy istnieje rozwiązanie dla Opery podobne do Safari / Chrome?
unode
2
dla input::-webkit-clear-button
przypomnienia
2
Od 2019 r. Nie działało to dla mnie w przeglądarce Firefox. To rozwiązanie działało dla mnie: stackoverflow.com/questions/45396280/...
lwitzel
431

Firefox 29 obecnie dodaje obsługę elementów liczbowych, więc oto fragment służący do ukrywania błystek w przeglądarkach internetowych i 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">

Swehren
źródło
To plus „margines: 0” z odpowiedzi Antoniego to to, czego użyłem
Asfand Qazi
Użyłem go bez marginesu i wydaje się być w porządku (maj 2020).
croraf
359

Krótka odpowiedź:

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

Dłuższa odpowiedź:

Aby dodać do istniejącej odpowiedzi ...

Firefox:

W bieżących wersjach Firefoksa wartością domyślną (dla agenta użytkownika) -moz-appearancewłaściwości tych elementów jest number-input. Zmiana tego na wartość textfieldskutecznie usuwa błystkę.

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

W niektórych przypadkach możesz chcieć początkowo ukryć pokrętło , a następnie wyświetlić je po najechaniu myszą / skupieniu. (Jest to obecnie domyślne zachowanie w Chrome). Jeśli tak, możesz użyć następujących opcji:

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


Chrom:

W obecnych wersjach Chrome, wartość domyślna (user agent) z -webkit-appearancenieruchomości na tych elementów jest już textfield. W celu usunięcia z tarczy, na -webkit-appearancepotrzeby wartości nieruchomości, który ma być zmieniony nonena ::-webkit-outer-spin-button/ ::-webkit-inner-spin-buttonklas pseudo (jest -webkit-appearance: inner-spin-buttondomyślnie).

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

Warto zauważyć, że margin: 0w starszych usuwa się margines wersjach Chrome.

Obecnie, w chwili pisania tego tekstu, tutaj jest domyślna stylizacja agenta użytkownika w pseudoklasie „przycisk wewnętrzny spin”:

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;
}
Josh Crozier
źródło
14
bardziej podoba mi się ta odpowiedź, ponieważ zawiera istotne informacje o firefoxie, które przy opracowywaniu czegoś należy wziąć pod uwagę. odpowiedzi tylko w pakiecie webkit, które ignorują inne silniki przeglądarek, pozostawiają wiele do życzenia
RozzA
dodaj! ważne do rozwiązania firefox.LIKE THIS ===> input [type = "number"] {-moz-wygląd: pole tekstowe! ważne; }
sajad saderi
126

Według podręcznikiem użytkownika Apple dotyczącym kodowania dla mobilnego Safari , możesz użyć następujących opcji, aby wyświetlić klawiaturę numeryczną w przeglądarce iPhone'a:

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

patternZ \d*będzie również działać.

team_steve
źródło
5
Pomimo powyższego sprawdzone rozwiązanie działa bardzo dobrze na dany problem, postanowiłem przejść na to rozwiązanie tutaj. Jednym z powodów jest to, że np. Przeglądarka Opera wyświetla również strzałki, których również należy unikać. Po drugie, zauważyłem większe problemy w Chrome 17. Z jednej strony wydaje się, że atrybut „maxlen” już nie działa; możesz wpisać tyle znaków, ile chcesz. Z drugiej strony liczby przekraczające określoną długość są po prostu zaokrąglane. Korzystanie z tego rozwiązania do „tylko otwierania klawiatury numerycznej na urządzeniu z systemem iOS” wydaje mi się bezpieczniejsze.
Jan
Poszedłem również z tymi rozwiązaniami, ponieważ miałem trochę JS, który sformatował liczbę w polu wejściowym podczas pisania i które nie działało z polem liczbowym. Więc ten działał jak urok.
Tokimon
19
To obecnie nie robi nic na Androidzie, we wszystkich przeglądarkach. Testowany na tej stronie testowej w przeglądarce 4.2.2, Chrome 28 i Firefox 23 na Androidzie 4.2. Te przeglądarki pokazują tylko standardową klawiaturę tekstową z tym znacznikiem.
Rory O'Kane
3
Oto fajne rozwiązanie zarówno dla Androida, jak i iOS: stackoverflow.com/a/31619311/806956
Aaron Gray
1
@Aaron Wróć do kwadratu: w tym rozwiązaniu znajdują się pokrętła do pulpitu.
StrangeWill
39

Spróbuj użyć input type="tel"zamiast tego. Wyskakuje klawiatura z cyframi i nie wyświetla ramek. Nie wymaga JavaScript, CSS, wtyczek ani niczego innego.

MERT DOĞAN
źródło
17
To rozwiązanie nie przeprowadza obecnie żadnej weryfikacji w przeglądarkach, jak to type=numberrobi.
Pepijn
5
Klawiatura telefoniczna nie jest tak dobra jak klawiatura numeryczna , choć jest znacznie lepsza niż klawiatura tekstowa . Klawiatura telefoniczna zawiera niepotrzebne litery i symbole, które są pomijane na klawiaturze numerycznej. (Testowane na tej stronie w Androidzie 4.2.)
Rory O'Kane
16
nie ma "." na klawiaturze tel: - <
gion_13
1
@ RoryO'Kane Klawiatura numeryczna ma naprawdę dużą wadę, ponieważ odmawia wprowadzania danych, które nie są ściśle liczbami.
Jochem Kuijpers
4
To nie jest rozwiązanie, a według standardów HTML5 jest głupie. input [tel] jest dla numerów telefonów, input [liczba] jest dla liczb ogólnych, w tym liczb zmiennoprzecinkowych. Więc to wcale nie jest rozwiązanie.
Wasil Popow
17

Dodaj tylko ten css, aby usunąć pokrętło po wprowadzeniu liczby

/* 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;
}
Sanjib Debnath
źródło
zgodnie z kajakiem input[type=number]{ -webkit-appearance }powinno wystarczyć dla chrome, ale oczywiście trzeba również zmodyfikować pseudoelementy. jakiś pomysł dlaczego?
oldboy
8

Spotkałem ten problem z input[type="datetime-local"] , który jest podobny do tego problemu.

I znalazłem sposób na rozwiązanie tego rodzaju problemów.

Najpierw musisz włączyć funkcję chrome-root-shadow w „DevTools -> Ustawienia -> Ogólne -> Elementy -> Pokaż cień DOM agenta użytkownika”

Następnie możesz zobaczyć wszystkie cieńowane elementy DOM , na przykład, <input type="number">pełny element z zaciemnionym DOM to:

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

cień DOM wejścia [type = "number"

Zgodnie z tymi informacjami możesz napisać CSS, aby ukryć niechciane elementy, tak jak powiedział @Josh.

Xiao Hanyu
źródło
3

Nie to, o co prosiłeś, ale robię to z powodu błędu skupienia w WebKit ze spinboxami:

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

To może dać ci pomysł na pomoc w tym, czego potrzebujesz.

Gauraw
źródło
To nie jest dokładnie to, o czym mówiłem, ale z powodu obecnego braku standaryzacji HTML5 jest to najlepsze przedstawione rozwiązanie. Zapewnienie innej witryny na urządzenia mobilne niż na komputery (bez względu na to, jak jest zaimplementowana) wydaje się obecnie jedynym sposobem na osiągnięcie tego celu. Musiałem jednak utworzyć kopię elementu i zmienić wartość „type” przed dodaniem jej do DOM. Ponieważ IE nie pozwala modyfikować typu danych wejściowych po dodaniu elementu do domena.
Alan
3

To jest lepsza odpowiedź, którą chciałbym zasugerować po najechaniu myszą i bez myszy

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; }
Zamień-IOS-Android
źródło
co margin: 0osiąga czy też spin-buttonpseudoelementy nie wydają się być wyzwalane przez hovernowsze przeglądarki?
oldboy
2

Aby ta funkcja działała w przeglądarce Safari, dodawanie! Ważne w dostosowaniu pakietu internetowego wymusza ukrywanie przycisku obracania.

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

Nadal mam problemy z wypracowaniem rozwiązania dla Opery.

luckychii
źródło
2

W przeglądarce Firefox dla Ubuntu, tylko za pomocą

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

zrobił dla mnie lewę.

Dodawanie

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

Doprowadziłby mnie do

Nieznany pseudo-klasa lub pseudoelement „-webkit-outer-spin-button”. Zestaw reguł został zignorowany z powodu złego wyboru.

za każdym razem, gdy próbowałem. To samo dotyczy wewnętrznego przycisku wirowania.

sonny_boy
źródło
1
-webkit-*jest dla Chrome, -moz-*jest dla Mozilli Firefox. To dlatego nie działało dla ciebie.
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">

Książę Sharma
źródło
6
Ta odpowiedź została już podana kilka razy. Pomaga odczytać istniejące odpowiedzi przed udzieleniem nowej, w przypadku gdy nowa jest duplikatem.
Dan Dascalescu
1

Może zmień wprowadzanie liczb za pomocą javascript na wprowadzanie tekstu, jeśli nie chcesz pokrętła;

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

i powstrzymaj użytkownika od wprowadzania tekstu;

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

poproś javascript, aby zmienił go z powrotem, na wypadek gdybyś potrzebował tarczy;

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

działało dobrze dla moich celów

użytkownik3121518
źródło
1

W przeglądarkach WebKit i Blink oraz wszelkiego rodzaju przeglądarkach użyj następującego CSS:

/* Disable Number Arrow */
input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
}
Sabbir Hossen Chowdhury
źródło
W których przeglądarkach będzie działać, biorąc pod uwagę użycie webkit? Odpowiadając na dziewięcioletnie pytanie czternastoma istniejącymi odpowiedziami, ważne jest, aby dodać wyjaśnienie, w jaki sposób i dlaczego twoja odpowiedź działa, oraz wspomnieć, jaki nowy aspekt pytania, na które odpowiada.
Jason Aller
0

Potrzebowałem tego do pracy

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

Dodatkowa linia appearance: nonebyła dla mnie kluczem.

Vic
źródło