본문으로 건너뛰기
웹 프로젝트 기초집LESSON 11

메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기

난이도초급
예상 시간45분
선수지식10강 데이터 기반 DOM 카드

11강. 메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기

1. 이번 강의에서 해결할 문제​

작은 화면에서 메뉴가 공간을 차지하거나 CSS로만 숨겨 키보드 초점이 보이지 않는 곳에 남습니다. 실제 버튼과 hidden 상태를 연결합니다.

2. 학습 목표​

3. 핵심 개념​

메뉴를 여는 요소는 button이고 aria-controls가 대상 id를 가리킵니다. 표시 상태와 aria-expanded를 한 함수에서 동기화합니다. 기본 앵커 이동을 보존하면 JavaScript가 꺼져도 링크가 작동합니다.

4. 단계별 실습​

HTML · 헤더 내비게이션 교체

game-dev-portfolio/index.html
<button id="menuButton" class="menu-button" type="button" aria-expanded="false" aria-controls="siteNav">메뉴 열기</button>
<nav id="siteNav" aria-label="주요 메뉴" hidden>
<a href="#about">소개</a><a href="#projects">프로젝트</a><a href="#contact">연락처</a>
</nav>

JavaScript · 파일 경로: js/app.js에 추가

game-dev-portfolio/js/app.js
const menuButton = document.querySelector('#menuButton');
const siteNav = document.querySelector('#siteNav');

function setMenuOpen(open) {
menuButton.setAttribute('aria-expanded', String(open));
menuButton.textContent = open ? '메뉴 닫기' : '메뉴 열기';
siteNav.hidden = !open;
}

menuButton.addEventListener('click', () => {
setMenuOpen(menuButton.getAttribute('aria-expanded') !== 'true');
});

siteNav.addEventListener('click', (event) => {
if (event.target.matches('a[href^="#"]')) setMenuOpen(false);
});

CSS · 파일 경로: css/style.css

game-dev-portfolio/css/style.css
[hidden] { display: none !important; }
.menu-button { min-height: 44px; }
@media (min-width: 48rem) {
.menu-button { display: none; }
#siteNav { display: flex !important; }
}

개발자 도구 확인: 320px에서 Elements의 hidden, aria-expanded가 함께 변하는지 봅니다. JavaScript를 비활성화하면 메뉴 링크가 HTML에 남도록 개선할 방법도 기록합니다.

5. 코드가 동작하는 이유​

버튼의 기본 키보드 처리가 Enter와 Space를 지원합니다. hidden은 렌더링과 접근성 트리에서 메뉴를 함께 제거하고, 앵커 링크는 브라우저 기본 섹션 이동을 사용합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기” 실습 결과를 해석하는 올바른 기준은 무엇인가요?
  2. 문제 2‘시각적으로만 메뉴를 이동’ 실수를 판단할 때 “메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

11강. 메뉴와 스크롤: 접근 가능한 내비게이션과 섹션 이동 만들기 미완료 상태