📝

2. 운용의 용이성

 

2. 운용의 용이성

: 제공되는 모든 웹콘텐츠 기능은 누구나 운용할 수 있어야 한다.

2.1. 입력장치 접근성

2.1.1 [검사항목 8] 키보드 사용 보장

: 모든 기능은 키보드만으로도 사용할 수 있어야 한다.
혹시 가위의 손잡이는 왜 이렇게 생겼는지 생각해보신 적이 있으신가요?
한 쪽이 길고 한 쪽이 짧은 가위 손잡이한 쪽이 길고 한 쪽이 짧은 가위 손잡이
한 쪽이 길고 한 쪽이 짧은 가위 손잡이
위 가위는 일반적인 오른손잡이 사용자를 위해 디자인된 가위입니다. 네 손가락과 엄지손가락을 넣는 곳이 정해져있기 때문에 왼손잡이가 이 가위를 사용하게 되면 가위 날이 반대로 바뀌어 가위가 잘 안 드는 불편함을 느끼게 됩니다. 하지만 왼손잡이가 아니라면 불편함을 느끼시지 못하셨을 것입니다. 이처럼 우리는 익숙하게 사용하는 도구에 대해 다른 관점에서 생각해보는 것을 간과 할 수 있습니다.
우리가 흔히 컴퓨터의 입력장치인 마우스를 당연한 도구로 생각하는 것과 비슷한 맥락입니다. 하지만 마우스의 조작은 생각보다 섬세한 컨트롤을 요구하고 사람에 따라서는 마우스의 사용 자체가 불가능한 경우도 존재합니다. 즉, 개발자로서 웹사이트를 제작할 때 마우스뿐 아니라 키보드를 이용해 페이지를 조작하는 사용자를 고려하여 입력장치의 접근성을 넓혀줘야 합니다. 마우스로 할 수 있는 웹사이트의 모든 기능과 접근은 마찬가지로 키보드를 활용해 컨트롤이 가능해야 하며, 원치 않는 방향으로 컨트롤되지 않도록 해야 합니다.
기본적으로 키보드의 이동은 Tab으로 이루어지며 이전 단계로 돌아가기는 Shift + Tab을, 링크 이동과 같은 상호작용은 Enter를 사용합니다.
이제 아래와 같은 상황들에 경우 웹개발자의 입장에서 어떤 부분들을 고려해야 하는지 살펴보겠습니다.
 
  1. 마우스 오버로 확인하는 콘텐츠
마우스를 올렸을 때 노출되도록 만들어지는 콘텐츠들이 몇 가지가 있습니다. 이런 경우 키보드로 해당 콘텐츠에 접근했을 때 동일한 인터렉션을 제공해 주어야 합니다. 이 부분은 JavaScript의 focus 이벤트를 활용해 구현해볼 수 있습니다.
contents.addEventListener('focus', function(){ console.log("focus되었을 때 contents에 동작되기를 기대하는 함수"); })
  • 드롭 다운 메뉴
드롭 다운 메뉴란 사용자의 상호작용을 통해 하위 메뉴가 펼쳐지는 형태의 메뉴를 이야기합니다. 마우스 오버 시 하위 메뉴가 나오는 콘텐츠라면 키보드로 접근했을 때에도 하위 메뉴가 펼쳐지도록 구현해야 합니다.
예시) 드롭 다운 메뉴 - 마우스를 올렸을 때 나타나는 하위 메뉴를 가진다.예시) 드롭 다운 메뉴 - 마우스를 올렸을 때 나타나는 하위 메뉴를 가진다.
예시) 드롭 다운 메뉴 - 마우스를 올렸을 때 나타나는 하위 메뉴를 가진다.
 
  • 롤링 콘텐츠
롤링 콘텐츠는 전체 항목이 접힌 상태로 리스트가 회전하는 듯 순차적으로 보여지는 콘텐츠를 의미합니다. 마찬가지로 마우스를 올렸을 때 전체 목록들이 보이게 구현되어 있다면 키보드의 접근으로도 동일한 인터렉션을 제공해 주어야 합니다.
예시) 롤링 콘텐츠 - 마우스를 올렸을 때 전체 내용을 확인할 수 있다.예시) 롤링 콘텐츠 - 마우스를 올렸을 때 전체 내용을 확인할 수 있다.
예시) 롤링 콘텐츠 - 마우스를 올렸을 때 전체 내용을 확인할 수 있다.
 
  • 레이어 툴팁 제공
툴팁이란 구성요소에 마우스를 올렸을 때 추가적인 레이어로 제공되는 부가정보로 이 역시 키보드가 접근했을 때에 동일하게 노출해 주어야 합니다.
예시) 툴팁 - 마우스 오버 시 ‘정보’ 레이어를 추가적으로 확인 가능하다.예시) 툴팁 - 마우스 오버 시 ‘정보’ 레이어를 추가적으로 확인 가능하다.
예시) 툴팁 - 마우스 오버 시 ‘정보’ 레이어를 추가적으로 확인 가능하다.
 
  1. 키보드 탭으로 접근 가능한 요소
키보드 tab으로 접근이 가능한 요소에는 <area>, <button>, <input>, <object>, <select>, <textarea>가 있습니다. 기본적으로 제공되는 HTML 요소들을 잘 활용하여 시멘틱하게 마크업 되어야 키보드 사용자들에게 보다 넓은 접근성을 제공할 수 있습니다.
  • 상호작용을 하는 콘텐츠
사용자와 상호작용을 하는 콘텐츠는 그 성격에 맞게 요소를 사용해야 합니다. 버튼의 기능을 한다면 <button> 요소를, 링크 이동을 해야 한다면 <a>요소를 반드시 활용하여 키보드가 접근할 수 있도록 구현해야 합니다.
<!-- 잘못된 예시 --> <!-- button 기능을 하는 콘텐츠에 div 요소를 사용, 키보드 접근 불가 --> <div id="button" onclick="button()">누르면 반응하는 버튼</div>
<!-- 올바른 예시 --> <!-- button 기능을 하는 콘텐츠에 button 요소를 사용, 키보드 접근 가능 --> <button type="submit">누르면 반응하는 버튼</button>
 
  • <a>요소를 사용한 링크 이동
페이지 이동을 위해 링크를 사용했다면 반드시 <a>요소 속성인 href를 이용하여 해당 링크를 명시해 주어야 키보드의 접근으로도 페이지 이동이 가능합니다.
<!-- 잘못된 예시 --> <a href="">바울랩 사이트 바로가기</a>
<!-- 올바른 예시 --> <a href="https://paullab.co.kr">바울랩 사이트 바로가기</a>
 
  1. 키보드 탐색이 특정 루프에 갇히는 경우
키보드로 웹 페이지를 탐색 시 특정 루프에 갇히거나 원치 않게 빠져나올 수 없는 상황이 생기지 않도록 구성해야 합니다.
  • 에디터 안에서의 탈출 단축키 제공
글을 작성하는 에디터 편집 영역 내에서 Tab은 들여쓰기 기능을 지원합니다. 이런 경우 키보드 사용자는 원하지 않게 에디터를 빠져나올 수 없는 상황을 마주할 수 있습니다. 그렇기 때문에 에디터 편집 영역을 탈출할 수 있는 단축키를 따로 제공해 주어야 합니다.
예시) Shift+Esc를 누르면 편집 영역을 벗어나 ‘입력창 크기 조절’로 초점이 이동한다. (출처 : 네이버 블로그 스마트 에디터 2.0)예시) Shift+Esc를 누르면 편집 영역을 벗어나 ‘입력창 크기 조절’로 초점이 이동한다. (출처 : 네이버 블로그 스마트 에디터 2.0)
예시) Shift+Esc를 누르면 편집 영역을 벗어나 ‘입력창 크기 조절’로 초점이 이동한다. (출처 : 네이버 블로그 스마트 에디터 2.0)
 

2.1.2 [검사항목 9] 초점 이동

: 키보드에 의한 초점은 논리적으로 이동해야 하며 시각적으로 구별할 수 있어야 한다.
키보드로 웹사이트에 접근할 때, 초점이 이동하는 순서는 사용자가 이동하기를 기대하는 순서와 내용 상의 논리적 순서를 고려해야 합니다. 이는 단순히 물리적인 이유로 키보드를 조작하는 사용자뿐 아니라, 시각적으로 웹페이지를 읽고 접근하기 어려운 스크린 리더 사용자들을 위한 것이기도 합니다. 아래부터 이 지침과 관련하여 고려해야 할 점들에 대해 알아보겠습니다.
 
  1. 논리적인 순서 제공
  • 기능적으로 논리적인 순서에 맞게 마크업
로그인 창을 예시로 보겠습니다. 사용자가 키보드로 로그인 모달에 접근했을 경우, ‘아이디 입력 - 비밀번호 입력 - 로그인 기억하기 체크박스 - 로그인 버튼’ 순으로 초점이 이동하기를 기대할 것입니다. ‘로그인 버튼’은 사용자가 할 수 있는 모든 입력을 완료한 뒤 제출되어야 하기 때문입니다. 그런데 만약 이런 상황에서 마크업 순서가 하단의 ‘잘못된 예시’처럼 되어있다면, 사용자는 ‘로그인 기억하기 체크박스’에 도달하기 위해 ‘로그인 버튼’을 지나 ‘로그인 기억하기 체크박스’를 입력한 뒤 다시 ‘로그인 버튼’으로 되돌아가야 하는 상황을 마주하게 됩니다. 이처럼 마크업 순서는 기능의 논리적인 순서를 고려하여 설계되어야 합니다.
예시) 로그인 모달창 - 논리적 순서가 잘못된 경우예시) 로그인 모달창 - 논리적 순서가 잘못된 경우
예시) 로그인 모달창 - 논리적 순서가 잘못된 경우
예시) 로그인 모달창 - 논리적 순서가 적정한 경우예시) 로그인 모달창 - 논리적 순서가 적정한 경우
예시) 로그인 모달창 - 논리적 순서가 적정한 경우
<article> <h2>반갑습니다 :) 로그인해주세요!</h2> <input type="text" placeholder="아이디" required> <input type="password" placeholder="비밀번호" required> <!-- '로그인 기억하기'가 '로그인 버튼'보다 먼저 작성되어야합니다. --> <input type="checkbox" id="login-remember"> <label for="login-remember">로그인 기억하기</label> <button type="submit">로그인</button> </article>
 
 
  • 시각적 순서가 아닌 논리적인 순서에 맞게 마크업
디자인된 레이아웃이 제공하는 시각적 순서보다 논리적인 순서에 따라 마크업 해주는 게 중요합니다. 스크린 리더는 마크업이 된 순서로 읽히기 때문입니다. 레이아웃적인 부분은 CSS에서 재 설정해줍니다. 아래 예시 이미지에서 레이아웃이 제공하는 순서대로 HTML에서 <img> 요소 다음 제목과 내용이 배치되면, 스크린 리더 사용자는 해당 <section>의 제목과 내용을 인지 못한 채 그림의 설명을 먼저 듣게 되므로 주의해야 합니다.
예시) 이미지와 제목이 함께 배치된 콘텐츠예시) 이미지와 제목이 함께 배치된 콘텐츠
예시) 이미지와 제목이 함께 배치된 콘텐츠
<!-- 잘못된 예시 --> <section> <img scr="./이미지.jpg" alt="h2에 해당하는 이미지"> <h2>제목</h2> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit</p> </section>
<!-- 올바른 예시 --> <!-- 논리 순서대로 마크업하고, 레이아웃은 CSS에서 설정 --> // HTML <section> <h2>제목</h2> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit</p> <img scr="./이미지.jpg" alt="h2에 해당하는 이미지"> </section> // CSS section{ display: flex; } section h2{ order:1; }
 
  1. 초점 제공
  • focus를 숨김 처리하지 않기
미관의 이유만으로 초점을 나타내주는 focus를 보이지 않게 처리해선 안 돼요. 초점을 숨기는 방법에는 JavaScript의 onfocus="this.blur()"와 CSS의 outline:none이 있습니다. 이 부분은 웹 접근성의 또 다른 지침 항목인 ‘콘텐츠의 선형 구조’ 항목 또한 어기게 됩니다.
 

2.1.3 [검사항목 10] 조작 가능

: 사용자 입력 및 컨트롤은 조작 가능하도록 제공되어야 한다.
컨트롤이 제공되는 콘텐츠들은 서로 지나치게 가깝거나, 너무 작은 크기로 제공될 경우 사용자에게 불편함을 줄 수 있습니다. 그렇기 때문에 크기와 여백을 배정하여 사용자의 조작에 방해가 되지 않게 해야 해요. marginpadding을 적절하게 사용해 줍니다.
 
  1. 컨트롤의 최소 대각선 길이
  • 컨트롤의 최소 대각선 길이는 적어도 6mm 이상이어야 합니다.
    • 예시) 컨트롤 크기 - 너무 작아 적합하지 않은 경우(왼쪽)와 크기가 적정한 경우(오른쪽)예시) 컨트롤 크기 - 너무 작아 적합하지 않은 경우(왼쪽)와 크기가 적정한 경우(오른쪽)
      예시) 컨트롤 크기 - 너무 작아 적합하지 않은 경우(왼쪽)와 크기가 적정한 경우(오른쪽)
       
  1. 컨트롤의 최소 여백
  • 사용자 입력, 링크, 버튼 등 컨트롤 요소는 테두리 안으로 여백을 적어도 1mm 이상 배치해야 합니다.
  • 근접한 컨트롤끼리 겹치거나 너무 가까워 선택하는 데에 불편함이 있지 않도록 간격을 만들어줘야 합니다.
예시) 컨트롤의 최소 여백 - 사용자 입력창의 여백과 컨트롤 간의 여백이 적합하지 않은 경우(왼쪽)과 사용자 입력창의 여백과 컨트롤 간의 여백이 적정한 경우(오른쪽)예시) 컨트롤의 최소 여백 - 사용자 입력창의 여백과 컨트롤 간의 여백이 적합하지 않은 경우(왼쪽)과 사용자 입력창의 여백과 컨트롤 간의 여백이 적정한 경우(오른쪽)
예시) 컨트롤의 최소 여백 - 사용자 입력창의 여백과 컨트롤 간의 여백이 적합하지 않은 경우(왼쪽)과 사용자 입력창의 여백과 컨트롤 간의 여백이 적정한 경우(오른쪽)
 
 

2.2. 충분한 시간 제공

2.2.1 [검사 항목 11] 응답시간 조절

: 시간제한이 있는 콘텐츠는 응답시간을 조절할 수 있어야 한다.
  1. 시간제한 콘텐츠 사용 배제
사람마다 콘텐츠를 이해하고 원하는 동작을 실행하는 데 걸리는 시간은 다를 수밖에 없습니다. 특히 화면을 보며 마우스로 콘텐츠를 탐색하는 것보다 스크린 리더의 음성 출력 결과를 듣거나 키보드를 이용하는 것이 더 오래 걸릴 수밖에 없겠죠. 때문에 이를 고려해 시간제한이 있는 콘텐츠를 가능한 한 제공하지 않는 게 좋습니다.
시간제한이 있는 콘텐츠의 예는 다음과 같아요.
  • 자동 갱신되도록 구성된 콘텐츠
  • 몇 초 후에 다른 페이지로 이동하도록 구성된 콘텐츠
  • 자동적으로 스크롤되는 콘텐츠
  • 짧은 기간 동안 나타났다 일정시간 후에 자동적으로 사라지는 대화상자(dialog box), 팝업 창, 레이어 팝업
  • 일정시간 동안 사용하지 않으면 웹 페이지에 대한 접근이 강제로 차단되거나 사용할 수 없게 되는 콘텐츠
 
  1. 예외 콘텐츠
하지만 시간제한이 꼭 필요한 경우에는 사용자에게 시간제한이 있다는 것을 미리 알려주고 종료되었을 경우에도 이를 알려주어야 합니다.
예시) 남은 이용 시간을 공지한 이미지예시) 남은 이용 시간을 공지한 이미지
예시) 남은 이용 시간을 공지한 이미지
위 예외 콘텐츠를 제외하고, 제한 시간을 연장할 수 있는 콘텐츠에서는 반응 시간을 조절할 수 있는 수단을 시간 안내와 함께 제공해야 해요. 반응 시간 조절 수단은 시간제한을 해제하거나 연장하는 방법으로 제작할 수 있어요. 시간 안내는 최소 20초 이상의 충분한 시간을 두고 사전에 알려주어야 합니다. 한국지능정보사회진흥원의 「2021 웹 접근성 실태조사」에서는 조사 가이드로 ‘시간제한에 대한 연장 방법을 10배 이상의 시간을 제공해야 한다’고 나와있어요. 자동 로그아웃 남은 시간이 30초라면, 30초 X 10 = 300초 즉, 5분 이상의 시간을 연장해 주어야 한다는 거죠. 보조기기 사용자도 시간제한을 인지, 수단 사용 완료하는 데까지 시간이 부족하지 않아야 한다는 것입니다.
예시) 남은 이용 시간을 공지하고 제한 시간을 연장할 수 있게 제공한 이미지예시) 남은 이용 시간을 공지하고 제한 시간을 연장할 수 있게 제공한 이미지
예시) 남은 이용 시간을 공지하고 제한 시간을 연장할 수 있게 제공한 이미지
 
위 지침을 따라 시간제한이 있는 콘텐츠 예를 좀 더 살펴볼게요. ‘자동 갱신되도록 구성된 콘텐츠’는 일정 시간이 지나면 페이지가 자동으로 새로고침 되는 경우를 뜻해요. 웹 페이지의 내용을 갱신하거나 세션이 장기간 방치되는 것을 막기 위함입니다. 그러나 이는 사용자가 읽고 있던 콘텐츠를 놓치게 되거나 정보 입력에 실패할 수 있어요. 역시 자동 갱신을 제공하지 않는 것이 제일 좋겠지만, 반드시 제공해야 한다면 이를 멈출 수 있는 기능을 만들어야 해요. 또한 기능을 사용자가 화면에서의 위치와 상관없이 보조기기로 바로 접근할 수 있게 해야 합니다.
 
다음으로는 ‘몇 초 후에 다른 페이지로 이동하도록 구성된 콘텐츠’를 볼게요. 이는 링크를 클릭했을 때 목적지로 바로 이동하지 않고 중간 페이지를 거쳤다가 원래 이동하려 했던 페이지로 전환되는 경우예요. 중간 페이지는 타 사이트 접속 안내, 보안 프로그램 설치 등의 내용이 담긴 페이지예요. 중간 페이지는 짧은 시간 보였다가 사라져 보조기기 사용자나 글을 읽는 속도가 느린 사용자는 중간 페이지에서 제공하는 콘텐츠를 인식하기 어려울 것입니다. 이때는 어떤 방법을 통해 접근성을 높일 수 있을까요? 중간 페이지를 시각 장애 환경에서도 바로 인식할 수 있도록 페이지 제목에 자동 전환 중임을 명시할 수 있겠습니다. 이때 웹 페이지 제목은 HTML <title> 요소를 사용합니다.
<title>네이버 호텔 중간 페이지...예약사이트 가격은 1박 기준으로 보여질 수 있습니다.</title>
페이지 자동 갱신을 멈출 수 있는 기능을 콘텐츠 시작 부분에서 제공하는 것도 방법일 것입니다. 이때 지침에 알맞게 최소 20초 이전, 사전에 자동 전환을 안내하며 기능을 화면에서의 위치와 상관없이 보조기기로 바로 접근할 수 있어야겠습니다.
예시) 자동 전환을 멈출 수 있는 네이버 호텔 중간 페이지 (출처:네이버 호텔)예시) 자동 전환을 멈출 수 있는 네이버 호텔 중간 페이지 (출처:네이버 호텔)
예시) 자동 전환을 멈출 수 있는 네이버 호텔 중간 페이지 (출처:네이버 호텔)
 

2.2.2 [검사 항목 12] 정지 기능 제공

: 자동으로 변경되는 콘텐츠는 움직임을 제어할 수 있어야 한다.
  1. 이동하거나 스크롤되는 콘텐츠 사용 배제
웹 페이지라는 하나의 정해진 공간 내에서 다양하고 많은 정보를 전달하기 위해 일정 시간이 지나면 콘텐츠가 갱신되는 경우가 많습니다. 미처 다 이해하기도 전에 콘텐츠가 전환되는 경우 등 사용자가 웹 콘텐츠를 이용하지 못하는 상황들이 생길 수 있겠습니다. 이를 해결하기 위해서 ‘정지 기능 제공’을 해야 해요. ‘정지 기능 제공’은 스크롤 및 자동 갱신되는 콘텐츠를 장애인 사용자가 이용할 수 있도록 일시 정지할 수 있는 수단을 제공해야 함을 뜻합니다. ‘응답시간 조절’ 검사항목과 동일하게 다음 두 가지의 방법이 있어요. 먼저 스크롤 및 자동 갱신되는 콘텐츠를 사용하지 않는 것입니다.
 
  1. 이동하거나 스크롤되는 콘텐츠에 컨트롤 제공
그렇지만 스크롤 및 자동 갱신되는 콘텐츠를 쓰고 싶거나 써야 하는 상황이 있을 수 있겠죠. 그래서 이런 상황에서는 해당 콘텐츠에 일시 정지, 이전과 이후 콘텐츠를 선택할 수 있는 컨트롤을 제공하는 방법이 있습니다. 이때 정지 컨트롤은 버튼이 없더라도 마우스 오버 시와 키보드 접근 시에 정지되도록 구현하면 기능을 제공한 것으로 인정되는데요. 대신 마우스와 키보드 초점을 받는 동안에 콘텐츠가 변경되지 않아야 합니다. 또한 이러한 컨트롤 없이, 갱신되는 콘텐츠의 전체 내용을 한 번에 볼 수 있는 대체수단을 제공한 경우에도 기능을 제공한 것으로 인정됩니다.
예시) 마우스와 키보드 포커스가 있을 때 전체 목록이 펼쳐지는 이미지예시) 마우스와 키보드 포커스가 있을 때 전체 목록이 펼쳐지는 이미지
예시) 마우스와 키보드 포커스가 있을 때 전체 목록이 펼쳐지는 이미지
예시) 자동 갱신되는 콘텐츠에 각각 접근할 수 있는 버튼과 이전, 다음, 정지 컨트롤 버튼을 제공한 이미지예시) 자동 갱신되는 콘텐츠에 각각 접근할 수 있는 버튼과 이전, 다음, 정지 컨트롤 버튼을 제공한 이미지
예시) 자동 갱신되는 콘텐츠에 각각 접근할 수 있는 버튼과 이전, 다음, 정지 컨트롤 버튼을 제공한 이미지
한국지능정보사회진흥원의 「2021 웹 접근성 실태조사」 자료에서 2021년 검사항목 준수율 중 ‘정지 기능 제공’ 준수율이 36.1%로 ‘적절한 대체 텍스트 제공’ 32.0%, ‘자막 제공’ 34.8% 과 함께 30%대의 낮은 준수율임을 알 수 있는데요. 이는 메인 페이지에서 움직이는 콘텐츠에 정지 기능을 제공하지 않거나 키보드 혹은 마우스로 제어하지 못하는 경우가 다수였습니다. 더욱 준수하기 위해서 노력해야할 검사항목임을 생각해볼 수 있어요.
 
위와 같이 검사항목 ‘응답시간 조절’, ‘정지 기능 제공’ 준수를 통해, 모든 웹 콘텐츠 사용자들이 시간제한이 있는 콘텐츠를 시간에 관계없이 편리하게 이용할 수 있습니다.
 
 

2.3. 광과민성 발작 예방

2.3.1 [검사 항목 13] 깜빡임과 번쩍임 사용 제한

: 초당 3~50회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다.
1997년 12월 16일 일본에서 <포켓몬스터 무인편(1997~2002)> 38화 ‘전뇌전사 폴리곤’ 편이 방영되었어요. 이 영상으로 인해 750명 정도의 어린아이들이 구토, 어지럼증 증세를 호소하였고, 심한 경우에는 경련을 일으키거나 의식상실, 호흡장애 등을 겪었어요. 만화 속 플래시 효과가 화면을 거의 꽉 채워 빨간색과 파란색 빛이 6초간 12Hz 즉, 초당 12번 밝게 번쩍이는 장면으로 인한 광과민성 증후*였습니다. 이후 게임이나 애니메이션에서는 시작 전에 방을 밝게 하고 일정 거리 이상 떨어져서 즐기라는 사전 안내 문구가 생겨났고, 2020년 11월 동영상 플랫폼 ‘틱톡’에서는 광과민성 발작을 유발할 수 있는 효과를 포함한 영상을 모두 건너뛰기할 수 있는 기능을 제공하기도 했습니다.
광과민성 증후: 빛의 깜빡거림에 의해 발작을 일으키는 증상을 말한다. 주로 초당 3회~50회 주기의 번쩍거림이 광과민성 발작을 일으키는 원인이 되며, 초당 20회 부근의 번쩍거림이 발작을 가장 잘 일으키는 주파수로 알려져 있다.
예시) 틱톡 광과민성 발작 경고 및 모두 건너뛰기 기능 제공 이미지 (출처:틱톡 공식 사이트)예시) 틱톡 광과민성 발작 경고 및 모두 건너뛰기 기능 제공 이미지 (출처:틱톡 공식 사이트)
예시) 틱톡 광과민성 발작 경고 및 모두 건너뛰기 기능 제공 이미지 (출처:틱톡 공식 사이트)
  1. 번쩍이거나 깜빡이는 콘텐츠 사용 금지
웹 접근성 지침에서는 어떤 식으로 광과민성 발작 예방 지침을 지정했을까요? 역시 무조건 필요한 경우가 아니라면 사용하지 않는 것을 말합니다. 특히나 광과민성 발작은 주로 유아층에서 많이 발견되며 증상이 나타나기 전까지 질환이 있다는 것을 모르는 경우가 대부분이라 더욱 조심해야 해요. blink, marquee등과 같이 텍스트에 적용되는 깜박임이나 움직임과 관련된 태그를 사용하지 않는 것이 좋겠습니다.
 
  1. 번쩍이거나 깜빡이는 콘텐츠 시간 제한
정말로 깜빡이는 또는 번쩍이는 콘텐츠가 필요하다면 시간을 3초 미만으로 제한하여 광과민성 발작을 예방하며 콘텐츠의 중요성을 알릴 수 있습니다. 대신 이를 사전에 경고하고 중단할 수 있는 수단을 제공해야 해요.
 
  1. 준수 확인 방법 - 프로그램 PEAT 사용
그런데 우리가 눈으로 콘텐츠가 얼마나 깜빡이고 번쩍거리는 지를 정확하게 판단하기는 어렵죠. 그래서 이를 판단할 수 있는 프로그램을 사용해요. 바로 PEAT(Photosensitive Epilepsy Analysis Tool)인데요. 영상을 실행하면 미준수 부분은 빨간색으로 표현되어 정확하게 판단할 수 있습니다. 더 자세한 사항은 Trace Research & Development Center(https://trace.umd.edu/peat/) 사이트에 접속해서 살펴볼 수 있습니다.
예시) PEAT 화면 (출처:Trace Research & Development Center)예시) PEAT 화면 (출처:Trace Research & Development Center)
예시) PEAT 화면 (출처:Trace Research & Development Center)
 
이와 같이 ‘깜빡임과 번쩍임 사용 제한’ 항목 준수를 통해, 광과민성 증후가 있는 사용자도 콘텐츠에 접근할 수 있게 됩니다. 뿐만 아니라 주의 집중이 어려운 사람의 경우에도 콘텐츠를 집중해서 응시할 수 있고, 눈의 피로를 줄여 콘텐츠 접근을 넘어 편리한 이용까지 가능해집니다.
 
 

2.4. 쉬운 네비게이션

2.4.1 [검사 항목 14] 반복 영역 건너뛰기

: 콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다.
반복 영역은 로고, 검색 창, 메뉴 등 페이지마다 존재하는 공통적인 영역을 의미합니다. 웹페이지가 로드될 때는 Tab키의 위치와 스크린 리더가 처음 부분으로 돌아가게 됩니다. 이러한 웹페이지의 특성으로 인해 스크린 리더 사용자는 반복 영역을 계속 듣게 되고, 키보드 조작을 수백 번 눌러야 할 수도 있는 상황이 발생하게 됩니다. 불필요한 탐색을 줄이기 위해서는 어떻게 해야 할까요? 웹사이트 시작 부분에 건너뛰기 링크를 제공해야 합니다. 건너뛰기 링크를 누르면 로고, 검색 창, 메뉴 등 페이지마다 반복되는 영역을 건너뛰고, 원하는 콘텐츠에 빠르게 접근할 수 있습니다.
 
1. 건너뛰기 링크 확인 하기
 
예시) 홈페이지의 건너뛰기 링크 이미지 (출처: 서울 시청 홈페이지)예시) 홈페이지의 건너뛰기 링크 이미지 (출처: 서울 시청 홈페이지)
예시) 홈페이지의 건너뛰기 링크 이미지 (출처: 서울 시청 홈페이지)
 
예시) 건너뛰기 링크로 올바르게 이동한 이미지(출처: 서울 시청 홈페이지)예시) 건너뛰기 링크로 올바르게 이동한 이미지(출처: 서울 시청 홈페이지)
예시) 건너뛰기 링크로 올바르게 이동한 이미지(출처: 서울 시청 홈페이지)
서울 시청 홈페이지에 접속한 뒤, Tab키를 누르면 ‘본문 내용 바로 가기’ 링크가 나타납니다. 건너뛰기 링크를 선택하면 키보드의 위치가 홈페이지의 로고, 메뉴, 검색 창 등 반복 영역을 건너뛰고 본문 내용으로 이동합니다.
 
2.올바른 건너뛰기 링크 제공하기
  • 불필요한 탐색을 줄이기 위해 최대한 페이지 상단에 위치 시켜야 합니다.
  • 건너뛰기 링크는 화면에 보이도록 지정해야 합니다. 화면 구성 상 가려야 한다면 Tab키를 눌렀을 때 화면에 나타나게 해야 합니다.
  • 건너뛰기 링크는 한 페이지에 3개 이하로 제공하는 것이 좋고, 핵심이 되는 영역으로 이동하는 건너뛰기 링크를 가장 앞에 제공 해야 합니다.
  • 건너뛰기 링크가 정확하게 이동하도록 링크와 이동 영역을 정확하게 연결시켜 주어야 합니다.
  • 영역이 어떤 영역인지 파악 할 수 있도록 ‘본문 내용 바로 가기’, ’뉴스로 바로 가기’와 같이 지정해 주어야 합니다. ‘하단 메뉴로 이동하기’와 같은 제목은 하단이라는 방향이 어떤 영역을 가리키는지 알 수 없으므로 바람직하지 않습니다.
 

2.4.2 [검사 항목 15] 제목 제공

: 페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다.
웹사이트를 방문하면 여러 개의 페이지, 콘텐츠들을 접하게 됩니다. 시각 장애인 사용자는 웹페이지의 내용을 한눈에 확인하기 어렵습니다. 시각 장애 환경에서 여러 개의 페이지, 콘텐츠들을 쉽게 구분하도록 하려면 어떻게 해야 할까요? 페이지와 콘텐츠에 적절한 제목을 제공해야 합니다. 적절한 제목을 제공하면 스크린 리더 사용자는 제목을 듣고 어떤 페이지인지, 어떤 콘텐츠인지 알 수 있게 됩니다. 페이지, 프레임, 콘텐츠 블록에 적절한 제목을 제공하는 방법에 대해 알아보겠습니다.
 
1. 페이지 제목 제공
웹 페이지의 제목은 웹 페이지 탭에 표시되고, 사용자는 제목을 보고 어떤 웹페이지인지 파악할 수 있습니다. 스크린 리더는 웹 페이지의 제목에 가장 먼저 접근합니다. 그렇기 때문에 스크린 리더 사용자도 웹 페이지의 제목을 듣고 어떤 페이지인지 알 수 있습니다. 웹페이지에 제목을 지정하지 않거나, 내용과 무관한 제목을 지정한다면 어떤 페이지인지 알아보기 어렵게 되겠죠. 웹페이지의 제목을 의미 있고, 고유한 이름으로 제공한다면 여러 개의 웹페이지가 열려 있더라도 원하는 웹페이지를 쉽게 찾을 수 있을 거예요. 웹페이지의 제목은 HTML 문서의 <title>요소로 정의해요. 올바른 제목을 지정하기 위해 <title>요소의 텍스트를 어떻게 작성해야 하는지 알아볼게요.
 
  • 메인 페이지
페이지가 제공하는 서비스의 이름으로 제목을 지정하여 여러 개의 창이 열려 있을 때 웹사이트를 쉽게 찾을 수 있도록 합니다.
notion imagenotion image
 
  • 검색 결과 페이지
검색 결과와 같은 서비스의 페이지는 콘텐츠의 이름과 서비스 이름을 모두 웹페이지의 제목으로 지정해야 합니다.
notion imagenotion image
 
<title>'웹접근성'의 검색 결과 :네이버 사전</title>
 
  • 뉴스 기사 페이지
뉴스 기사와 같은 서비스 페이지는 뉴스에 대한 타이틀을 제목으로 제공해야 합니다.
 
  • 하위 메뉴 페이지
선택된 메뉴와 서비스 이름을 모두 웹페이지의 제목으로 지정해야 합니다.
notion imagenotion image
<title>IT/과학 홈:네이버 뉴스</title>
 
  • 적절하지 않은 제목
    • 특수 문자를 두 개 이상 사용한 경우
      스크린 리더는 특수 문자도 읽기 때문에 불필요한 음성을 출력할 수 있습니다. 웹 페이지 제목에 특수 문자는 한 개로 제한 합니다.
      <title>☆☆☆☆☆웹 접근성-운용의 용이성☆☆☆☆☆</title>
      웹 페이지에 <title> 요소를 지정하지 않은 경우
      웹페이지 제목으로 내용을 유추 할 수 없는 경우
 
2. 프레임 제목 제공
프레임은 웹 페이지 안의 또 다른 페이지를 의미하고, <iframe> 요소로 나타냅니다. <iframe>요소는 HTML 문서 내에 다른 문서를 포함할 수 있는 요소입니다. 스크린 리더는 <iframe> 요소의 title 속성 내용을 읽습니다. 스크린 리더 사용자는 프레임의 제목을 듣고 프레임에 어떤 목적으로 다른 페이지를 불러왔는지 알 수 있어요. 프레임 제목의 오류 예시와 올바른 예시를 알아볼게요.
 
  • 오류 예시
<iframe>요소에 title 속성을 올바르게 지정하지 않은 경우
<!-- title속성을 지정 하지 않은 경우--> <iframe src ="http:// 새로운페이지로이동하는광고링크. com"></iframe> <!-- title속성을 빈 값(" ")으로 지정한 경우 --> <iframe src ="http:// 새로운페이지로이동하는광고링크. com" title = " "></iframe>
<iframe>요소의 title속성을 지정하지 않거나 title속성의 내용을 공백으로 두는 경우 스크린 리더가 읽지 않기 때문에 사용자가 어떤 <iframe>인지 알 수 없습니다.
 
  • 올바른 예시
프레임 내용이 있는 경우
<iframe src="http:// 새로운페이지로이동하는광고링크. com" title="광고"></iframe>
프레임의 목적 및 용도를 알 수 있도록 제목을 제공해야 합니다.
 
프레임 내용이 없는 경우
<iframe data-veta-preview="main_frame" title="빈 프레임" width="0" height="0" >
내용이 없거나 화면에 표시하지 않는 내용이 없는 프레임에도 title 속성에 ‘내용 없음’, ’빈 프레임’과 같은 이름으로 지정해 주어야 합니다. 빈 iframe에 접근 할 때 스크린 리더는 “빈 프레임” 또는 “내용 없음” 이라고 읽어 사용자가 내용이 없는 프레임임을 알 수 있습니다.
 
3. 콘텐츠 블록 제목 제공
웹 콘텐츠의 콘텐츠 블록에는 제목을 제공할 수 있고, 콘텐츠 블록의 제목은 <h1> ~ <h6>요소를 사용하여 제공합니다. <h1> ~ <h6>요소는 font-size 속성을 위한 요소가 아닌 제목의 단계를 나타내는 요소입니다. <h1>요소가 가장 높은 단계이고 , <h6>요소가 가장 낮은 단계입니다. 따라서 제목을 논리적으로 파악하기 위해서는 <h1>로 시작해서 <h2><h3>의 순으로 순차적으로 작성 해야 합니다. 가장 높은 단계인 <h1>요소는 한 페이지당 하나만 사용하여 전체 페이지의 목적을 나타내고, <h2>~<h6> 요소는 같은 단계의 제목이라면 콘텐츠마다 일관성 있게 동일한 <heading>요소로 지정합니다.
콘텐츠 블록의 제목을 적절하게 지정하면 스크린 리더 사용자는 원하는 콘텐츠 블록에 쉽게 접근할 수 있습니다. 스크린 리더 또한 콘텐츠의 제목에서 제목으로 뛰어넘으며 콘텐츠를 파악합니다. 따라서 빠진 제목이 있다면 어떤 콘텐츠인지 파악을 하지 못하게 되어 사용자가 혼란을 겪을 수 있습니다. 콘텐츠 블록을 과도하게 세부적으로 나눠 너무 많은 제목을 제공하면 탐색에 혼란을 줄 수 있으므로, 콘텐츠 블록을 적절하게 나누어 제목을 제공해야 합니다. 콘텐츠 블록의 제목을 숨김 처리할 때는 스크린 리더가 읽을 수 있도록 IR기법을 이용하여 제공해야 합니다.
 
  • 콘텐츠 블록 제목
같은 단계의 콘텐츠 블록은 일관성 있게 동일한 heading 요소로 지정해 주어야 합니다.
예시) 콘텐츠 블록을 같은 단계로 설정한 페이지 (출처: 네이버 사전)예시) 콘텐츠 블록을 같은 단계로 설정한 페이지 (출처: 네이버 사전)
예시) 콘텐츠 블록을 같은 단계로 설정한 페이지 (출처: 네이버 사전)
<h2>어학사전</h2> ... <h3>국어사전 단어</h3> ... <h3>영어사전 단어·숙어</h3>
네이버 사전 검색 결과 페이지의 ‘어학사전’은 <h2> 요소로, ‘국어사전 단어’와 ‘영어사전 단어·숙어’는 <h3>요소로 지정했습니다. ‘어학사전’이라는 콘텐츠 안에 ‘국어사전 단어’와 ‘영어사전 단어·숙어’의 콘텐츠가 같은 단계로 있으므로 적절합니다. 위의 코드와 같이 지정한다면 스크린 리더 사용자가 콘텐츠에 쉽게 접근 할 수 있습니다. 이와 같이 같은 단계의 콘텐츠 블록은 일관성 있게 같은 헤딩 요소로 지정해야 합니다.
 
  • 오류사례
스크린 리더 사용자는 콘텐츠 제목을 확인 할때 콘텐츠의 제목에서 제목을 넘나들며 콘텐츠의 내용을 파악합니다. 만약 <h1>요소 다음에 <h3>로 지정한다면 중간에 바진 제목이 어디에 있는지 몰라 혼란을 줄 수 있습니다.
<!--제목을 순차적으로 제공하지 않은 코드--> <h1>Heading level 1</h1> <h3>Heading level 3</h3> <h4>Heading level 4</h4>
 
 

2.4.3 [검사 항목 16] 적절한 링크 텍스트

: 링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.
웹 페이지의 링크는 다른 영역이나 다른 페이지로 이동하는 역할을 하고, <a> 요소로 나타냅니다. <a> 요소의 텍스트는 링크의 용도나 목적지를 알 수 있도록 지정해야 합니다. 만약 <a> 요소의 텍스트가 ‘더보기’ , ‘전체보기’ 와 같은 이름으로만 되어 있다면 어떤 내용을 더 볼 것인지, 전체로 볼 것인지 알 수가 없겠죠. 링크가 어떤 내용을 가리키는지 알기 위해서는 ‘게시판 더보기’ 와 같이 링크의 목적지를 파악 할 수 있는 텍스트를 추가로 제공해야 해요. 화면에 링크 텍스트를 제공할 공간이 없다면, IR기법으로 대체 텍스트를 제공해야 합니다.
 
1. 텍스트 링크
  • 링크 텍스트를 목적지에 맞게 지정해야 합니다.
    • 예시) 링크 텍스트의 목적지를 지정한 경우 (출처 : 네이버 사전)예시) 링크 텍스트의 목적지를 지정한 경우 (출처 : 네이버 사전)
      예시) 링크 텍스트의 목적지를 지정한 경우 (출처 : 네이버 사전)
      <a href="...">국어사전 더보기</a>
       
  • IR기법으로 대체 텍스트를 제공해야 합니다.
    • 예시) 링크의 목적지를 IR기법으로 지정한 경우 (출처: 네이버 금융)예시) 링크의 목적지를 IR기법으로 지정한 경우 (출처: 네이버 금융)
      예시) 링크의 목적지를 IR기법으로 지정한 경우 (출처: 네이버 금융)
<a href="..."><span class="blind">주요뉴스 더보기</span>더보기</a>
위의 코드와 같이 대체 텍스트는 링크의 목적지를 가리키도록 지정 해야 합니다. 예시 이미지의 ‘더보기’는 눈으로는 ‘더보기’로 보이지만 스크린 리더는 “주요뉴스 더보기”라고 읽어 사용자가 링크의 목적지를 알 수 있습니다.
 
2. 독립적 이미지 링크
링크가 이미지인 경우 이미지에 대체 텍스트를 제공하여 링크의 목적지를 지정해야 합니다.
<a href=”#”><img src="book.png".jpg alt="웹 접근성에 접근하기 출판" /></a>
 
3. 독립적 배경 이미지 링크
배경 이미지 링크의 경우에 IR기법으로 대체 텍스트를 제공 해야 합니다.
예시)  배경 이미지의 링크를 IR기법으로 지정한 경우 (출처 : 네이버 메인 페이지)예시)  배경 이미지의 링크를 IR기법으로 지정한 경우 (출처 : 네이버 메인 페이지)
예시) 배경 이미지의 링크를 IR기법으로 지정한 경우 (출처 : 네이버 메인 페이지)
<a href="#" class="menu"><span class="blind">이전</span></a> <a href="#" class="menu"><span class="blind">다음</span></a>
위의 예시 이미지와 같이 ‘이전’과 ‘다음’을 나타내는 이미지는 육안으로는 확인이 되지만 시각 장애 환경에서는 알아 보기 어렵습니다. 배경 이미지에 링크의 목적을 나타내는 대체 텍스트를 지정하면 스크린 리더가 배경 이미지에 접근 할 때 대체 텍스트를 읽어 사용자가 쉽게 접근 할 수 있습니다.