근래에 이직을 위해 면접을 보는 과정에서 많은 회사들이
웹 표준과 웹 접근성에 대해서 면접질문이 많아서 확실하게 공부도 할 겸 기록하기 위해 작성하려 한다.
웹 표준은 어떤 환경에서도 이용할 수 있는 웹페이지를,
웹 접근성은 어떤 사람이든 이용할 수 있는 웹페이지를 만들 수 있는 방법을 담고 있다.
웹
두 글자로 정의한다면 '공간'으로 정의할 수 있다.
문서, 이미지, 영상 등 다양한 정보를 여러 사람들과 공유할 수 있는 공간을 웹이라고 한다.
현재는 크롬, 엣지, 사파리 등 최신 웹 브라우저들은 모두 웹표준을 지원한다.
즉 웹 표준에 맞추어 웹 페이지를 작성하면 어떤 브라우저를 사용하든 동일한 결과물을 얻을 수 있다!
웹 표준에 따라서 웹 페이지를 작성하면 어떤 장점이 있을까??
예전엔 구조, 표현 ,동작이 뒤섞인 코드가 많아서 유지 보수가 힘들었다면,,
웹 표준을 준수하여 웹 사이트를 제작하면?
웹 표준에서는 HTML을 시멘틱(semantic)하게 작성하는 것의 중요성을 강조!
<header> , <nav> ,<main> ,<aside>, <footer>, <section> ,<article> ,<hgroup> ,<p>
HTML 요소는 표시 방법에 따라 인라인 요소, 블록요소로 나뉘는데
인라인 요소는 항상! 블록 요소에 들어가야 하며 반대의 경우는 있어서는 안 된다!
대표적인 인라인 요소(콘텐츠가 차지하는 만큼) -> <span> <a> <em> <strong>
대표적인 블록 요소 (가로로 넓게 영역 차지) -> <div> <p> <h1~6>
// h1, div 요소는 블록요소
// a, span 요소는 인라인 요소
<a href=""> <h1> 이렇게 쓰면 </h1> </a>
<span> <div> 안 돼요 </div> </span>
<b> <i>
요소 사용하기<b>
요소(bold) 는 글씨를 굵게 만들 때<i>
요소(italic) 는 글씨를 기울일 때 사용하는 요소하지만 웹 표준을 준수하기 위해서는 이 요소들을 사용하지 않는 것이 좋음
대신 똑같은 스타일을 부여하면서 콘텐츠에 의미를 부여하는
<strong>
요소 (글씨 굵게)와<em>
요소(글씨 기울이기, emphasize)를 사용하는 것이 좋음두 요소는 글씨에 효과를 줌과 동시에 각 콘텐츠를 강조하는 의미를 부여
<hgroup>
마구잡이로 사용하기<hgroup>
요소들은 목차의 역할을 하면서 콘텐츠의 상하 관계(위계질서)를 표시하기 위해서 사용함
<hgroup>
의 시맨틱 요소로서의 역할은 간과한 채 글자에 스타일 속성을 적용하기 위한 목적으로 사용하는 경우가 종종 있음!// 좋은 예시 h1 -> h2-> h3 순서대로 써야함
<h1>제목</h1>
<h2>큰 목차</h2>
<h3>작은 목차</h3>
<h3>작은 목차</h3>
<h2>큰 목차</h2>
<h3>작은 목차</h3>
<h4>더 작은 목차</h4>
<h4>더 작은 목차</h4>
<br/>
연속으로 사용하기텍스트 흐름에 줄 바꿈을 해주기 위해서 사용하는 요소
그런데 이러한 목적이 아니라 요소 사이에 간격을 만들기 위한 목적으로 남발해서는 안됨!
//좋은 예시 1
<p> 요소 사이에 여백을 주고 싶을땐 </p>
<p>아예 별도의 단락으로 구별하세요 </p>
//좋은 예시 2
// HTML 파일
<p class="margin">요소 사이에 여백을 주고 싶을땐</p>
<p class="margin">CSS 속성으로 여백을 설정해주세요</p>
//CSS 파일
.margin {margin:10px}
웹 표준을 지키기 위해서는 HTML, CSS 코드를 분리해서 작성하자!
// 나쁜 예시
<h3 style="color: blue"> 이렇게 인라인 스타일링으로는 사용하지 마세요</h3>
웹 사이트에 접근하는 브라우저에 상관 없이 동등한 화면과 기능을 제공할 수 있도록 만드는 작업
초기 기획 → 개발 → 테스트/발견 → 수정/ 반복의 단계
초기 기획 단계에서 어떤 웹 사이트를 만들 것인지 정확하게 결정해야 함
코드를 작성할때 사용하는 코드가 각 브라우저에서의 호환성이 어떤지 파악하고 사용해야함
각 기능을 구현한 후에는 그 기능에 대한 테스트!
직접 테스트를 할 수도 있겠지만 자동으로 테스트를 진행하는 도구도 있음
웹 접근성을 잘 확보했는지 판단할 기준이 되는 웹 콘텐츠 접근성 지침!
모든 콘텐츠는 사용자가 인식할 수 있어야 한다
: 시각적으로 인식하지 못하는 사용자 또는 상황을 대비
<img src="이미지 주소" alt="대체 텍스트"/>
멀티 미디어 콘텐츠에는 자막, 원고 또는 수화를 제공해야 한다.
멀티 미디어 콘텐츠에는 자막, 원고 또는 수화를 제공해야 한다.
지시사항은 모양, 크기, 위치, 방향, 색, 소리 등에 관계없이 인식될 수 있어야 함
텍스트 콘텐츠와 배경 간의 명도 대비는 4.5대 1 이상이어야 한다.
자동으로 소리가 재생되면 안 됨
이웃한 콘텐츠는 구별될 수 있어야함 (테두리, 구분선, 무늬 등)
사용자 인터페이스 구성요소는 조작 가능하고 내비게이션 할 수 있어야 함
모든 기능은 키보드만으로도 사용할 수 있어야 함
키보드에 의한 초점은 논리적으로 이동해야하며 시각적으로 구별할 수 있어야 함
사용자 입력 및 컨트롤은 조작 가능하도록 제공되어야 함
시간 제한이 있는 콘텐츠는 응답 시간을 조절할 수 있어야함
꼭 응답시간을 넣어야 한다면 (1) 충분한 시간 (2) 종료 안내 (3) 조절 수단을 제공해야 함 ex) 은행 사이트
자동으로 변경되는 콘텐츠는 움직임을 제어할 수 있어야 함
초당 3~50회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다
콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다.
페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다.
링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.
주로 사용하는 언어를 명시해야 한다
<html lang="ko">
사용자가 의도하지 않은 기능 (새 창, 초첨에 의한 맥락 변화)은 실행되지 않아야 한다.
콘텐츠는 논리적인 순서로 제공해야 함
// 탭1-> 탭1 관련 내용 -> 탭2 -> 탭2 관련 내용 순서로 읽기
<div>탭1</div>
<div>탭1 관련 내용</div>
<div>탭2</div>
<div>탭2 관련 내용</div>
듣기만 해도 표의 구조, 내용을 이해하기 쉽게 구성해야함
사용자 입력에는 대응하는 레이블을 제공해야 한다.
// label과 input id 연결
(0) <label for="user_id">아이디</label>
<input id="user_id" type="text" placeholder="아이디" />
// title 속성쓰기
(O) <input type="text" title="아이디" placeholder="아이디" />
// WAI-AREA
<input type="text" title="아이디" placeholder="아이디" />
입력 오류를 정정할 수 있는 방법을 제공해야 한다.
마크업 언어의 요소는 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 함
콘텐츠에 포함된 웹 애플리케이션은 접근성이 있어야 함