반응형
<button>
과 <a>
의 사용 목적과 HTML 표준에 따라 둘 중 어느 쪽을 감싸야 하는지가 달라진다. 각 요소의 올바른 사용 사례와 일반적인 관례를 비교해보겠다.
1. <a>
로 <button>
을 감싸는 경우
<a href="/some-page">
<button>Click Me</button>
</a>
- 목적:
- 네비게이션을 트리거하면서 버튼 스타일을 적용하려는 경우.
<a>
의 기본 역할은 다른 페이지나 URL로 이동하는 것.
- 문제점:
- HTML 표준 위반.
<a>
요소 내부에는 인터랙티브 요소(예:<button>
)를 포함하면 안된다. - 브라우저 동작이 비정상적일 수 있고, 접근성(A11y) 도구에서도 문제를 일으킬 수 있다.
- HTML 표준 위반.
2. <button>
으로 <a>
를 감싸는 경우
<button>
<a href="/some-page">Click Me</a>
</button>
- 목적:
- 버튼으로 보이는 요소가 클릭되었을 때 링크로 이동하려는 경우.
- 문제점:
- HTML 표준 위반입니다.
<button>
내부에는href
속성이 동작하지 않으므로<a>
의 고유 기능이 사라질 수 있다. - CSS나 JavaScript로 해결 가능하지만, 비효율적이고 접근성을 해친다.
- HTML 표준 위반입니다.
3. 올바른 대안 (권장)
단순히 링크 기능을 원할 때:
스타일이 버튼처럼 보이는 <a>
를 사용하고 CSS로 버튼처럼 꾸민다.
<a href="/some-page" class="button">Click Me</a>
JavaScript로 동작을 처리할 때:
버튼이 동작을 트리거하고 별도로 링크 이동이 필요하지 않다면 <button>
만 사용한다.
<button onClick={() => someAction()}>Click Me</button>
접근성과 HTML 표준 관점에서의 정리
<a>
는 네비게이션(페이지 이동) 역할을 할 때 사용한다.<button>
은 작업 수행(JavaScript 실행)을 트리거할 때 사용한다.- 네비게이션과 작업 수행을 둘 다 처리하려면 JavaScript로 이벤트를 처리하거나
<a>
를 버튼처럼 꾸미는 것이 더 적합하다.
실무에서의 일반적인 선택
- 버튼처럼 보이는 링크가 필요한 경우:
<a>
에 버튼 스타일을 추가. - 작업만 수행하거나 SPA 내에서 라우팅할 경우:
<button>
을 사용하여 JavaScript로 처리.
따라서 "감싸는 것보다는 각각의 용도에 맞게 사용하는 것"이 최선!
반응형
'Frontend > HTML CSS' 카테고리의 다른 글
[CSS] 부모 height를 자식요소가 상속받지 못할때 해결방법(flex 이용) (0) | 2025.03.06 |
---|---|
[TailwindCSS] className style에 !important추가하기 (0) | 2025.01.07 |
[CSS] CSS 선택자: a로 시작해서 b로 끝나는 클래스 선택하기 (1) | 2024.01.05 |
[font] pretendard variable 설치시 프로젝트에 폰트굵기 적용안됨문제 (0) | 2023.09.13 |
@font-face 작성하기(feat. woff, woff2 faild to decode downloaded font 에러) (0) | 2023.04.13 |