HTML5를 사용하여 <a> 안에 <button> 요소를 중첩시킬 수 있습니까?


145

나는 다음을하고있다 :

 <a href="www.stackoverflow.com">
   <button disabled="disabled" >ABC</button>
 </a>  

이것은 잘 작동하지만 "요소 '버튼'이 요소 '버튼'안에 중첩되어서는 안된다는 HTML5 유효성 검사 오류가 발생합니다.

누구든지 내가해야 할 일에 대해 조언을 줄 수 있습니까?


8
유효성 검사기는 이미 귀하의 질문에 답변했으며 해당 오류 메시지에서 왜 유효하지 않은지 알려줍니다.
쓸모없는 코드

1
그러나 Google이 링크로 볼 수 있도록하려면 대안이 있습니까? 버튼 사용법의 예로 다음 레코드와 이전 레코드를위한 "<<"및 ">>"버튼이 있습니다. 나는 이것이 버튼이어야한다고 생각하지만 기능은 새로운 페이지에 연결된다는 것입니다.
Marie

3
내 질문은 중요합니다 ..이 하나를 당연히 예외로한다면.
Muhammad Umer

1
<button> <a href="dsada.html"> 테스트 </a> </ button>를 입력하면 Internet Explorer 11 또는 Firefox에서 작동하지 않습니다.
dutraveller

답변:


231

아니요 , W3CHTML5 사양 문서 에 따르면 유효한 HTML5가 아닙니다 .

콘텐츠 모델 : 투명 하지만 대화 형 콘텐츠 하위 항목 이 없어야합니다 .

대화 형 컨텐츠가없는 한 (예 : 단추 또는 기타 링크) 전체 단락, 목록, 표 등 전체를 감싸는 요소가있을 수 있습니다.

즉, <a>다음을 제외한 모든 요소를 ​​중첩 할 수 있습니다 .

  • <a>

  • <audio>( controls 속성이있는 경우)

  • <button>

  • <details>

  • <embed>

  • <iframe>

  • <img>( usemap 속성이있는 경우)

  • <input>( type 속성이 숨겨진 상태 가 아닌 경우 )

  • <keygen>

  • <label>

  • <menu>( type 속성이 툴바 상태 인 경우)

  • <object>( usemap 속성이있는 경우)

  • <select>

  • <textarea>

  • <video>( controls 속성이있는 경우)


어딘가에 연결되는 버튼을 사용하려는 경우 다음과 <form>같이 해당 버튼을 태그 안에 넣습니다 .

<form style="display: inline" action="http://example.com/" method="get">
  <button>Visit Website</button>
</form>

그러나 <button>태그가 CSS를 사용하여 스타일이 지정되고 시스템 위젯처럼 보이지 않는 경우 ... 선호하는대로 <a>태그에 대한 새 클래스를 만들고 같은 방식으로 스타일을 지정하십시오.


1
@Andrew Moore-다른 방법이 있습니까? 나는 이것이 문제를 일으킨다 고 믿고 그것이 <a> 링크 안에 있도록 변경되었다. 문제가 무엇인지 확실하지 않지만 페이지에 이와 같은 버튼이 많이 있습니다. <a> 링크를 사용하여 SEO를 개선하고자했기 때문일 수 있습니다.
Marie

2
@Marie : 버튼처럼 보이도록 링크의 스타일을 지정하는 것 외에 다른 방법은 없습니다.
Andrew Moore

3
브라우저는 앞뒤로 탐색 할 때 게시 양식을 다시 보내도록 요청하기 때문에 user = "not"은 사용하지 않는 것이 좋습니다. GET이 양식의 기본 메소드이므로 간결성을 위해 method = "get"을 남겨 둘 수 있습니다.
Bijan

4
@AndrewMoore : 버튼처럼 보이도록 링크의 스타일을 지정하면 접근성과 같은 고유 한 문제가 발생합니다. 포커스가 있고 스페이스 바를 누르면 단추가 실행됩니다. 링크가 없습니다. ADA에 관심이 있거나 치료를 가장해야 할 경우 물릴 수 있습니다.
iconoclast

2
@jonaspas가 제안했듯이 <div>내부는 <a>HTML5에서 절대적으로 유효합니다 : validator.w3.org/nu/…
Socob

43

Bootstrap 3을 사용하는 경우 이것은 잘 작동합니다

<a href="#" class="btn btn-primary btn-lg active" role="button">Primary link</a>
<a href="#" class="btn btn-default btn-lg active" role="button">Link</a>

안에 둥근 버튼 글꼴 멋진 아이콘과 함께 작동하지 않습니다
툴킷

class = 'btn btn-default'를 사용하면 다른 버튼 (MVC6)과 일치합니다.
crokusek

12

아니.

다음 솔루션은 JavaScript를 사용합니다.

<button type="button" onclick="location.href='http://www.stackoverflow.com'">ABC</button>

버튼을와 <form>함께 기존 안에 배치 method="post"하려면 버튼에 속성이 있는지 확인하십시오. type="button"그렇지 않으면 버튼이 POST 작업을 제출합니다. 이런 식 <form>으로 GET과 POST 조작 버튼이 혼합 된 것을 가질 수 있습니다 .


onclick은 파일 프로토콜에서 작동하지 않으므로 예를 들어 정적 프리젠 테이션에는 유용하지 않습니다. 이 경우에는 양식 행동의 유능함이 갈 길입니다.
netalex 2016 년

1
버튼이 페이지에 연결되어 있으면 버튼이 아니라 앵커입니다
Capsule

@Capsule 요즘에는 너무 일반적입니다. 존재하는 모든 웹 개발 프레임 워크에 대한 랜딩 페이지를 살펴보십시오. 나는 순수한 주장에 대해 모두 찬성하지만, 큰 사각형 버튼이 진정한 폼 액션을 시작하는 대신 페이지에 링크하더라도 링크보다 더 좋고 분명한 여유가 있음을 인정해야합니다.
TheDudeAbides

JS가 비활성화 된 경우 지금은 백업 과 같은 <a>내부를 가지고 있으며 6 개월 후에는 분명히 그것을 인정한 것이 당황 스럽습니다. <button>href
TheDudeAbides

@TheDudeAbides 나는 그것의 측면에 대해 이야기하고 있지 않다, 나는 당신이 사용하고 싶은 마크 업을 취하고있다. 이 링크를 큰 직사각형 버튼으로 스타일링하지 못하는 이유는 무엇입니까? 사이트에서 스타일을 전혀 사용하지 않는 한? 우리가 언급 한 답변 위의 대답은 완벽한 예입니다. 버튼으로 스타일이 지정된 앵커 태그입니다.
캡슐

10

방금 동일한 문제로 뛰어 들었고 'button'태그를 'span'태그로 대체하여 해결했습니다. 제 경우에는 부트 스트랩을 사용하고 있습니다. 이것은 다음과 같습니다

<a href="#register"> 
    <span class="btn btn-default btn-lg">
        Subscribe
    </span>
</a> 

4
부트 스트랩으로 스팬이 전혀 필요하지 않습니다. 전체 수업 부분을 <a>로 옮기면 링크 버튼이 나타납니다. 예 : <a href="#register" class="btn btn-default btn-lg"> 구독 </a>
Ryan Buddicom

원래 포스터 는 앵커 태그 안에 버튼을 넣을 수 있는지 물었습니다 . 승인 된 답변에 따르면 <3>에 <a>를 배치하는 것은 W3C 사양에 위배됩니다. 이것이 golbeltri가 <span> 스타일을 버튼으로 보여주는 이유라고 생각합니다.
StackOverflowUser

이 안에는 <a>링크의 일부이지만 버튼처럼 스타일이 지정되지 않은 다른 내용이있는 경우 이치에 맞습니다. 예를 들어 div(이미지, 배경, 텍스트 등) 내의 모든 클릭 은 링크로 연결되지만 span버튼처럼 보입니다.
요시야

7

그것이 유효하다면 정말 이상 할 것이고, 나는 그것이 유효하지 않을 것으로 기대합니다. 클릭 가능한 요소가 다른 클릭 가능한 요소 내에 있다는 것은 무엇을 의미합니까? 버튼 또는 링크 중 어느 것입니까?


고마워 스티브 이것은 팀원이 나에게 제안한 방법이었습니다. 방법이 작동합니다. 내가 할 수있는 더 좋은 방법이 있습니까?
Marie

1
@Marie 링크를 버튼처럼 보이게하려면 CSS 스타일을 사용하여 쉽게 보이게 할 수 있습니다. 다음과 비슷한 테두리 스타일을 추가하십시오 border: 2px outset. 모서리를 약간 둥글게하려면 테두리 반경 을 사용할 수도 있습니다 . 간단한 <img>태그도 잘 작동합니다.
쓸모없는 코드

3

다른 옵션은 버튼의 onclick 속성을 사용하는 것입니다.

<button disabled="disabled" onClick="location.href='www.stackoverflow.com'" >ABC</button>

그러나 이것은 작동하지만 사용자는 링크가 요소 내부에있는 것처럼 링크 위에 표시되지 않습니다.


2

요즘 사양에서 허용하지 않더라도 <a href...><button ...></a>태그에 FWIW ...


2
<button>안에 포함되지 않은 경우 작동 합니다 <form>. 그러나 버튼이 포함되는 즉시 (예 :) 버튼의 클릭 핸들러를 비활성화 하지 않으면<form>...<a><button> 작동이 중지됩니다 . 이 시나리오를 피하기에 충분한주기입니다.
감독

0

버튼에 클래스를 추가하고 일부 스크립트를 리디렉션 할 수 있습니다.

나는 이것을 이렇게한다 :

<button class='buttonClass'>button name</button>

<script>
$(".buttonClass').click(function(){
window.location.href = "http://stackoverflow.com";
});
</script>

0

왜 .. 당신은 버튼에 그림을 포함 할 수 있습니다

<FORM method = "POST" action = "https://stackoverflow.com"> 
    <button type="submit" name="Submit">
        <img src="img/Att_hack.png" alt="Text">
    </button>
</FORM> 

2
문제는 OP가 요청한대로 <a> </a>가 경계 내에있을 수있는 것에 약간 제한적이라는 것입니다. 수락 된 질문을 참조하십시오.
토마스


-1

HTML5에서 링크에 버튼 요소를 포함시키는 것은 불법입니다.

기본 및 : active (pressed) 상태에서 CSS를 사용하는 것이 좋습니다.

body{background-color:#F0F0F0} /* JUST TO MAKE THE BORDER STAND OUT */
a.Button{padding:.1em .4em;color:#0000D0;background-color:#E0E0E0;font:normal 80% sans-serif;font-weight:700;border:2px #606060 solid;text-decoration:none}
a.Button:not(:active){border-left-color:#FFFFFF;border-top-color:#FFFFFF}
a.Button:active{border-right-color:#FFFFFF;border-bottom-color:#FFFFFF}
<p><a class="Button" href="www.stackoverflow.com">Click me<a>


-2

귀하의 자바 스크립트 솔루션을 시도하지만 작업을 위해 e.preventDefault();자바 스크립트 함수에 삽입해야 합니다.

<!-- Add your HTML !-->
<a id="id_primary_link" href="my_primary_link.php">
  <button onclick="my_trick_function('my_secondary_link.php')">
</a>


<!-- Add your javascript function !-->
<script>
function my_trick_function(secondary_link){
    $('#id_primary_link').click(function(e) {
        e.preventDefault();
        window.location.replace(secondary_link);
    });
}   
</script>   

-3

버튼 안에 formaction 속성 사용

추신! 버튼 type = "submit"인 경우에만 작동합니다.

<button type="submit" formaction="www.youraddress.com">Submit</button>

또한 버튼을 <form> 태그에 넣어야합니다.
denodster

-3

<a href="index.html">
  <button type="button">Submit</button>
</a>
또는 버튼에서 Java 스크립트를 다음과 같이 사용할 수 있습니다.

<button type="submit" onclick="myFunction()">Submit</button>
<script>
  function myFunction() {
      var w = window.open(file:///E:/Aditya%20panchal/index.html);
    }
</script>


일부 브라우저 만 허용하면 좋은 생각은 아닙니다.
denodster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.