HTML5 numarası girişinin döndürme kutusunu gizleyebilir miyim?


984

Bazı tarayıcıların (Chrome gibi) tür numarasının HTML girişi için oluşturduğu yeni döndürme kutularını gizlemenin tutarlı bir yolu var mı? Yukarı / aşağı okların görünmesini önlemek için bir CSS veya JavaScript yöntemi arıyorum.

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

2
Kullandığınız kodun bir örneğini gönderebilir misiniz? Ekran görüntüsü de harika olurdu, bu yüzden neye baktığınızı biliyoruz. <input type="number" min="4" max="8" />Chrome'da bakıyorum ve yanda yukarı ve aşağı oklarla tipik bir giriş alanı görüyorum.
calvinf

77
Tam olarak ne gördüğümü görüyorsun. Mobil tarayıcıların uygun bir klavye getirmesini sağlamak ve yukarı ve aşağı okların bilgisayar tarayıcılarında görünmesini önlemek için type = sayı biçimlendirmesini korumaya çalışıyorum.
Alan

3
Eğer sayı girişlerini kullanıyorsanız, çağdaş iOS, Android ve Masaüstü tarayıcıları ile güzel oynuyor kullanım şey emin olun: <input type="number" pattern="[0-9]*" inputmode="numeric">. Daha fazla bilgi: stackoverflow.com/a/31619311/806956
Aaron Gray

1
Ne yapmak önermek satırları boyunca biçimlendirme yazma <input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > ve doğrulama işlemek için jQuery Validati veya benzeri kullanarak . Bu yaklaşımı test etmedim, bu yüzden bu bir cevaptan ziyade bir yorum.
Agi Hammerthief

Yanıtlar:


1141

Bu CSS, webkit tarayıcıları için döndürme düğmesini etkili bir şekilde gizler (Chrome 7.0.517.44 ve Safari Sürüm 5.0.2'de (6533.18.5) test etmiştir):

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

İlgilendiğiniz öğeler için eşleşen CSS özelliklerini aramak için her zaman denetçiyi (webkit, muhtemelen Firebug for Firefox) kullanabilirsiniz, Pseudo öğelerini arayın. Bu görüntü bir girdi öğesi türü = "sayı" için sonuçları gösterir:

Giriş türü için denetçi = sayı (Krom)


23
Görünüşe göre Chrome'un artık bir sorunu yok, bu yüzden display: none;seçicinin içindeki tek şey olarak kullanabilirsiniz
philfreo

9
Bu maalesef çapraz tarayıcı değil, bu yüzden type=numberbu okları gizlemek zorundaysanız kullanmamanızı tavsiye ederim . Örneğin, şu anda Opera'da görüntülenmeye devam ediyorlar ve bu giriş türünü uyguladıklarında Firefox, IE vb.
mgol

Geçerli HTML5 gibi alternatif çözümler üzerinde max=ve min=özniteliklerini kullanmanız gerekir . İnsanlar bu iplikçiler de dahil Opera'dan bahsediyorlar. Opera için Safari / Chrome'a ​​benzer bir çözüm var mı? <input>type="text"
unode

2
kayıt için Chrome'un input::-webkit-clear-buttonX düğmesi de var
aldo.roman.nurena

2
2019 itibariyle, bu benim için Firefox'ta işe yaramadı. Bu çözüm benim için çalıştı: stackoverflow.com/questions/45396280/…
lwitzel

431

Firefox 29 şu anda sayı öğeleri için destek eklediğinden, webkit ve moz tabanlı tarayıcılarda dönenleri gizlemek için bir snippet:

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

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


Bu artı antonj'ın cevabındaki 'kenar boşluğu: 0' benim kullandığım şey
Asfand Qazi

Kenar boşluğu olmadan kullandım ve iyi görünüyor (Mayıs 2020).
croraf

359

Kısa cevap:

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

Daha uzun cevap:

Mevcut cevaba eklemek için ...

Firefox:

Firefox'un geçerli sürümlerinde , bu öğelerdeki -moz-appearanceözelliğin (kullanıcı aracısı) varsayılan değeri number-input. Bunu değere textfieldçevirmek, döndürücüyü etkili bir şekilde kaldırır.

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

Bazı durumlarda, döndürücünün başlangıçta gizlenmesini ve ardından üzerine gelindiğinde / odakta görünmesini isteyebilirsiniz . (Bu, şu anda Chrome'daki varsayılan davranıştır). Öyleyse, aşağıdakileri kullanabilirsiniz:

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


Krom:

Chrome'un mevcut sürümlerinde , bu öğelerdeki -webkit-appearanceözelliğin (kullanıcı aracısı) varsayılan değeri zaten textfield. Eğiren kaldırmak amacıyla, -webkit-appearancetesisin değeri ihtiyaçları için değiştirilmesi noneüzerine ::-webkit-outer-spin-button/ ::-webkit-inner-spin-buttonsözde sınıfları (o -webkit-appearance: inner-spin-buttonvarsayılan olarak).

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

Dikkat It değerinde işaret margin: 0içinde marjını kaldırmak için kullanılır eski Chrome sürümleri.

Şu anda, bunu yazarken, 'iç-spin-düğmesi' sözde sınıfında varsayılan kullanıcı aracısı stili:

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
bu cevabı daha iyi seviyorum, çünkü bir şey geliştirirken dikkate alınması gereken ilgili firefox bilgilerini içerir. diğer tarayıcı motorlarını görmezden gelen sadece webkit cevapları
istenecek

firefox çözümüne bir! önemli ekleyin. BU ===> girdi [type = "number"] {-moz-view: textfield! important; }
sajad saderi

126

Apple'ın mobil Safari kullanıcı deneyimi kodlama kılavuzuna göre , iPhone tarayıcısında sayısal bir klavye görüntülemek için aşağıdakileri kullanabilirsiniz:

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

Bir patternait \d*de çalışacaktır.


5
Yukarıdakilere rağmen, kontrol edilen çözüm verilen sorun için çok iyi çalışıyor, burada bu çözüme geçmeye karar verdim. Bunun bir nedeni, örneğin Opera tarayıcısının da engellemeniz gereken okları göstermesidir. İkincisi, Chrome 17'de daha büyük sorunlar gözlemledim. Bir yandan, 'maxlen' özelliği artık çalışmıyor gibi görünüyor; orada istediğiniz kadar karakter girebilirsiniz. Öte yandan, belirli bir uzunluğu aşan sayılar basitçe yuvarlanır. Bu çözümü "sadece bir iOS aygıtında numpad'i açmak" için kullanmak benim için daha güvenli görünüyor.
Ocak

Ben yazarken girdi alanında sayı oluşturan bazı JS vardı ve bu bir sayı alanı ile işe yaramadı gibi ben de bu çözümler ile gitti. Bu bir cazibe gibi çalıştı.
Tokimon

19
Bu şu anda Android'de tüm tarayıcılarda hiçbir şey yapmıyor. Android 4.2'de Tarayıcı 4.2.2, Chrome 28 ve Firefox 23'te bu test sayfasında test edilmiştir . Bu tarayıcılar sadece bu işaretlemeyle standart metin klavyesini gösterir.
Rory O'Kane

3
Hem Android hem de iOS için güzel bir çözüm: stackoverflow.com/a/31619311/806956
Aaron Gray

1
@AaronGray yine bir kareye geri dönüyor: bu çözümün masaüstü için döndürücüleri var.
16:16

39

input type="tel"Bunun yerine kullanmayı deneyin . Sayıları olan bir klavye açar ve döndürme kutuları göstermez. JavaScript veya CSS veya eklenti veya başka bir şey gerektirmez.


17
Bu çözüm şu anda olduğu gibi tarayıcılarda herhangi bir doğrulama yapmamaktadır type=number.
Pepijn

5
Telefon klavyesi olarak iyi olarak değil sayı klavyesi o çok daha iyi olsa, metin klavyesi . Telefon klavyesinde, sayı klavyesinden çıkarılan alakasız harfler ve simgeler bulunur. ( Bu sayfada Android 4.2 ile test edilmiştir .)
Rory O'Kane

16
"" yok. tel klavyede: - <
gion_13

1
@ RoryO'Kane Sayı klavyesi, kesinlikle bir sayı olmayan herhangi bir girdiyi reddedeceğinden gerçekten büyük bir dezavantaja sahiptir.
Jochem Kuijpers

4
Bu bir çözüm değil ve HTML5 standartlarına göre aptalca. [tel] girişi telefon numaraları için, [sayı] girişi kayan noktalı olanlar dahil genel numaralar içindir. Yani bu bir çözüm değil.
Vasil Popov

17

Bu css'i yalnızca sayı girişindeki döndürücüyü kaldırmak için ekleyin

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

caniuse'a göre input[type=number]{ -webkit-appearance }krom için yeterli olmalıdır, ancak elbette sözde öğeleri de değiştirmeniz gerekir. neden herhangi bir fikir ??
oldboy

8

Bir sorunla karşılaştım input[type="datetime-local"] benzer .

Ve bu tür problemlerin üstesinden gelmenin bir yolunu buldum.

İlk olarak, "DevTools -> Ayarlar -> Genel -> Öğeler -> Kullanıcı aracısı gölge DOM'sini göster" ile kromun gölge kök özelliğini açmalısınız.

Ardından tüm gölgeli DOM öğelerini görebilirsiniz , örneğin, <input type="number">gölgeli DOM içeren tam öğe:

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

girdinin gölge DOM'si [type = "sayı"

Ve bu bilgilere göre, @Josh'un dediği gibi, istenmeyen öğeleri gizlemek için bazı CSS'ler hazırlayabilirsiniz.


3

Ne istedi değil, ama bunu WebKit spinboxes ile bir odak hata nedeniyle yapıyorum:

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

İhtiyacınız olan şeylere yardımcı olmak için size bir fikir verebilir.


Bu tam olarak bahsettiğim şey değil, ancak mevcut HTML5 standardizasyon eksikliğinden dolayı sunulan en iyi çözüm budur. Mobil cihazlar için masaüstünden farklı bir site sağlamak (nasıl uygulanırsa uygulansın) şu anda bunu gerçekleştirmenin tek yolu gibi görünüyor. Bununla birlikte, DOM'a eklemeden önce öğenin bir kopyasını oluşturmak ve 'type' değerini değiştirmek zorunda kaldım. IE, öğe dom'a eklendikten sonra giriş türünün değiştirilmesine izin vermediğinden.
Alan

3

Bu fare üzerinde ve fare üzerinde olmadan önermek istiyorum daha iyi cevaptır

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

ne margin: 0başarıyor? Ayrıca, spin-buttonsözde öğeler hoveryeni tarayıcılarda tetiklenmiyor gibi görünüyor ?
oldboy

2

Safari'de bu çalışmayı yapmak için webkit ayarlaması için!

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

Hala Opera için bir çözüm bulmakta zorlanıyorum.


2

Ubuntu için Firefox'ta,

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

benim için hile yaptı.

Ekleme

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

Beni götürürdü

Bilinmeyen sözde sınıf veya sözde öğe '-webkit-dış-spin-düğmesi'. Kötü seçici nedeniyle kural kümesi yoksayıldı.

her denediğimde. İçteki sıkma düğmesi için de aynıdır.


1
-webkit-*Chrome içindir, -moz-*mozilla firefox içindir. Bu yüzden senin için işe yaramadı.
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
Bu cevap zaten birkaç kez verilmiştir. Yenisinin yinelenmesi durumunda, yenisini vermeden önce mevcut cevapların okunmasına yardımcı olur.
Dan Dascalescu

1

Bir spinner istemiyorsanız javascript ile sayı girişini metin girişine çevirebilirsiniz;

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

ve kullanıcının metin girmesini durdurur;

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

sonra bir spinner istiyorsanız javascript'i değiştirmesini sağlayın;

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

amacım için iyi çalıştı


1

WebKit ve Blink tabanlı tarayıcılarda ve Her Türlü Tarayıcıda aşağıdaki CSS kullanılır:

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

Kullanımı göz önüne alındığında bu hangi tarayıcılarda çalışacak webkit? Dokuz yaşındaki bir soruyu mevcut on dört cevapla cevaplarken, cevabınızın nasıl ve neden işe yaradığına dair açıklama eklemek ve sorunun hangi yeni yönüne cevap verdiğini belirtmek önemlidir.
Jason Aller

0

Çalışmak için buna ihtiyacım vardı

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

Ekstra satır appearance: nonebenim için önemliydi.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.