/* PC, 모바일용으로 사용된 이미지 내에서 의미있는 텍스트의 대체텍스트를 제공할 떄 */
.ir {
display: block;
overflow: hidden;
font-size: 1px;
line-height: 0;
text-indent: -9999px;
color: transparent;
}
// /common/Header/index.jsx
import { Navbar } from '../Navbar';
import * as S from './style';
export const Header = () => {
return (
<S.HeaderContainer>
<S.HeaderTitleLink to='/'>
<S.HeaderTitle>HOW ABOUT OOTD</S.HeaderTitle>
</S.HeaderTitleLink>
<Navbar />
<S.MenuButton>
<span className='ir'>메뉴 열기 버튼</span>
</S.MenuButton>
<S.SearchButton>
<span className='ir'>검색 버튼</span>
</S.SearchButton>
</S.HeaderContainer>
);
};
현재 하오샵의 헤더는 브라우저 너비가 1024px 이상인 경우에는 <Navbar />
컴포넌트가 이하인 경우에는 MenuButton
과 SearchButton
버튼이 나오도록 작성하였다.
우리가 봐야할 것은 1024px 이하인 경우의 MenuButton
과 SearchButton
이다.
// common/Header/style.js
export const MenuButton = styled.button`
display: none;
@media screen and (max-width: ${({ theme }) => theme.breakpoint.lg}) {
display: block;
width: 28px;
height: 28px;
background: url('/assets/icons/icon-menu.svg') no-repeat center / 28px 28px;
}
}
MenuButon
스타일을 보면 버튼의 background
는 url('/assets/icons/icon-menu.svg')
로 아이콘이 나오도록 설정하고, <span className='ir'>메뉴 열기 버튼</span>
안에 텍스트는 메뉴 열기 버튼으로 ir 기법
을 사용했다.
그러면 다음과 같이 화면에 렌더링되는 것을 볼 수 있다.
텍스트는 보이지 않고 다음처럼 아이콘만 표시되었다. 그러면 스크린 리더가 어떻게 읽는지 확인해보자.
이렇게 해당 버튼이 어떤 기능을 하는 버튼인지 IR 기법을 활용하면 스크린리더가 읽어줌으로써 웹 접근성을 보다 높일 수 있다.
정말 div
태그만 있기도 했고, 저렇게 그냥 svg를 넣어서 스크린 리더가 읽지 않고 그냥 넘어갔는데 웹 접근성을 위해 IR 기법을 사용해 개선해보았다.