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.