href 속성없이 <a> (앵커 태그)를 사용할 수 있습니까?


152

Twitter Bootstrap을 사용하여 사이트를 구축 해 왔으며 많은 기능은 <a>Javascript를 실행하더라도을 감싸는 것에 달려 있습니다. href="#"Bootstrap의 설명서에서 권장 하는 전술에 문제가 있었 으므로 다른 해결책을 찾으려고했습니다.

그러나 href속성을 모두 제거하려고 했습니다. 나는을 사용 <a class='bunch of classes' data-whatever='data'>하고 Javascript가 나머지를 처리하도록했습니다. 그리고 작동합니다.

그러나 내가 이것을해서는 안된다는 말이 있습니다. 권리? 기술적 <a>으로 무언가에 대한 링크라고 생각되지만 이것이 왜 문제 인지 는 확실하지 않습니다 . 아니면?


답변:


245

<a>nchor 요소 또는 일부 콘텐츠에서 단순히 앵커입니다. 원래 HTML 사양에서는 명명 된 앵커 ( <a name="foo">) 및 연결된 앵커 ( <a href="#foo">)에 허용되었습니다 .

조각 식별자가 [id]속성 을 지정하는 데 사용되기 때문에 명명 된 앵커 형식은 덜 일반적으로 사용됩니다 (역 호환성을 위해 여전히 [name]속성을 지정할 수 있음 ). 없는 요소 속성은 여전히 유효합니다 .<a>[href]

의미 및 스타일과 관련하여 <a>요소가 속성 :link이 없으면 링크 ( ) 가 아닙니다 [href]. 이것의 부작용은 기본적으로 탭이없는 <a>요소 [href]는 탭 순서에 있지 않다는 것입니다.

실제 질문은 <a>요소 자체 만의 적절한 표현 인지 여부 <button>입니다. 의미 수준에서 a link와 a 사이에는 뚜렷한 차이 가 button있습니다.

버튼은 클릭하면 동작이 발생하는 것입니다.

링크는 현재 문서에서 탐색을 변경하는 버튼입니다. 발생하는 탐색은 조각 식별자 ( #foo) 의 경우 문서 내에서 이동하거나 URL ( /bar) 의 경우 새 문서로 이동할 수 있습니다.

링크는 특수한 유형의 버튼이므로 대체 기능을 수행하기 위해 작업을 재정의하는 경우가 많습니다. 의미 적으로 정확하지는 않지만 앵커를 버튼으로 계속 사용하는 것은 일관성 관점에서 괜찮습니다.

<a>요소 (또는 <span>, 또는 <div>)를 버튼 으로 사용하는 의미 및 액세스 가능성에 대해 우려하는 경우 다음 속성을 추가해야합니다.

<a role="button" tabindex="0" ...>...</a>

버튼의 역할은 특정 요소가 기본이되는 요소가 있었다 무엇이든 의미에 대한 재정의와 같은 버튼으로 처리되고 있음을 사용자에게 알려줍니다.

for <span><div>elements 의 경우 이벤트에 대한 JavaScript 키 리스너를 추가 Space하거나 Enter트리거 할 수 있습니다 click. <a href><button>요소는 기본적으로이 작업을 수행하지만, 비 버튼 요소하지 않습니다. 때로는 click트리거를 다른 키 에 바인딩하는 것이 더 합리적 입니다. 예를 들어, 웹앱의 "도움말"버튼이에 바인딩 될 수 있습니다 F1.


1
@ Zacqary [role="button"]는 구체적인 작업을 수행하지 않지만 클릭 이벤트를 수신해야하지만 JS 버튼을 만들기 위해 어쨌든 그렇게해야합니다. 화면 판독기가 원래 의미 론적 값이 아닌 버튼으로 요소를 나타내는 것을 알 수 있도록 보조 탐색 (일명 화면 판독기)에 사용됩니다. 추가 [tabindex]하면 요소를 탭 순서에 추가 합니다. 특별한 상황에서는 실제로 탭 순서로 탐색 가능한 버튼을 원하지 않거나 필요로하지 않을 수 있으므로 선택적 속성입니다. 이미 버튼 인 요소는 [role="button"]중복되므로 필요하지 않습니다 .
zzzzBov

href와 이름이없는 앵커 태그를 갖는 것이 유효한 HTML입니까? 우리 앱에는 삭제 링크가 있지만 (따라서 href 속성은 없지만) 여전히 사용자에게 표시됩니다.
Joshua Muheim

1
@JoshuaMuheim, 나는 당신이 신경 쓰지 않기를 희망하지만, 나는 당신의 질문을 별도의 독립형 질문으로 게시했습니다 .
zzzzBov

자바 스크립트 작업에 '버튼'을 만들기 위해 이것을 사용하는 경우 href 속성을 완전히 제거하면 Chrome (및 다른 브라우저)이 마우스 오버시 커서 변경을 중지시킬 수 있습니다. 분명히 이것은 CSS로 다시 쉽게 추가 할 수 있지만 머리 만 듭니다.
Mir

@Mir을 사용하지 않으려면 [href]아마도 <span>버튼에 a 를 사용해야 합니다.
zzzzBov

45

나는 당신이 당신의 대답을 찾을 수 있다고 생각합니다 : href 속성이없는 앵커 태그는 안전합니까?

또한 href로 링크 작업을 원하지 않으면 다음과 같이 사용할 수 있습니다.

<a href="javascript:void(0);">something</a>

3
실제로되어야합니다javascript:undefined
rybo111

2
@ rybo111 당신 말이 맞지만 여전히 void (0)를 선호합니다. 기본적으로 더 좋아 보이기 때문입니다. 나는 고객이 "정의되지 않은"것으로 보는 것을 좋아하지 않는다 ;-)
Alex

9
<a href="javascript:;">text</a>?
diynevala

javascript:;IE6에서 롤오버 효과 및 gif 애니메이션과 같은 것을 깨는 데 사용됩니다. 링크 작업이없는 경우와 같은 전용 HTML 요소가 button있습니다. 동시에 hrefJS가 실패하면 AJAX 링크와 같은 것들이 폴백 조치에 s를 사용할 수 있습니다 .
Ilya Streltsyn

14

예,href 속성 없이 앵커 태그를 사용하는 것이 유효 합니다.

a요소에 href속성 이없는 경우 요소는 요소의 내용만으로 구성되어 있고 관련이있는 경우 링크가 배치 된 위치에 대한 자리 표시자를 나타냅니다.

예, class다른 속성을 사용할 수 있습니다 . 하지만 당신은 사용할 수 없습니다 target, download, rel, hreflang,와type .

target, download, rel, hreflang, 및 typeHREF 특성이 존재하지 않는 경우, 속성은 생략한다.

" 해야합니까? "부분에 대해서는 첫 번째 인용을 참조하십시오. " 관련된 경우 링크가 배치 된 위치 " 그래서 나는 " 자바 스크립트가없는 경우이 태그를 링크로 사용 하시겠습니까? "라고 . 대답이 '예'이면 ' 그렇지<a> 않으면'없이 사용해야 합니다 href. 그렇지 않다면, 나는 여전히 엣지 시맨틱보다 생산성이 더 중요하기 때문에 여전히 그것을 사용할 것입니다.

또한, 당신은해야 조심 다른위한 행동스타일 (예를 들어 어떤 밑줄, 아니 포인터 커서가 아니라:link ).

출처 : W3C HTML5 권장 사항


"가장자리 시맨틱"에 관한 것이 아니라 접근성에 관한 것이 아닙니다. 장애가있는 사람들이 웹 사이트의 내용을 사용하고 이해할 수 있도록합니다.
neiya

3

유효합니다. 예를 들어,이를 사용하여 모달 (또는 이와 유사한 속성 data-toggle및 응답)을 표시 할 수 있습니다 data-target.

다음과 같은 것 :

<a role="button" data-toggle="modal" data-target=".bs-example-modal-sm" aria-hidden="true"><i class="fa fa-phone"></i></a>

여기에서는 글꼴이 a아닌 아이콘을 사용하여 button모달을 표시하기 위해 a 대신 태그 로 사용하는 것이 좋습니다 . 또한 설정 role="button"하면 포인터가 동작 유형으로 변경됩니다. 없이 하나 href또는 role="button"커서 포인터가 변경되지 않습니다.


2
이 경우 버튼을 사용해야합니다. 의미 적 관점과 접근성 관점에서 더 적합합니다. 앵커는 조치를 취하지 말고 어딘가에 데려다 줄 것입니다. 또한 왜 전체 앵커를 숨기고 aria-hidden있습니까? 아이콘 일 수 있지만 화면 판독기 사용자는 경험이 줄어들지 않아야합니다.
isherwood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.