Posso ocultar a caixa de rotação da entrada de número HTML5?


984

Existe uma maneira consistente entre os navegadores para ocultar as novas caixas de rotação que alguns navegadores (como o Chrome) processam para entrada HTML do número do tipo? Estou procurando um método CSS ou JavaScript para impedir que as setas para cima / para baixo apareçam.

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

2
Você pode postar um exemplo do código que está usando? Uma captura de tela também seria ótima, para que saibamos o que você está vendo. Estou olhando no <input type="number" min="4" max="8" />Chrome e vendo um campo de entrada típico com as setas para cima e para baixo ao lado.
calvinf 24/09/10

77
Você está vendo exatamente o que estou vendo. Estou tentando manter a marcação type = number para garantir que os navegadores móveis exibam um teclado apropriado e impedir que as setas para cima e para baixo apareçam nos navegadores de computador.
Alan

3
Se você estiver usando entradas numéricas, certifique-se de usar algo que joga bonito com iOS modernos, Android e navegadores de desktop: <input type="number" pattern="[0-9]*" inputmode="numeric">. Mais informações: stackoverflow.com/a/31619311/806956
Aaron Gray

1
O que eu sugiro fazer é escrever a marcação ao longo das linhas <input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > e usar o jQuery Validati ou similar para lidar com a validação. Não testei essa abordagem, e é por isso que é um comentário, e não uma resposta.
Agi Hammerthief 14/09

Respostas:


1141

Esse CSS oculta efetivamente o botão de rotação dos navegadores de kit da web (foi testado no Chrome 7.0.517.44 e no Safari Versão 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" />

Você sempre pode usar o inspetor (webkit, possivelmente Firebug for Firefox) para procurar propriedades CSS correspondentes aos elementos nos quais está interessado, procurar por pseudo-elementos. Esta imagem mostra resultados para um elemento de entrada type = "number":

Inspetor para o tipo de entrada = número (Chrome)


23
Parece que o Chrome não tem mais um problema, então você pode apenas usar display: none;como a única coisa dentro do seletor
philfreo

9
Infelizmente, este não é um navegador cruzado, por isso desaconselho o uso type=numberse você precisar ocultar essas setas. Por exemplo, atualmente eles ainda serão exibidos no Opera e começarão a ser exibidos no Firefox, IE etc. quando implementarem esse tipo de entrada.
mgol

Preciso usar os atributos max=e min=em <input>soluções alternativas, como type="text"HTML5 não válidas. As pessoas também mencionam Opera, incluindo esses spinners. Existe uma solução para o Opera semelhante ao Safari / Chrome?
unode 5/06/13

2
para o registro, o Chrome também tem input::-webkit-clear-buttono botão X
aldo.roman.nurena 4/13

2
A partir de 2019, isso não funcionou para mim no Firefox. Esta solução funcionou para mim: stackoverflow.com/questions/45396280/…
lwitzel 27/03/19

431

O Firefox 29 atualmente adiciona suporte para elementos numéricos, então aqui está um trecho para ocultar os giradores em navegadores baseados em webkit e 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">


Isso mais a margem: 0 da resposta de antonj é o que eu usei
Asfand Qazi

Usei sem margem e parece ok (maio de 2020).
croraf

359

Resposta curta:

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

Resposta mais longa:

Para adicionar à resposta existente ...

Raposa de fogo:

Nas versões atuais do Firefox, o valor padrão (agente do usuário) da -moz-appearancepropriedade nesses elementos é number-input. Alterar isso para o valor textfieldefetivamente remove o botão giratório.

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

Em alguns casos, convém que o botão giratório fique oculto inicialmente e apareça em foco / foco. (Este é atualmente o comportamento padrão no Chrome). Nesse caso, você pode usar o seguinte:

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


Cromada:

Nas versões atuais do Chrome, o valor padrão (agente do usuário) da -webkit-appearancepropriedade nesses elementos já é textfield. Para remover o controle giratório, o -webkit-appearancevalor da propriedade precisa ser alterado para nonenas ::-webkit-outer-spin-button/ ::-webkit-inner-spin-buttonpseudo classes (é -webkit-appearance: inner-spin-buttonpor padrão).

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

Vale ressaltar que margin: 0é usado para remover a margem nos antigos versões antigas do Chrome.

Atualmente, ao escrever isso, aqui está o estilo padrão do agente do usuário na pseudo classe 'inner-spin-button':

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
Eu gosto mais dessa resposta porque inclui informações relevantes sobre o Firefox, que, ao desenvolver algo, precisam ser consideradas. respostas somente webkit que ignoram outros mecanismos de navegador deixam muito a desejar
ROZZA

adicione um! important para a solução do firefox.LIKE THIS ===> input [type = "number"] {-moz-aparecimento: campo de texto! important; }
sajad saderi 29/09/19

126

De acordo com o guia de codificação da experiência do usuário da Apple para o Safari móvel , você pode usar o seguinte para exibir um teclado numérico no navegador do iPhone:

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

Um patternde \d*também irá funcionar.


5
Apesar do exposto, a solução verificada funciona muito bem para o problema em questão, decidi mudar para esta solução aqui. Uma razão é que, por exemplo, o navegador Opera também mostra as setas, o que você também deve evitar. Em segundo lugar, observei problemas maiores no Chrome 17. Lá, por um lado, o atributo 'maxlen' parece não funcionar mais; você pode inserir quantos caracteres quiser lá. Por outro lado, números que excedem um determinado comprimento são simplesmente arredondados. Usar esta solução para "abrir o numpad em um dispositivo iOS" parece ser mais seguro para mim.
Janeiro

Eu também usei essas soluções, pois tinha JS que formatava o número no campo de entrada quando digitei e que não funcionava com um campo numérico. Então este funcionou como um encanto.
Tokimon

19
Atualmente, isso não faz nada no Android, em todos os navegadores. Testado nesta página de teste no Navegador 4.2.2, Chrome 28 e Firefox 23 no Android 4.2. Esses navegadores apenas mostram o teclado de texto padrão com esta marcação.
Rory O'Kane

3
Aqui está uma boa solução tanto para Android e iOS: stackoverflow.com/a/31619311/806956
Aaron Gray

1
@AaronGray, de volta à estaca zero: essa solução possui rotadores para a área de trabalho.
StrangeWill

39

Tente usar em seu input type="tel"lugar. Ele exibe um teclado com números e não mostra caixas de rolagem. Não requer JavaScript, CSS, plugins ou qualquer outra coisa.


17
Atualmente, esta solução não faz nenhuma validação em nenhum navegador como type=numberfaz.
Pepijn

5
O teclado do telefone não é tão bom quanto o teclado numérico , embora seja muito melhor que o teclado de texto . O teclado do telefone possui letras e símbolos irrelevantes que são omitidos no teclado numérico. (Testado com esta página no Android 4.2.)
Rory O'Kane

16
não há "." no teclado tel: - <
gion_13

1
@ RoryO'Kane O teclado numérico tem uma grande desvantagem de negar qualquer entrada que não seja estritamente um número.
Jochem Kuijpers

4
Esta não é uma solução, e pelos padrões do HTML5 é estúpida. entrada [tel] é para números de telefone, entrada [número] é para números genéricos, incluindo números de ponto flutuante. Portanto, esta não é uma solução.
27515 Vasil Popov

17

Adicione apenas este css para remover o girador na entrada do número

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

de acordo com caniuse input[type=number]{ -webkit-appearance }deve ser suficiente para o chrome, mas é claro que você também precisa modificar os pseudo-elementos. alguma idéia do porquê ??
Oldboy

8

Eu encontrei esse problema com um input[type="datetime-local"], que é semelhante a esse problema.

E eu encontrei uma maneira de superar esse tipo de problema.

Primeiro, você deve ativar o recurso de raiz de sombra do chrome em "DevTools -> Configurações -> Geral -> Elementos -> Mostrar DOM do agente do usuário"

Então você pode ver todos os elementos DOM sombreados , por exemplo, para <input type="number">, o elemento completo com DOM sombreado é:

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

sombra DOM da entrada [type = "number"

E de acordo com essas informações, você pode criar um CSS para ocultar elementos indesejados, como disse o @Josh.


3

Não é o que você pediu, mas faço isso por causa de um bug de foco no WebKit com caixas de rotação:

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

Pode dar uma idéia para ajudar com o que você precisa.


Não era exatamente disso que eu estava falando, mas devido à atual falta de padronização do HTML5, essa é a melhor solução apresentada. Fornecer um site diferente para celular e para computador (não importa como ele é implementado) parece ser a única maneira de fazer isso atualmente. No entanto, tive que criar uma cópia do elemento e alterar o valor 'type' antes de adicioná-lo ao DOM. Como o IE não permite modificar o tipo de uma entrada depois que o elemento foi adicionado ao dom.
Alan

3

Esta é uma resposta melhor que eu gostaria de sugerir sobre o mouse e sem o mouse

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

o que margin: 0realiza? Além disso, os spin-buttonpseudoelementos não parecem ser acionados hoverem navegadores mais recentes?
Oldboy

2

Para fazer isso funcionar no Safari, achei que adicionar! Important ao ajuste do kit da web força o botão de rotação a ficar oculto.

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

Ainda estou tendo problemas para encontrar uma solução para o Opera.


2

No Firefox para Ubuntu, apenas usando

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

fez o truque para mim.

Adicionando

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

Me levaria a

Pseudo-classe ou pseudo-elemento desconhecido '-webkit-outer-spin-button'. Conjunto de regras ignorado devido a um seletor incorreto.

toda vez que eu tentava. O mesmo para o botão de rotação interna.


1
-webkit-*é para Chrome, -moz-*é para mozilla firefox. Por isso não funcionou para você.
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
Esta resposta já foi dada várias vezes. Ajuda a ler as respostas existentes antes de fornecer uma nova, caso a nova seja duplicada.
Dan Dascalescu

1

Talvez altere a entrada de número com javascript para entrada de texto quando você não quiser um girador;

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

e pare o usuário digitando texto;

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

faça com que o javascript mude novamente, caso você queira um girador;

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

funcionou bem para os meus propósitos


1

Nos navegadores WebKit e Blink, e Todo o tipo de navegador, use o seguinte CSS:

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

Em quais navegadores isso funcionará, devido ao uso de webkit? Ao responder a uma pergunta de nove anos com quatorze respostas existentes, é importante adicionar explicações sobre como e por que sua resposta funciona e mencionar que novo aspecto da pergunta ela responde.
Jason Aller

0

Eu precisava disso para funcionar

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

A linha extra de appearance: noneera a chave para mim.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.