<button> vs. <input type =“button”/>. 어느 것을 사용해야합니까?


1635

대부분의 사이트 (SO 포함)를 볼 때 대부분 다음을 사용합니다.

<input type="button" />

대신에:

<button></button>
  • 둘 사이의 주요 차이점은 무엇입니까?
  • 다른 것을 사용하는 대신 유효한 이유가 있습니까?
  • 조합하여 사용해야하는 유효한 이유가 있습니까?
  • 사용 <button>에 호환성 문제가 발생 하여 널리 사용되지 않는 것을 보았습니까?

답변:


661

사용할 때 또 다른 IE 문제 <button />:

그리고 우리가 IE에 대해 이야기하는 동안 버튼 너비와 관련된 몇 가지 버그가 있습니다. 스타일을 추가하려고 할 때 신비하게 패딩을 추가합니다. 즉, 제어하기 위해 작은 해킹을 추가해야합니다.


186
이 답변은 2009 년에 IE6가 죽었으므로 지금 사용하지 않을 이유가 없다고 가정합니다 <button>.
Rosdi Kasim 님이

75
그들이 해적을 원한다면 짜증나는 버전의 사이트를 얻으십시오. IE6를 삭제, IE7을 삭제, 불행히도 IE8은 여전히 ​​지원이 필요합니다.
Jared

15
Microsoft의 IE6 카운트 다운 페이지 에 따르면 중국의 IE6 사용량은 2014 년 1 월 현재 약 22 %로 계속 증가하고 있습니다. ie6death.com 은 IE6 지원이 2014 년 4 월 8 일에 종료 될 것이라고 언급했습니다.
BryanH

54
많은 사람들이 말했듯이, 여전히 이전 버전의 IE를 사용하는 사용자는 끔찍하게 부서진 인터넷에 익숙 할 것입니다.
jinglesthula

9
<button />또한 form특성 (및 관련 특성)이 있으므로 문서 본문의 다른 부분에있는 양식에 링크 될 수 있습니다.
Gup3rSuR4c

327

보조 메모와 마찬가지로 <button>암시 적으로 제출하므로 제출하지 않고 양식에서 버튼을 사용하려는 경우 문제가 발생할 수 있습니다. 이에 따라, 또 다른 이유는 사용 <input type="button">(또는 <button type="button">)

편집 - 자세한 내용

유형이 없으면의 유형을 button암시 적으로받습니다submit . 양식에있는 제출 단추 또는 입력의 수는 중요하지 않습니다. 제출시 명시 적으로 또는 암시 적으로 제출로 입력 된 단추 중 하나가 양식을 제출합니다.

버튼에는 3 가지의 지원되는 유형이 있습니다

submit ||  "submits the form when clicked (default)"
reset  ||  "resets the fields in the form when clicked"
button ||  "clickable, but without any event handler until one is assigned"

4
더 자세한 내용을 추가 할 수 있습니까? 버튼이 여러 개인 경우 어떻게됩니까? 이것을 수행하는 유일한 type = 'submit'입니까?
Simon_Weaver

44
오 사랑하는 W3C, 왜 submit양식의 99.9 %가 많은이 기본적으로 button가진 하나 submit ?!
2grit

13
많은 양식에는 제출 단추 인 단추가 하나만 있습니다. 한 가지 또는 다른 방법으로 전화를 걸어야한다고 생각합니다.
jinglesthula

5
이것은 큰 문제가 될 수 있습니다! 내 테스트 코드는 약 80 %의 시간을 제출합니다. 그렇지 않으면 일반 버튼으로 취급되었습니다. <form>에서 <button>을 사용할 때의주의 사항
Sydwell

4
@ mik01aj "양식에있는 제출 버튼 또는 입력의 수는 중요하지 않습니다. 제출시 명시 적으로 또는 암시 적으로 제출 된 것으로 입력 된 버튼 중 하나가 양식을 제출합니다." 이것이 분명하지 않습니까? 모든 제출 버튼은 양식을 제출해야합니다. 왜 이렇게 말합니까? 내가 무엇을 놓치고 있습니까?
콘크리트 가넷

174

이 기사 는 그 차이점에 대한 개요를 제공하는 것 같습니다.

페이지에서 :

BUTTON 요소로 만든 단추는 INPUT 요소로 만든 단추와 같은 기능을하지만 더 풍부한 렌더링 가능성을 제공합니다. BUTTON 요소에는 내용이있을 수 있습니다. 예를 들어, 이미지가 포함 된 BUTTON 요소는 기능이 유사하며 유형이 "image"로 설정된 INPUT 요소와 유사 할 수 있지만 BUTTON 요소 유형은 내용을 허용합니다.

버튼 요소-W3C


44

<button>요소 안에 텍스트 나 이미지와 같은 내용을 넣을 수 있습니다.

<button type="button">Click Me!</button> 

이것은이 요소와 해당 <input>요소로 만든 단추의 차이점 입니다.


4
+1, <input />실제로는 공허 요소이므로, <button>그렇지 않습니다
Sebastian

39

인용문

중요 사항 : HTML 양식에서 button 요소를 사용하면 브라우저마다 다른 값을 제출합니다. Internet Explorer는 사이에있는 텍스트 제출 <button></button>다른 브라우저는 value 속성의 내용을 제출하면서, 태그를. 입력 요소를 사용하여 HTML 양식으로 단추를 작성하십시오.

: http://www.w3schools.com/tags/tag_button.asp

올바르게 이해하면 브라우저에서 브라우저로의 호환성 및 입력 일관성이 정답입니다.


43
@Hawken이 페이지는 W3Schools가 W3C 인 것처럼 생각하는 바보에 의해 작성되었습니다. 실제로 W3Schools는 이러한 종류의 자료를 처리하는 수천 개의 다른 사이트보다 나쁘지 않습니다.
Mr Lister

실제로, 그것은 IE의 버전과 IE 모드에 의존합니다-w3schools는 인용 이후 정보를 업데이트했습니다
Damien

12
@MrLister W3Schools가 W3C와 관련이 있다고 생각하는 사람들과 이야기했습니다. W3Fools의 "정확한 정보 제공에 대한 책임"에 동의하지는 않지만 W3Schools의 정확성은 바람직하지 않은 것으로 여겨지며 비평가가 반드시 바보가 아니라고 생각합니다. (나는 좋았을 때 W3S에서 많은 것을 배웠습니다. 표준에
맞지 않았습니다

17
@MrLister W3Schools는 웹 기술 정보에 가장 많이 사용되는 비공식 소스입니다. 그리고 품질은 정말 짜증납니다. 왜 그것들을 골라 내지 않습니까? W3Fools는 어떤 세부 정보를 얻지 못했습니까? 거기에있는 모든 것이 나에게 맞는 것처럼 보입니다.
Marnen Laibow-Koser

19

앵커, 입력 및 버튼의 차이점 기사를 인용하겠습니다. .

앵커 (<a> 요소)는 사용자가 브라우저에서 탐색하거나 다운로드 할 수있는 리소스 인 하이퍼 링크를 나타냅니다. 사용자가 새 페이지로 이동하거나 파일을 다운로드 할 수있게하려면 앵커를 사용하십시오.

입력 ( <input>) 데이터 필드를 나타내는 : 당신이 서버로 전송하는 것을 의미 일부 사용자 데이터 있도록. 버튼과 관련된 몇 가지 입력 유형이 있습니다.

  • <input type="submit">
  • <input type="image">
  • <input type="file">
  • <input type="reset">
  • <input type="button">

예를 들어 " file "은 파일 을 업로드하는 데 사용되고 " reset "은 양식을 지우고 " submit "은 서버로 데이터를 보냅니다. MDN 또는 W3Schools 에서 W3 참조 확인 .

버튼 ( <button>)요소는 매우 다양합니다 :

  • 이미지, 단락 또는 머리글과 같은 단추 안에 요소를 중첩시킬 수 있습니다.
  • 버튼도 포함될 수 ::before::after유사 요소;
  • 버튼은 disabled속성을 지원 합니다. 이를 통해 쉽게 켜고 끌 수 있습니다.

다시, MDN 또는 W3Schools의<button> 태그 대한 W3 참조를 확인하십시오 .


17

HTML 매뉴얼에서 양식 페이지 인용 :

BUTTON 요소로 만든 단추는 INPUT 요소로 만든 단추와 같은 기능을하지만 더 풍부한 렌더링 가능성을 제공합니다. BUTTON 요소에는 내용이있을 수 있습니다. 예를 들어, 이미지를 포함하는 BUTTON 요소는 기능이 유사하며 유형이 "image"로 설정된 INPUT 요소와 유사 할 수 있지만 BUTTON 요소 유형은 컨텐츠를 허용합니다.


17

양식에서 버튼을 만들려면 입력 요소의 버튼을 사용하십시오. 액션에 대한 버튼을 만들려면 버튼 태그를 사용하십시오.


9
클라이언트 측 스크립팅 <input type = "button">은 HTML에서 기능이 없습니다.
iGEL

12
<button>
  • 기본적으로 "type ="submit "속성이있는 것처럼 동작합니다
  • 형태는 물론 형태 없이도 사용할 수 있습니다.
  • 텍스트 또는 HTML 콘텐츠 허용
  • css 의사 요소 허용 (예 : : 이전)
  • 태그 이름은 일반적으로 단일 양식에 고유합니다

vs.

<input type='button'>
  • 제출 요소로 작동하려면 type을 'submit'으로 설정해야합니다.
  • 양식에서만 사용할 수 있습니다.
  • 텍스트 내용 만 허용
  • CSS 의사 요소가 없음
  • 대부분의 양식 요소와 동일한 태그 이름 (입력)

-
최신 브라우저에서는 CSS로 두 요소를 쉽게 스타일 button지정할 수 있지만 대부분의 경우 내부 HTML 및 의사 요소로 더 스타일을 지정할 수 있으므로 요소가 선호됩니다.


9

CSS 스타일링에 관한 한 <button type="submit" class="Btn">Example</button>CSS :before의사 클래스 를 사용할 수있는 기능이 더 좋습니다.:after 도움을 줄 수 .

인해 행 <input type="button">내지 An 다른 시각적 렌더링 <a>또는<span> 특정 상황에서 클래스와 스타일 때이를 피하기.

그것은 주목할 매우 가치가 현재의 최고 응답 있도록 일 현재 관심 2009 년 IE6로 작성되었다되지 <button type="submit">Wins</button>내 눈에 일관성을 스타일링하는 것은 정상에 온다.


9

jQuery를 사용하는 경우 큰 차이가 있습니다. jQuery는 버튼에서보다 입력에서 더 많은 이벤트를 인식합니다. 버튼에서 jQuery는 '클릭'이벤트 만 인식합니다. 입력에서 jQuery는 'click', 'focus'및 'blur'이벤트를 인식합니다.

필요에 따라 언제든지 이벤트를 버튼에 바인딩 할 수 있지만 jQuery가 자동으로 인식하는 이벤트는 다릅니다. 예를 들어, 페이지에 'focusin'이벤트가있을 때마다 실행되는 함수를 만든 경우 입력이 함수를 트리거하지만 버튼은 작동하지 않습니다.


re : KjetilNordin-우리는 페이지의 모든 포커스 이벤트를 인식하는 애플리케이션을 가지고 있었고, 하나는 액션이 ​​발생했습니다. 따라서 입력을 사용하면 단일 이벤트에 대한 모든 요소를 ​​볼 수 있습니다. 당신이해야한다고 말하지는 않았지만 할 수있었습니다. 누군가가 입력을 버튼으로 변경하면 포커스 인이 발생하지 않고 동작이 발생하지 않고 앱이 붐을 일으킬 위험이 있습니다. 그것이 우리에게 일어난 일입니다. :)
MattC

1
요소가 현재 마우스 / 키보드를 통해 대상으로 지정된 경우 포커스 이벤트를 사용하십시오. 문서에서 사용자가 어디에 있는지 보여줍니다.
albert

7

<button>HTML을 포함 할 수 있다는 점에서 융통성이 있습니다. 또한 CSS를 사용하여 스타일을 지정하는 것이 훨씬 쉽고 스타일링은 실제로 모든 브라우저에 적용됩니다. 그러나 Internet Explorer (Eww! IE!)와 관련하여 몇 가지 단점이 있습니다. Internet Explorer는 태그의 내용을 값으로 사용하여 값 속성을 올바르게 감지하지 못합니다. 단추의 클릭 여부에 관계없이 양식의 모든 값이 서버 측으로 전송됩니다. 이것은 그것을 <button type="submit">까다 롭고 고통스럽게 사용합니다.

<input type="submit">반면에 가치 나 감지 문제는 없지만 HTML과 같은 HTML을 추가 할 수는 없습니다 <button>. 스타일링도 어렵고 스타일링이 모든 브라우저에서 항상 제대로 반응하는 것은 아닙니다. 이것이 도움이 되었기를 바랍니다.


7

여기에 나머지 답변에 무언가를 추가하고 싶습니다. 입력 요소는 빈 요소 또는 빈 요소로 간주됩니다 (다른 빈 요소는 area, base, br, col, hr, img, input, link, meta 및 param입니다. 여기서 확인할 수도 있습니다 ). 내용이없는 것 외에도 빈 요소 에는 :: after 및 :: before와 같은 의사 요소를 사용할 수 없으므로 큰 단점이 있습니다.


4

또한 차이점 중 하나는 라이브러리 제공 업체와 이들이 코딩하는 내용에서 비롯 될 수 있습니다. 예를 들어 여기에서는 모바일 각도 UI와 함께 cordova 플랫폼을 사용하고 있으며 input / div / etc 태그는 ng-click과 잘 작동하지만 버튼으로 인해 Visual Studio 디버거가 프로그래머에 의해 발생하는 차이로 인해 충돌 할 수 있습니다. MattC 답변은 동일한 문제를 지적하고 jQuery는 lib 일뿐이며 공급자는 한 요소에서 일부 기능을 생각하지 않았으며 다른 요소에서 제공하는 기능은 생각하지 않았습니다. 따라서 라이브러리를 사용하는 경우 한 요소에 문제가 발생할 수 있으며 다른 요소에는 직면하지 않습니다. 그리고 단순히 인기있는 input것보다 더 인기가 많기 때문에 대부분 고정 된 것입니다.


4

이것은 매우 오래된 질문이며 더 이상 관련이 없을 수 있지만 <button>태그에 사용 되었던 대부분의 문제는 더 이상 존재하지 않으므로 사용하는 것이 좋습니다.

여러 가지 이유로 그렇게 할 수없는 경우 액세스 가능성을 기준으로 태그에 role =”button”속성을 추가해야합니다. 이 기사는 매우 유익합니다 : https://www.deque.com/blog/accessible-aria-buttons/

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