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.