전체 글 보기

[HTML] tabindex 속성 알아보기

profile icon

많은 개발자들이 모르거나 간과하기 쉬운 HTML 속성이 있다면, 그것은 바로 tabindex다.

#HTML
마지막 수정일:

tabindex는 HTML 요소가 키보드 포커스를 받을 수 있는지, 그리고 받는다면 어떤 순서로 받을지를 제어하는 전역 속성(Global Attribute)이다. 사용자가 키보드의 Tab 키 혹은 Shift + Tab 키를 눌러 웹 페이지 내의 요소들(링크, 버튼, 입력 필드 등) 사이를 이동할 때, 이 tabindex 속성이 그 순서와 동작 방식을 결정한다.

tabindex 속성은 정수 값을 받으며, 그 값에 따라 완전히 다른 동작을 하게 된다.

요소를 키보드로 탐색할 수 있게 한다. 대화형 콘텐츠 (a, button,input ,textarea 등...) 에서는 따로 지정하지 않아도 기본 값으로 0을 가진다. 그러나 비 대화형 콘텐츠는 기본 값으로 -1을 가지기 때문에 키보드를 통해 탐색하 고 싶을 경우 tabindex=0과 같이 0 이상의 값을 줘야 한다.

주로 기본적으로 포커스를 받지 않는 컨테이너 요소를 키보드로 접근 가능하게 만들 때 사용한다.

html
<div tabindex="0" role="button">div로 만들어진 버튼!</div>
저를 한 번 클릭하고 Tab 키를 눌러 테스트 해보세요!
저는 div 태그 입니다. 비 대화형 콘텐츠라서 Focus 되지 않아요.

요소를 키보드로 탐색에서 제외 시킨다. 비 대화형 콘텐츠 에서는 따로 지정하지 않아도 기본 값으로 -1을 가진다. Tab 키를 통해서는 focus 되지 않지만. 프로그래밍 방식으로는 가능하다.

html
<div id="myModalContent" tabindex="-1">모달 내용...</div>
<script>
  document.getElementById('myModalContent').focus();
</script>
저를 한 번 클릭하고 Tab 키를 눌러 테스트 해보세요!
저는 div 태그 입니다. 비 대화형 콘텐츠라서 Focus 되지 않아요.

요소에 명시적인 탭 순서를 부여한다. 1부터 시작하여 숫자가 작은 요소부터 순서대로 포커스를 받게 된다. 같은 숫자를 가진 요소들은 HTML 소스 코드 순서대로 포커스를 받는다.

Warning

안티패턴 으로 간주됨

양수 tabindex는 논리적인 문서 구조와 다르게 포커스 순서를 강제하여 사용자(특히 키보드 및 스크린 리더 사용자)에게 혼란을 주고 웹 접근성을 해칠 수 있다. 또한 유지보수도 어려워질 수 있다.

tabindex는 얼핏 보면 그냥 쓰는게 좋아 보이는 것 같지만, 신중하게 사용해야 하는 속성이다.

tabindex를 잘 활용하면 웹사이트 접근성을 높이고 사용자 경험을 개선할 수 있다. 하지만 적절히 사용하지 않으면 오히려 혼란을 줄 수 있으니, 기본 동작을 잘 이해하고 신중하게 사용하도록 하자.

요약 하자면

  1. 가능한 한 자연스러운 HTML 흐름을 따르자
  2. 양수 tabindex 값은 피하자
  3. tabindex="0"는 상호작용 요소에만 사용하자
  4. tabindex="-1"는 프로그래밍 방식 포커스가 필요한 요소에만 사용하자
  5. ARIA 속성과 함께 사용하여 최대한의 접근성을 확보하자
전체 글 보기