티스토리 뷰

CSS

IR 기법

개발자가되고싶은자 2022. 2. 15. 23:57

[CSS] IR(Image Replacement) 기법

웹 접근성 준수를 위해 이미지 사용 시 대체 텍스트를 제공해야 한다.
단순히 스크린 리더 사용자뿐 아니라 검색 엔진의 효과적인 내용 수집을 위해서도 필수적이다.

<img src="/img/button.jpg" alt="대체 텍스트">

가장 간단하게는 위와 같이 img 태그 내 alt 속성을 주는 것이겠지만 CSS background-image 속성을 사용하여 이미지를 넣는 경우도 상당수 차지하기 때문에 IR 기법에 대해 알아보자. (사실 그동안 어느정도 안다고 생각하며 깊게 고민하지 않고 사용했다..)

BAD - 스크린 리더가 읽을 수 없는 방법

.hidden {
    display: none;
}

화면에 표시되지 않고 스크린 리더가 읽을 수 없다.

.hidden {
    visibility: hidden;
}

화면에 표시되지 않으나 영역(width, height 등)은 차지한다. 스크린 리더가 읽을 수 없다.

.hidden {
   width: 0;
   height: 0;
   font-size: 0;
   line-height: 0;
}

위와 같이 사이즈를 0으로 지정하는 방법 역시 스크린 리더가 읽을 수 없다.

우리의 목표는 시각적으로 숨기지만 스크린 리더는 읽을 수 있어야 하기 때문에 아래 방법으로 사용하자!

SO-SO

Phark Method 기법

<button>검색</button>
button {
    text-indent: -9999px;
}

추가 태그도 필요없고 해상도의 범위(화면) 밖으로 텍스트만 날려버리는 가장 간단한 고전(?) 방법이다. 하지만 정상적으로 이미지가 로드되지 않은 상황에서 일반 사용자도 대체 텍스트를 확인할 수 없으며, (요즘 디바이스 사양에서는 미미하겠지만) text-indent 속성이 적용된 요소가 많을 때 웹페이지 로드 시 위치값을 그만큼 많이 계산해야 하므로 성능 저하를 불러올 수 있는 단점이 있다.

WA IR 기법

<button>
    <span>검색</span>
</button>
button {
    /* 이미지 버튼 속성 정의 */
}

button span {
    position: relative;
    z-index: -1;
}

추가 태그(span)를 사용하여 이미지 아래로 텍스트를 숨기는 기법이다. 이 방법 역시 적용된 요소가 많을수록 position 속성에 따른 성능 저하 이슈가 있다.

BEST

마지막으로 H5BP(HTML5 Boilerplate) 부트스트랩에서 사용중인 최신 방법이다.

.sr-only {
    position: absolute; /* position: absolute/fixed 에서만 clip 속성 작동 */
    margin: -1px; /* 부트스트랩에선 안씀 */
    width: 1px;
    height: 1px;
    padding: 0;
    border: 0;
    white-space: nowrap;
    overflow: hidden; /* overflow: visible 이면 clip 속성 작동 안됨 */
    clip: rect(0, 0, 0, 0);
    clip-path: inset(50%); /* H5BP에선 안씀 */
}

margin과 clip-path 속성을 제외하고 H5BP나 부트스트랩이나 나머지는 동일하다.

0 사이즈를 피하고자 width와 height를 1px을 준다. 하지만 1px의 공간으로는 텍스트의 공백과 줄바꿈의 계산되지 않기 때문에 (공백은 1개만 표시하고 줄바꿈은 되지 않는) white-space: nowrap으로 정의한다. (스크린 리더가 줄바꿈은 공백으로 해석하지 않아 띄어쓰기가 되지 않은 하나의 긴 단어처럼 읽어준다고 한다.)

'CSS' 카테고리의 다른 글

transform  (0) 2022.02.22
CSS id, class 선택자  (0) 2022.02.16
Selector  (0) 2022.02.15
CSS 색상 표현 방법  (4) 2022.02.07
CSS transform  (2) 2022.02.07
댓글
© 2018 webstoryboy