CSS

[웹 접근성] 키보드로 gnb탐색하기 (Only CSS / dl, dt, dd, :focus-within)

728x90
반응형

접 접근성이란?

장애여부와 상관없이 모든 사람이 사이트를 동일한 경험을 하는 것 (정보를 얻을 수 있게 얻는 것)

 

가이드 바로가기 https://accessibility.naver.com/accessibility

 

 

ol, li - 순서가 있는 목록

ul, li- 순서가 없는 목록

dl,dt,dd - 설명 목록을 만듦

 

대체로 li나 dl을 사용하는데, dl을 사용하면 하위 요소를 dt, dd로 두 개로 구분할 수 있다.

 dt는 이름, dl은 값이라서 gnb2를 특정하는데도 의미와 의도에 문제가 없다. (시멘틱 마크업 OK)

키보드로 이동할 때, dl> dt> dd로 올바르게 움직인다.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/css/layout.css" type="text/css">
</head>

<body>
    <header>
        <div>
            <h1><a href="/">로고</a></h1>
            <nav id="top-menu">a
                <dl>
                    <dt><a href="/info/intro" title="센터소개">센터소개</a></dt>
                    <dd>
                        <a href="/info/intro" title="센터소개">센터소개</a>
                        <a href="/info/history" title="센터소개">연혁 및 조직</a>
                        <a href="/info/map" title="찾아오시는 길">찾아오시는 길</a>
                    </dd>
                </dl>
                <dl>
                    <dt><a href="/guide/price" title="이용안내">이용안내</a></dt>
                    <dd>
                        <a href="/guide/car" title="운영현황">운영현황</a>
                        <a href="/guide/price" title="이용안내">이용안내</a>
                        <a href="/guide/app" title="어플리케이션안내">어플리케이션안내</a>
                        <a href="/guide/web" title="홈페이지접수안내">홈페이지접수안내</a>
                    </dd>
                </dl>
                <dl>
                    <dt><a href="/reserv/booking">인터넷접수</a></dt>
                    <dd>
                        <a href="/reserv/booking">예약 즉시콜</a>
                        <a href="/reserv/list">이용내역</a>
                        <a href="/reserv/bookmark">즐겨찾기</a>
                    </dd>
                </dl>
                <dl>
                    <dt><a href="/cs/sub01">고객센터</a></dt>
                    <dd>
                        <a href="/cs/sub01">공지사항</a>
                    </dd>
                </dl>

                <ul>
                    <li><a href="/my/sub02">로그인</a></li>
                    <li><a href="/my/join">회원가입</a></li>
                </ul>
            </nav>
        </div>
    </header>
</body>

</html>

 

css는 아래와 같다. 중요한 부분은 주석에 적었다.

@charset "utf-8";

body {font-size: 16px}
header {position:sticky; width:100%; height: 80px; top: 0; background: rgba(28,28,30,.8); z-index: 100}
header div {position: relative; width: 1200px; margin: 0 auto; font-family: 'NanumSquare', sans-serif}
header div h1 {position: absolute; top: 5px; left: 10px; width: 210px; height: 70px; text-indent: -9000px; background-image: url("../images/logo_gunpo.png")}
header div h1 a {display: block; width: inherit; height: inherit}
header div nav {position:absolute; top: 25px; left: 25%; width: 70%; display: flex; justify-content: flex-start; z-index: 50}
header div nav dl {position: relative; min-width: 160px; line-height: 30px; text-align: center}
header div nav dl dt {font-size: 1.2em; height: 55px; line-height: 35px;}
header div nav dl dt a { color: #fff}
header div nav dl dt a:hover {color: #33d7de}

/* 1. 초기화면에서 dd는 안 보임 */
header div nav dl dd {display: none; padding:10px 0; border-radius:0 0 10px 10px; border-top: none; background: rgba(28,28,30,.8)}

header div nav dl dd a {display: block; margin-bottom: 10px; white-space: nowrap; color: #fff;}
header div nav dl dd a:hover {color: #33d7de}
header div nav dl:hover dt {color: #33d7de}

/* 2. dl hover시, dd 보임 */
header div nav dl:hover dd{display: block}

/* 3. dl의 하위요소(dt, dd)에 fouce되었을때, dd 보임 */
header div nav dl:focus-within dd{display: block}

header div nav > ul {position: relative; display: flex; align-items:flex-start; padding-left: 50px}
header div nav > ul li {margin-right: 30px; line-height: 30px}
header div nav > ul li a {display:block; padding:0 5px; white-space: nowrap; color: #fff; background: #2f2f32}
header div nav > ul li a:hover {color: #fff}

:foucus-within이 아주 요긴했다.

 

 

마우스 hover
키보드 fouce

728x90
반응형