javascript w3schools Posso ocultar a caixa de rotação do número de HTML5?




number step html5 (12)

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

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

Não é o que você pediu, mas eu faço isso por causa de um bug de foco no WebKit com 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";
}

Pode lhe dar uma ideia para ajudar com o que você precisa.


O Firefox 29 atualmente adiciona suporte a elementos numéricos, então aqui está um trecho para esconder os spinners 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">


Para fazer isso funcionar no Safari eu achei que adicionar! Importante para o ajuste do webkit força o botão de rotação a ser escondido.

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

Eu ainda estou tendo problemas para encontrar uma solução para o Opera também.


Apenas adicione este css para remover o spinner 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;
}

Este CSS efetivamente esconde o botão giratório para navegadores de webkit (testado no Chrome 7.0.517.44 e 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 */
}

Você sempre pode usar o inspetor (webkit, possivelmente Firebug para Firefox) para procurar por propriedades CSS correspondentes para os elementos de seu interesse, procure por Pseudo-elementos. Esta imagem mostra resultados para um tipo de elemento de entrada = "número":


No Firefox para o 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 ao seletor incorreto.

toda vez que eu tentei. O mesmo para o botão giratório interno.



Tente usar o input type="tel" vez disso. Ele mostra um teclado com números e não mostra caixas de rotação. Não requer JavaScript ou CSS ou plugins ou qualquer outra coisa.


Talvez mude o número de entrada com javascript para entrada de texto quando você não quiser um spinner;

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

e pare o usuário que digita o 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;
      }
  }

então o javascript o troque de volta caso você queira um spinner;

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

funcionou bem para os meus propósitos


Esta é a resposta mais melhor que eu gostaria de sugerir no mouse e sem passar 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; }

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 a resposta existente ...

Raposa de fogo:

Nas versões atuais do Firefox, o valor padrão (user agent) da -moz-appearance nesses elementos é number-input . Alterando isso para o campo de textfield valor efetivamente remove o spinner.

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

Em alguns casos, você pode querer que o controle giratório seja oculto inicialmente e, em seguida, apareça em foco / foco. (Este é atualmente o comportamento padrão no Chrome). Em caso afirmativo, 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 (user agent) da propriedade -webkit-appearance nesses elementos já é campo de textfield . Para remover o -webkit-appearance giratório, o valor da propriedade -webkit-appearance precisa ser alterado para none nas pseudo classes ::-webkit-outer-spin-button / ::-webkit-inner-spin-button-webkit-appearance: inner-spin-button por 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 a pena ressaltar que margin: 0 é usado para remover a margem em versões mais antigas do Chrome.

Atualmente, ao escrever isso, aqui está o estilo do agente do usuário padrão na classe de pseudo '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;
}

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

E descobri 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 de agente do usuário"

Então você pode ver todos os elementos DOM sombreados , por exemplo, para <input type="number"> , o elemento completo com o 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>

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





numbers