HTML5 숫자 입력 스핀 상자를 숨길 수 있습니까?


984

브라우저와 같은 일부 브라우저 (예 : Chrome)에서 숫자 유형의 HTML 입력을 위해 렌더링하는 새로운 스핀 상자를 숨기는 일관된 방법이 있습니까? 위쪽 / 아래쪽 화살표가 나타나지 않도록 CSS 또는 JavaScript 방법을 찾고 있습니다.

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

2
사용중인 코드의 예를 게시 할 수 있습니까? 스크린 샷도 훌륭하므로보고있는 것을 알 수 있습니다. 내가 찾고 있어요 <input type="number" min="4" max="8" />크롬과 위로와 측면에 아래쪽 화살표를 일반적인 입력 필드를보고.
— calvinf

77
내가보고있는 것을 정확히보고 있습니다. 모바일 브라우저가 적절한 키보드를 표시하고 컴퓨터 브라우저에 위쪽 및 아래쪽 화살표가 표시되지 않도록 type = number 태그를 유지하려고합니다.
— Alan

3
숫자 입력을 사용하는 경우 최신 iOS, Android 및 데스크톱 브라우저에서 잘 작동하는 항목을 사용해야합니다 <input type="number" pattern="[0-9]*" inputmode="numeric">. 추가 정보 : stackoverflow.com/a/31619311/806956
— Aaron Gray

1
내가 일을 제안하는 것은의 라인을 따라 마크 업을 작성하는 것입니다 <input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... > 및 사용하여 jQuery를 Validati을 하거나 핸들 검증과 유사. 나는이 접근법을 테스트하지 않았으므로 이것이 답변이 아닌 주석입니다.
— Agi Hammerthief

답변:


1141

이 CSS는 웹킷 브라우저의 스핀 버튼을 효과적으로 숨 깁니다 (Chrome 7.0.517.44 및 Safari 버전 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" />

인스펙터 (웹킷, Firefox 용 Firebug)를 사용하여 관심있는 요소와 일치하는 CSS 속성을 찾고 유사 요소를 찾을 수 있습니다. 이 이미지는 입력 요소 type = "number"에 대한 결과를 보여줍니다.

입력 유형 검사기 = 숫자 (Chrome)


23
Chrome에 더 이상 문제가없는 것 같습니다. 따라서 display: none;선택기 내부에서 유일한 것으로 사용할 수 있습니다
— philfreo

9
불행히도 크로스 브라우저는 아니므로 type=number이러한 화살표를 숨겨야 하는 경우 사용 하지 않는 것이 좋습니다. 예를 들어 현재는 Opera에 계속 표시되며이 입력 유형을 구현할 때 Firefox, IE 등에서 표시되기 시작합니다.
— mgol

유효한 HTML5 와 같은 대체 솔루션 에서 max=및 min=속성 을 사용해야합니다 . 사람들은 또한 이러한 스피너를 포함하여 오페라를 언급합니다. Safari / Chrome과 유사한 Opera 솔루션이 있습니까? <input>type="text"
— unode

2
기록을 위해, 크롬도가 input::-webkit-clear-buttonX 버튼을 위해
— aldo.roman.nurena

2
2019 년 현재 Firefox에서는 이것이 작동하지 않았습니다. 이 솔루션은 나를 위해 일했습니다 : stackoverflow.com/questions/45396280/…
— lwitzel

431

Firefox 29는 현재 숫자 요소에 대한 지원을 추가하므로 다음은 웹킷 및 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">


그와 함께 antonj의 답변에서 '여백 : 0'은 내가 사용한 것입니다
— Asfand Qazi

나는 여백없이 그것을 사용했고, 좋아 보인다 (2020 년 5 월).
— croraf

359

짧은 답변:

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

더 긴 답변 :

기존 답변에 추가하려면 ...

Firefox :

Firefox의 현재 버전 에서 이러한 요소 에 대한 -moz-appearance특성 의 (사용자 에이전트) 기본값 은 number-input입니다. 이를 값으로 변경 textfield하면 스피너가 효과적으로 제거됩니다.

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

경우에 따라 스피너를 처음 에 숨기고 호버 / 포커스에 표시 하기를 원할 수 있습니다 . (현재 Chrome의 기본 동작입니다). 그렇다면 다음을 사용할 수 있습니다.

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


크롬:

현재 Chrome 버전 에서 이러한 요소 에 대한 -webkit-appearance속성 의 (사용자 에이전트) 기본값 은 이미 textfield입니다. 스피너를 제거하기 위해, -webkit-appearance속성 값의 요구가 변경 될 none온 ::-webkit-outer-spin-button/의 ::-webkit-inner-spin-button의사 클래스 (그것은이다 -webkit-appearance: inner-spin-button기본적으로).

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

그 밖으로 그것의 가치가 가리키는 margin: 0에서 마진을 제거하는 데 사용됩니다 나이가 크롬의 버전.

현재이 글을 쓰는 시점에서 '내부 스핀 버튼'의사 클래스의 기본 사용자 에이전트 스타일은 다음과 같습니다.

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
이 답변에는 무언가를 개발할 때 고려해야 할 관련 파이어 폭스 정보가 포함되어 있기 때문에이 답변이 더 좋습니다. 다른 브라우저 엔진을 무시하는 웹킷 전용 답변은 많이 남아 있습니다
— RozzA

파이어 폭스 솔루션에! important를 추가하십시오. }
— sajad saderi

126

Apple의 모바일 Safari 코딩 경험 가이드에 따르면 다음을 사용하여 iPhone 브라우저에 숫자 키보드를 표시 할 수 있습니다.

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

pattern의는 \d*또한 작동합니다.


5
위의 내용에도 불구하고 확인 된 솔루션은 주어진 문제에 대해 매우 잘 작동하며 여기 에서이 솔루션으로 전환하기로 결정했습니다. 한 가지 이유는, 예를 들어 Opera 브라우저에도 화살표가 표시되어있어이를 방지해야합니다. 둘째, Chrome 17에서 더 큰 문제가 발생했습니다. 한편으로 'maxlen'속성이 더 이상 작동하지 않는 것 같습니다. 원하는만큼 문자를 입력 할 수 있습니다. 반면에 특정 길이를 초과하는 숫자는 반올림됩니다. "iOS 기기에서 숫자 키패드를 여는 것"에만이 솔루션을 사용하는 것이 더 안전 해 보입니다.
— Jan

입력 할 때 입력 필드의 숫자를 형식화하고 숫자 필드와 작동하지 않는 JS가 있기 때문에이 솔루션도 사용했습니다. 그래서 이것은 매력처럼 작동했습니다.
— Tokimon

19
이것은 현재 모든 브라우저에서 Android에서는 아무 것도 수행하지 않습니다. Android 4.2의 브라우저 4.2.2, Chrome 28 및 Firefox 23 의이 테스트 페이지 에서 테스트되었습니다 . 해당 브라우저에는이 마크 업이있는 표준 텍스트 키보드 만 표시됩니다.
— Rory O'Kane

3
다음은 Android와 iOS 모두를위한 훌륭한 솔루션입니다. stackoverflow.com/a/31619311/806956
— Aaron Gray

1
@AaronGray는 다시 정사각형으로 돌아 왔습니다.이 솔루션에는 데스크톱 용 스피너가 있습니다.
— StrangeWill

39

input type="tel"대신 사용해보십시오 . 숫자가 표시된 키보드가 나타나며 스핀 상자가 표시되지 않습니다. JavaScript 또는 CSS 또는 플러그인이나 다른 것이 필요하지 않습니다.


17
이 솔루션은 현재와 같은 브라우저에서 유효성 검사를 수행 type=number하지 않습니다.
— Pepijn

5
전화 키보드 는 숫자 키보드 보다 좋지 않지만 텍스트 키보드 보다 훨씬 좋습니다 . 전화 키보드에는 숫자 키보드에서 생략 된 관련없는 문자와 기호가 있습니다. (함께 테스트 페이지 안드로이드 4.2.)
— 로리 O'Kane에게

16
"."가 없습니다. 텔 키보드에서 : - <
— gion_13

1
@ RoryO'Kane 숫자 키보드는 숫자가 아닌 입력을 거부한다는 큰 단점이 있습니다.
— Jochem Kuijpers

4
이것은 해결책이 아니며 HTML5 표준에 따르면 바보입니다. input [tel]은 전화 번호 용이고 input [number]는 부동 소수점 1을 포함한 일반 번호 용입니다. 따라서 이것은 전혀 해결책이 아닙니다.
— Vasil Popov

17

숫자를 입력 할 때 스피너를 제거하려면이 CSS 만 추가하십시오.

/* 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에 따르면 input[type=number]{ -webkit-appearance }크롬에는 충분해야하지만 의사 요소도 수정해야합니다. 왜 그런지 아십니까 ??
— oldboy

8

이 문제와 input[type="datetime-local"]비슷한 문제가 발생했습니다.이 문제와 비슷합니다.

이런 종류의 문제를 극복 할 수있는 방법을 찾았습니다.

먼저 "DevTools-> 설정-> 일반-> 요소-> 사용자 에이전트 그림자 DOM 표시"를 통해 크롬의 그림자 루트 기능을 켜야합니다.

그런 다음 그림자 가있는 모든 DOM 요소를 볼 수 있습니다 ( 예 <input type="number">: 그림자가있는 DOM이있는 전체 요소는 다음과 같습니다).

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

입력의 그림자 DOM [type = "number"

그리고이 정보에 따르면 @Josh가 말한 것처럼 원치 않는 요소를 숨기도록 CSS를 작성할 수 있습니다.


3

당신이 요구 한 것은 아니지만 스핀 박스가있는 WebKit의 포커스 버그로 인해이 작업을 수행합니다.

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

필요한 것을 도와 줄 아이디어를 줄 수 있습니다.


이것은 내가 말한 것이 아니지만 HTML5의 표준화가 부족하기 때문에 이것이 제시된 최상의 솔루션입니다. 구현 방법에 관계없이 데스크톱과 모바일 용으로 다른 사이트를 제공하는 것이 현재이를 달성하는 유일한 방법 인 것 같습니다. 그러나 요소의 사본을 작성하고 DOM에 추가하기 전에 '유형'값을 변경해야했습니다. IE는 요소가 DOM에 추가되면 입력 유형을 수정할 수 없기 때문에.
— Alan

3

이것은 더 나은 대답입니다. 마우스 오버 및 마우스 오버없이 제안하고 싶습니다.

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

무엇을 margin: 0달성합니까? 또한 spin-button의사 요소 hover는 최신 브라우저에서 트리거되지 않는 것 같습니다 .
— oldboy

2

Safari 에서이 작업을 수행하기 위해 웹 키트 조정에! important를 추가하면 스핀 버튼이 숨겨집니다.

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

Opera 용 솔루션을 만드는 데 여전히 문제가 있습니다.


2

우분투 용 Firefox에서는

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

나를 위해 트릭을했다.

첨가

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

나를 이끌 것입니다

알 수없는 의사 클래스 또는 의사 요소 '-webkit-outer-spin-button'. 잘못된 선택기 때문에 규칙 세트가 무시되었습니다.

내가 시도 할 때마다. 내부 스핀 버튼과 동일합니다.


1
-webkit-*Chrome 용, -moz-*mozilla Firefox 용입니다. 그것이 당신을 위해 작동하지 않은 이유입니다.
— 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
이 답변은 이미 여러 번 주어졌습니다. 새 답변이 중복 된 경우 새 답변을 제공하기 전에 기존 답변을 읽는 데 도움이됩니다.
— Dan Dascalescu

1

스피너를 원하지 않을 때 자바 스크립트로 입력 한 숫자를 텍스트 입력으로 변경할 수 있습니다.

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

사용자가 텍스트를 입력하지 못하게합니다.

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

그런 다음 스피너를 원할 경우 자바 스크립트를 다시 변경하십시오.

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

그것은 내 목적을 위해 잘 작동했습니다


1

WebKit 및 Blink 기반 브라우저 및 모든 종류의 브라우저에서 다음 CSS를 사용하십시오.

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

를 사용하면 어떤 브라우저에서 작동 webkit합니까? 14 개의 기존 답변으로 9 살짜리 질문에 대답 할 때는 답변이 어떻게, 왜 작동하는지에 대한 설명을 추가하고 질문의 새로운 측면을 언급하는 것이 중요합니다.
— Jason Aller

0

이 일이 필요했습니다

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

여분의 라인은 appearance: none저에게 핵심이었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.