반응형에 대한 내 애정의 근원은 내가 만든 웹사이트가 모바일 디바이스부터 막강한 성능의 데스크톱에 이르기까지 어디에서나 잘 보일 수 있게 하는 데 있다.
- 트렌트 월턴, <크기 맞추기(Fit to Scale)>-
책임감 있는 디자인 원칙 중 사용성과 접근성에 집중하여 다루어 보고자 한다.
화면 크기와 디바이스 종류가 다양한 환경에서 콘텐츠와 기능을 어떻게 표현해야 할지에 대해 고민한다.
'브라우저에서 디자인한다'는 표현 대신 '브라우저에서 결정한다'라고 표현을 바꾸자
-댄 몰, <더 패스트리 박스 프로젝트>-
이 단계의 핵심 목적은 최대한 빨리 브라우저에서 표현함으로써 디자인과 상호작용 방식에 관련된 사항을 실제로 웹사이트를 조작할 수 있는 환경에서 결정하는 데 있다.
중단점(breakpoint) : 미디어 쿼리를 통해 가변 레이아웃의 형태가 다르게 바뀌는 뷰포트 크기를 말한다.
디자인 초기 단계에서는 절대로 중단점을 지정해서는 안 된다. 대신 중단점이 될 만한 콘텐츠를 찾기만 해야 한다.
먼저 작은 화면에서 출발해 서서히 키워가다 보면 쓰레기처럼 보이는 시점이 나타난다. 그때 중단점을 지정한다
-스티븐 헤이-
좀 더 객관적인 가이드라인을 원한다면 웹을 위한 타이포그래픽 스타일 요소
에 나온 기준을 따르자.
주요 중단점(major) : 칼럼들이 추가되거나 하나 이상의 요소에 대한 변화가 일어나는 부분
하위 중단점(minor) : 디자인 일부에서만 변화가 일어나는 부분(font-size가 변해서 글자가 벗어나는 정도)
필자에 의하면 주요 중단점은 개발 초기 단계에 들어나고, 하위 중단점은 최종 마무리 단계에서 결정되는 편이라고 한다.
컴포넌트를 제작할 때 뼛속까지 완전히 파악해서 만들고 문서화해 다른 모듈과 원활하게 연동되는 독립적인 개체로 만들어야 한다는 것이다.
콘텐츠를 최대한 그대로 유지하면서 작은 화면에 맞추려면 어떻게 해야 할까?
콘텐츠를 단순히 숨기기보다는 작은 뷰포트에서 사용성을 최대한 유지하도록 디자인을 재구성하는 것이 가장 좋다.
작은 화면이라는 제약 사항을 직관적이며 책임감 있는 방식으로 대처할 수 있는 디자인 패턴이 다양하게 존재한다.
이러한 디자인 패턴 중 하나로 콘텐츠를 온디맨드 방식으로 보여주는 디자인 패턴이다.
(온디맨드 방식 : 콘텐츠를 필요한 시점에 보여주는 방식)
숨기는 것이 무조건 나쁜 것이 아니라 숨겨진 내용을 사용자가 볼 수 있는 방법이 없다는 것이 나쁠 뿐이다.
작은 화면에 표시하기 가장 까다로운 콘텐츠 유형 중 하나.
모바일 프레임워크에도 잘 동작하는 몇 가지 패턴을 통해 제작
http://bradfrost.github.io/this-is-responsive/patterns.html#basic-forms
mouseover는 상호작용을 위한 주된 수단이 아닌 있으면 좋은 보조 기능으로 제공해야 된다.
터치와 mouseover를 모두 지원하도록 스플릿 버튼으로 구성하기도 한다.
항상 터치스크린을 사용한다는 가정하에 디자인해야 한다.
그래서 버튼이나 링크 영역을 탭하기 좋게 만들어야 한다.
사용자들은 웹 환경에서도 네이티브 환경에서 사용하는 터치 이벤트를 기대한다.
브라우저에서는 터치 이벤트를 지원하기 시작했다.
그렇다면 네이티브 터지 동작과 똑같이 만들려면 어떻게 해야 할까?
터치 제스쳐는 흔히 사용하는 기존의 입력 방식에 부가적으로 제공하는 '있으면 좋은' 옵션처럼 생각하는 것이 좋다.
문제는 이러한 제스쳐가 있다고 알리는 것이다.
실제로는 터치 제스쳐의 존재를 암시하는 시각적인 인터페이스가 없는 경우가 많기 때문이다.
터치 상호작용을 최대한 빨리 작동하게 하기 위한 책임감 있는 개발 방식은 마우스와 터치 이벤트에 대한 이벤트 리스너를 모두 구현하는 것이다.
이벤트 처리 로직 구현 시 먼저 발생한 이벤트만 처리하고 다른 이벤트는 무시하도록 작성하면 동일한 코드를 두 번씩 작성하지 않아도 된다.
제스처나 표현을 지원하지 않는 브라우저 사용자나 스크린 리더와 같은 보조 기술을 통해 웹을 이용하는 사람들도 접근할 수 있게 만들어야 한다.
HTML에 새로운 상호작용 방식이 추가되는 만큼 항상 잃는 부분도 생긴다. 따라서 웹사이트를 제작할 때 이를 최대한 보존하도록 신경 써야 한다.
점진적 향상은 HTML의 기능과 내용을 기반으로 사용자 경험을 해치지 않는 레이어 기반의 표현(CSS)과 동작(JS)을 통해 보다 동적인 사용자 경험의 제공을 강조한다.
HTML5 규격에서는 number
, color
, search
와 같은 새로운 형태의 입력 폼이 추가되었다.
이 기능을 지원하지 않는 브라우저에서는 기존의 표준 text
입력 폼으로 표현한다.
range
입력 폼도 추가되었는데, 사용성과 접근성이 좋다고는 판단하기 어렵다.
음량을 조절하는 경우가 아닌 이상 슬라이더를 이같이 표현하면 곤란하다.
<label for="value">Choose a value:</label>
<input type="range" id="value" min="0" max="10">
지금부터 누구나 접근할 수 있는 형태로 슬라이더를 만드는 방법에 대해 알아보자
<input type="number">
: 슬라이더는 숫자를 시각적으로 표현한 수단이기 때문min
, max
와 같은 컨트롤의 제약 사항에 대해 표준 및 부가 속성을 사용input
을 드래그할 때 입력된 값을 처리하는 자바스크립트 작성<label for="results">Results Shown:</label>
<input type="number" id="results" name="results" value="61" min="0" max="100" />
<div class="slider">
<a href="#" class="handle" style="left: 60%;"></a>
</div>
<a>
요소 처리 시 'number link'로 읽게 되는데 이 혼동을 피하기 위해 숨긴다.<a>
속성에 aria-hidden
넣어준다.)차트나 그래프와 같은 데이터 시각화 표현은 제대로 이해할 수 없는 형태로 전달되는 경우가 많다.
마찬가지로 HTML작성으로 출발하고, 차트나 그래프는 테이블 요소 등 데이터 기반의 요소들을 제공하여 접근성을 보장하도록 한다.
그리고 HTML 마크업을 js로 파싱해 canvas
나 SVG
등으로 차트를 동적으로 생성하면 된다.