쏭군은 열정 드리머

원하는 섹션으로 가려면 페이지를 다 읽어야 하나요? 시간이 너무 아까워요..
웹표준과 웹접근성을 잘 지원하여 만든 사이트가 있습니다. 만약 그 사이트를 스크린리더기로 읽는다면 아래 그림과 같은 순서로 읽어 나갈 것 입니다. 사이트 이미지는 다음을 예로 들었습니다. 마크업 순서는 헤더, LNB, 컨텐츠 영역, RNB, 푸터 순이라고 가정했습니다.

사용자 삽입 이미지

아마도 스크린 리더기는 위의 페이지를 로고가 있는 부분부터 읽어나갈 것 입니다. 그리고 번호가 붙은 순서대로 읽어나가 푸터가 있는 부분까지 차례로 읽어나갈 것 입니다.

이 부분에서 우리가 시각장애인의 웹접근성에 대해서 생각해 볼 것이 있습니다. 만약 스크린리더를 사용하는 한 유저가 있다고 가정합시다. 그 유저는 위의 사이트에서 9번 섹션에 있는 영화 컨텐츠를 주로 이용한다고 가정하겠습니다. 그러면 이 부분에서 접근성 저해 문제가 발생합니다.

이유는 이렇습니다. 9번 섹션을 이용하기 위해서 해당 유저는 매번 페이지를 1번 부터 읽어와야 하는 불편함이 생기기 때문입니다. 유저에게 상당한 시간 낭비일 수 있습니다. 그러면 이 문제를 해결하여 스크린리더를 사용하는 유저가 사이트에 접근하자마자 바로 원하는 섹션으로 접근하는 방법은 없을까요?

다행히도 간단하게 위의 접근성 문제를 해결할 수 있습니다.

스크린리더를 이용하는 유저, 원하는 섹션으로 바로 이동시키기

사용자 삽입 이미지

일단 각 섹션별로 ID값을 지정해줍니다. 이 ID네임을 이용하여 북마킹 기능을 활용할 것 입니다.

각 섹션별 모듈에 해당하는 div에 id값을 다음과 같이 주면됩니다.

<div id="shop_area">
  ... 컨텐츠 중략
</div>

위에 있는 다음(daum.net)의 예처럼 하시면 편리할 것 입니다. 각 섹션별로 id 값을 지정해줍니다.
그리고 페이지의 가장 상단에 다음과 같은 코드를 넣어줍니다. 페이지의 이름을 알 수 있는 헤드라인 태그 바로 아래에 오면 최적일 것 같습니다.

사용자 삽입 이미지

다음(daum.net)의 메인페이지 문서 구조입니다. 웹페이지 최상단에 h1 태그로 사이트의 이름을 지정해 주었습니다. 그리고 그 아래에 간단한 유틸리티와 캠페인 영역을 지나면 '목차'라는 부분이 있음을 알 수 있습니다. 이것이 바로 시각장애인을 배려한 웹접근성 향상 방법중에 하나입니다.

메인페이지의 각 섹션으로 바로 이동할 수 있는 기능을 제공합니다. 이 기능을 제공함으로서 사이트를 이용하는 시각장애인(스크린리더 이용자)들은 웹페이지 전체를 일일이 읽으면서 시간낭비를 할 필요가 없어졌습니다. 바로바로 원하는 섹션으로 이동할 수 있게 되었기 때문이죠. 각 섹션으로 이동시키는 방법은 a 태그의 북마크 기능을 이용합니다. 코드는 다음과 같습니다.

<a rel="bookmark" href="#shop_area">쇼핑 바로가기</a>

a 태그의 rel 속성은 'bookmark'로 해주고, href에는 각 섹션에서 지정한 #id 값을 입력해줍니다. 간단하죠?

섹션 바로 가기 링크는 어떻게 감추죠?
자, 그럼 여기서 의문점이 하나 생기는데요. 편의를 위한 서비스 제공은 좋지만 CSS를 적용한 실제 서비스에 위의 목차를 감추려면 어떻게 해야할까요? 얼핏 생각하기로 다음과 같이 하면 될 것 같은데 말이죠. 음..

HTML마크업
<div class="section_navi">
 ... 목차 내용 중략 ...
</div>

CSS
.section_navi { display: none; }

자, 시각장애인을 위해 만든 목차를 CSS를 적용한 실서비스에서 감추기 위해 위처럼 하면 될까요?
정답은 위의 예제처럼 하면 '안된다' 입니다. display: none; 을 이용하면 일부 스크린리더기가 이를 읽지 못합니다. 그래서 이를 보완하기 위한 방법이 필요하게 되었습니다. display: none; 처럼 컨텐츠를 완전히 감추어 버리는 것이 아니라, 실제로는 컨텐츠를 존재하게 만들면서 디자인상으로만 보이지 않게 하는 방법 말이죠.

HTML마크업
<div class="section_navi">
 ... 목차 내용 중략 ...
</div>

CSS
.section_navi { visibility: hidden; width: 0; height: 0; overflow: hidden; position: absolute; top: -10000px; line-height: 0; }

'다음'의 경우에 이렇게 되어있는데. 좋은 방법이라고 생각됩니다. 목차 div의 너비와 높이를 0으로 만들고 넘어가는 컨텐츠는 overflow: hidden으로 감추는 것이죠. 그리고 2중으로 visibility: hidden까지 자물쇠를 채워 눈에 안띄게 하였고 3중으로 position: absolute에 top: -10000px까지 주어 목차를 안드로메다로 날려버렸습니다. 그러나 dispaly: none처럼 아예 사라진 것이 아니기 때문에 스크린리더기에서도 잘 읽힙니다.

웹접근성 향상을 위한 다양한 아이디어와 노력이 돋보입니다. 혹시 다른 사이트에서도 이 같은 배려가 되어있는지 궁금하네요. 골프존(www.golfzon.com)에서도 스크린리더를 이용하는 유저를 위한 배려가 잘 되어 있습니다.

사용자 삽입 이미지

접근성 향상을 위한 다양한 노력들이 웹을 조금 더 평등하고 편리한 곳으로 만들어 나갑니다.
2009/12/29 21:29

트랙백 주소 :: http://monoeyes.com/trackback/791

  1. 받은 트랙백 ㅇㄴㅇㄴㄴㅇㄴㅇ

    트랙백 보낸 곳 : 사용하기 쉬운 웹을 만들고자 하는 웹퍼블리셔 1人 2009/12/30 23:34  삭제

    http://monoeyes.com/trackback/791

  1. BlogIcon 신현석 2009/12/30 21:12  댓글주소  수정/삭제  댓글쓰기

    이건 오히려 접근성을 해칠 수 있습니다. 능숙한 스크린리더 사용자라면 하세월 모든 내용을 다 듣지 않습니다. 스크린리더에는 페이지 탐색을 도와주는 많은 기능들이 있습니다. 검색이라든가 서식간 이동, 프레임 이동 등을 사용하면 훨씬 빠르게 페이지를 탐색할 수 있고 쏭군님께서 링크로 구현한 기능은 헤딩간이동으로 충분히 커버가 됩니다.

    저렇게 부가적인 콘텐츠 - 부가적인 콘텐츠는 결국 복잡도를 증가시켜 이해를 어렵게 합니다. - 를 넣는 것 보다는 h1~h6 태그를 잘 써주는 것이 더 도움이 됩니다.

    페이지간의 링크는 "메뉴 건너뛰기(skip navigation)"만 넣는 것이 좋습니다.

    • BlogIcon 쏭군 2009/12/30 23:11  댓글주소  수정/삭제

      현석님 안녕하세요. 오랜만이에요~
      남겨주신 의견 잘 보았습니다.
      스크린리더기로 헤드라인간 이동이 된다는 점은 제가 몰랐던 부분이네요. 제가 스크린리더기를 테스트 하는 동안에는 스크린리더기를 능숙하게 다루는 분이 안 계셔서(물론 저 역시도요) 몰랐던 부분인 것 같습니다.

      좋은 부분 알려주셔서 감사드립니다.

      음, 그리고 이 방법이 오히려 접근성을 해치는 부분에 해당될 수 있다는 부분에 대해서는 그렇게 생각하시는 분들도 분명 있을거라는 생각이 듭니다.

      반면 분명 편리하게 사용하실 분들도 있을 것 입니다. 말씀하신바 헤드라인간 skip이 가능하다면 목차 역시 스킵을 해버리면 되지 않을까 생각합니다.(말씀하신 스크린리더기를 능숙하게 다루는 유저)

      헤드라인 스킵을 할 줄 모르는 유저는 목차를 통해서 섹션간 이동을 하면 될 것 같구요. 유저에게 있어서 선택의 카드는 두 가지가 있으므로 제가 제시한 방법을 사용하는 것도 나쁘지 않다고 생각합니다.

      많은 생각을 하게 되는 댓글 감사드리구요. 앞으로도 좋은 의견 부탁드리겠습니다. 감기 조심하세요.

  2. BlogIcon mihee 2009/12/31 00:51  댓글주소  수정/삭제  댓글쓰기

    코드와 관련하여 기존에 display:none;에 대한 대안으로 다시 권장되어진 것이 visibility:hidden; 이지만, 이 같은 경우에도 보조기기에서 숨김콘텐츠로 인식을 못할 수 도 있다고 합니다. (예로 JAWS 같은 경우 둘 다 인식 안하는 것을 알고 있습니다)

    시각장애인을 위해 특화 된 콘텐츠를 제공하는 것이라고 한다면 보조기기가 최대한 잘 대응할 수 있도록 작업하는 것이 맞지 않을까 싶어 댓글 남겨봅니다 :)

    • BlogIcon 쏭군 2009/12/31 08:28  댓글주소  수정/삭제

      mihee님 소중한 의견 감사합니다.
      JAWS와 같은 특정 소프트웨어에서 visibility: hidden;을 읽지 못한다면 visibility: hidden; 도 display: none;의 좋은 대안이라고는 할 수 없겠네요.

      그렇다면 visibility: hidden;은 사용하지 않고, z-index: -1; 과 같은 테크닉을 동원하거나 height: 0; width: 0; overflow: hidden; 과 같이 컨텐츠의 보이고 감춰지고에 영향을 주지 않는 CSS 스펙으로 대응을 해야겠네요.

      값진 정보 공유해주셔서 감사합니다.

  3. BlogIcon 마래바 2009/12/31 22:21  댓글주소  수정/삭제  댓글쓰기

    캬~~
    저런 부분까지 신경써야 하는 거군요... 너무 어렵네요..
    그저 html 문법 조금 알고 있는 저로서는 말이죠.. ㅎㅎ

    쏭군님에게 올 한해는 뜻 깊은 한해 였으리라 생각합니다.
    새해에도 건강하시고 바라시는 모든 것 다~ 다~ 이루시는 한해 되시길 기원 할께요.
    새해 복 많이 받으세요. ㅎㅎ

    • BlogIcon 쏭군 2010/01/08 13:43  댓글주소  수정/삭제

      웹접근성을 지켜야 한다면 해야할 것이 한도 끝도 없이 많아지더라구요. 마래바님 블로그 꾸며 놓으신 것 보면 마래바님도 대단한 매니아이신 것 같습니다^^

      작년한해 재미있는 비행소식 많이 전해주셔서 감사드리구요~ 2010년에도 자주 왕래하는 이웃블로거로 친하게 지냈으면 좋겠습니다~ 새해 복 많이 받으시고, 가정에도 복이 깃들길 바랍니다^^

  4. BlogIcon 성민장군 2010/01/03 22:29  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 좋은 글 잘 보았습니다.
    다음의 경우를 예로 들어 설명해주셨는데요.
    다음의 경우도 그렇지만, '장애 환경에 대한 비장애인의 관점에서 바라본 지나친 배려"라고 할까요.
    실제 장애인들에게는 "시각 장애인 사용자를 위한....."이라는 멘트와 퀵링크처럼 제공되는 건너뛰기 링크가 오히려 웹 접근을 어렵거나 귀찮게 할 수 있을 것 같습니다.
    현석님께서 말씀하셨지만, 그런 부분은 headings을 통해 충분히 해결할 수 있습니다. (스크린 리더 사용자에게는 거의 기본적인 단축키 스킬입니다.)

    쏭군님의 블로그에 처음으로 댓글을 달게 되었는데 ^^;
    자주 놀러오도록 하겠습니다.

    2010년 새해 복 많이 받으세요~

    • BlogIcon 쏭군 2010/01/08 13:53  댓글주소  수정/삭제

      성민장군님 좋은 의견 감사합니다.
      일단 규모가 큰사이트에서 '섹션 바로 가기' 기능을 제공한다면 없애는 의사결정이 쉽지는 않을 것 같습니다. 누군가는 필요로 하기 때문에 사전에 충분한 리서치와 분석, 기획 과정을 거쳤을 것이라고 생각됩니다.

      다만, 항목에 있는 H2부분의 문구를 짧게 해야할 것 같다는 느낌은 듭니다. 지적하신 부분에 '시각장애인을 위한...' 이 부분은 오히려 접근성을 해칠 수 있을 것 같다는 생각이 드네요. 간단히 '목차', '바로가기' 정도로만 헤드라인 레이블링을 수정하면 될 것 같습니다.

      새해 복 많이 받으세요~

  5. 도라지요 2011/03/08 15:54  댓글주소  수정/삭제  댓글쓰기

    우와 이런 좋은 글들이!! 주옥같은 정보를 보고 갑니다.

    본글과 댓글을 정말 유용하게 읽었습니다. ^_^

    좋은 하루되세용~

  6. BlogIcon Authorhouse 2012/03/23 21:46  댓글주소  수정/삭제  댓글쓰기

    함께 이것을 넣어 주셔서 감사합니다. 이것은 매우 유용합니다.




''에 해당되는 글 건