DOM 순서가 중요

기본 DOM 순서의 중요성

데이브 개시
데이브 개시
메긴 키어니
메긴 키어니

네이티브 요소는 DOM에서의 위치에 따라 탭 순서에 자동으로 삽입되므로 네이티브 요소를 사용하여 작업하면 포커스 동작을 알 수 있습니다.

예를 들어 DOM에 차례대로 3개의 버튼 요소가 있을 수 있습니다. Tab를 누르면 각 버튼으로 포커스가 순서대로 이동합니다. 아래의 코드 블록을 클릭하여 포커스 탐색 시작점을 이동한 다음 Tab를 눌러 포커스를 버튼 간에 이동해 보세요.

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

하지만 CSS를 사용하면 DOM에서 한 가지 순서로 존재하지만 화면에서 다른 순서로 나타날 수 있습니다. 예를 들어 float와 같은 CSS 속성을 사용하여 버튼 하나를 오른쪽으로 이동하면 버튼이 화면에서 다른 순서로 표시됩니다. 그러나 DOM에서는 순서가 동일하게 유지되므로 탭 순서도 그대로 유지됩니다. 사용자가 페이지를 탭할 때 버튼의 포커스가 직관적이지 않은 순서로 이동합니다. 아래의 코드 블록을 클릭하여 포커스 탐색 시작점을 이동한 다음 Tab를 눌러 포커스를 버튼 간에 이동해 보세요.

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

CSS를 사용하여 화면에서 요소의 시각적 위치를 변경할 때는 주의해야 합니다. 이로 인해 탭 순서가 무작위처럼 표시되어 키보드를 사용하는 사용자에게 혼란을 줄 수 있습니다. 이러한 이유로 웹 AIM 체크리스트에는 섹션 1.3.2의 코드 순서에 따라 읽기 및 탐색 순서가 논리적이고 직관적이어야 한다고 명시되어 있습니다.

실수로 탭 순서를 잘못 채우지 않도록 페이지를 자주 탭하는 것이 좋습니다. 큰 노력이 필요 없는 습관을 채택하는 것이 좋습니다

오프스크린 콘텐츠

반응형 측면 탐색과 같이 현재 표시되지 않지만 여전히 DOM에 있어야 하는 콘텐츠가 있다면 어떻게 해야 할까요? 이러한 요소가 화면 밖에 있을 때 포커스를 받는 경우 사용자가 페이지를 탭할 때 포커스가 사라졌다가 다시 표시되는 것처럼 보일 수 있으며 이는 분명히 바람직하지 않은 결과입니다. 패널이 화면 밖에 있을 때는 포커스를 받지 않고 사용자가 상호작용할 수 있을 때만 포커스를 받을 수 있도록 하는 것이 이상적입니다.

화면을 벗어난 슬라이드 인 패널이 포커스를 앗아갈 수 있습니다.

포커스가 어디로 사라졌는지 알아내기 위해 약간의 조사 작업을 해야 할 때가 있습니다. Console에서 document.activeElement를 사용하여 현재 포커스가 맞춰진 요소를 확인할 수 있습니다.

포커스가 맞춰지는 화면 밖 요소를 파악했다면 display: none 또는 visibility: hidden로 설정한 다음 display: block 또는 visibility: visible로 다시 설정한 후 사용자에게 표시할 수 있습니다.

아무것도 표시하지 않도록 설정된 슬라이드 인 패널입니다.
블록을 표시하도록 설정된 슬라이드 인 패널입니다.

일반적으로 개발자는 게시 전에 사이트를 탭 이동하면서 탭 순서가 사라지지 않거나 논리적 순서를 벗어나지 않는지 확인하는 것이 좋습니다. 이러한 경우 display: none 또는 visibility: hidden를 사용하여 화면 밖 콘텐츠를 적절하게 숨기거나 DOM에서 요소의 물리적 위치를 다시 정렬하여 논리적 순서로 되어 있는지 확인해야 합니다.