@@ -5,8 +5,6 @@ description: >-
55 튜토리얼: 첫 번째 Astro 블로그 구축 — Astro 스크립트 태그를 사용하여 모바일 탐색에 클라이언트 측 상호 작용 기능 추가
66i18nReady : true
77---
8-
9-
108import Blanks from ' ~/components/tutorial/Blanks.astro' ;
119import Box from ' ~/components/tutorial/Box.astro' ;
1210import Checklist from ' ~/components/Checklist.astro' ;
@@ -15,74 +13,65 @@ import Option from '~/components/tutorial/Option.astro';
1513import PreCheck from ' ~/components/tutorial/PreCheck.astro' ;
1614import { Steps } from ' @astrojs/starlight/components' ;
1715
18- 클라이언트 측 상호 작용이 필요한 모바일 화면 크기에서 링크를 열고 닫을 수 있는 햄버거 메뉴를 추가해 보겠습니다.
16+ 클라이언트 측 상호 작용이 필요한 모바일 화면 크기에서 탐색 메뉴를 열고 닫을 수 있는 버튼을 추가해 보겠습니다.
1917
2018<PreCheck >
21- - 햄버거 메뉴 컴포넌트 만들기
19+ - 메뉴 컴포넌트 만들기
2220 - 사이트 방문자가 탐색 메뉴를 열고 닫을 수 있도록 ` <script> ` 작성
2321 - JavaScript를 ` .js ` 파일로 이동
2422</PreCheck >
2523
26- ## 햄버거 컴포넌트 구축
24+ ## 메뉴 컴포넌트 구축
2725
28- 모바일 메뉴를 열고 닫을 수 있는 ` <Hamburger /> ` 컴포넌트를 만듭니다.
26+ 모바일 메뉴를 열고 닫을 수 있는 ` <Menu /> ` 컴포넌트를 만듭니다.
2927
3028<Steps >
31- 1 . ` src/components/ ` 에 ` Hamburger .astro` 라는 파일을 생성합니다.
29+ 1 . ` src/components/ ` 에 ` Menu .astro` 라는 파일을 생성합니다.
3230
33- 2 . 다음 코드를 컴포넌트에 복사합니다. 이는 모바일에서 탐색 링크를 열고 닫는 3줄 "햄버거" 메뉴를 나타냅니다 . (나중에 ` global.css ` 에 새 CSS 스타일을 추가할 것입니다.)
31+ 2 . 다음 코드를 컴포넌트에 복사합니다. 이는 모바일 기기에서 탐색 링크의 표시 여부를 전환하는 데 사용될 버튼을 생성합니다 . (나중에 ` global.css ` 에 새 CSS 스타일을 추가할 것입니다.)
3432
35- ``` astro title="src/components/Hamburger .astro"
33+ ``` astro title="src/components/Menu .astro"
3634 ---
3735 ---
38- <div class="hamburger">
39- <span class="line"></span>
40- <span class="line"></span>
41- <span class="line"></span>
42- </div>
36+ <button aria-expanded="false" aria-controls="main-menu" class="menu">
37+ Menu
38+ </button>
4339 ```
4440
45- 3 . 이 새로운 ` <Hamburger /> ` 컴포넌트를 ` Header.astro ` 의 ` <Navigation /> ` 컴포넌트 바로 앞에 배치하세요.
41+ 3 . 이 새로운 ` <Menu /> ` 컴포넌트를 ` Header.astro ` 의 ` <Navigation /> ` 컴포넌트 바로 앞에 배치하세요.
4642
4743 <details >
4844 <summary >코드를 확인하세요!</summary >
4945
5046 ``` astro title="src/components/Header.astro" ins={2,7}
5147 ---
52- import Hamburger from './Hamburger .astro';
48+ import Menu from './Menu .astro';
5349 import Navigation from './Navigation.astro';
5450 ---
5551 <header>
5652 <nav>
57- <Hamburger />
53+ <Menu />
5854 <Navigation />
5955 </nav>
6056 </header>
6157 ```
6258 </details >
6359
64- 4 . 햄버거 컴포넌트에 다음 스타일을 추가합니다 .
60+ 4 . 메뉴 컴포넌트에 다음 스타일을 추가하세요. 여기에는 반응형 스타일도 포함됩니다 .
6561
66- ``` css title="src/styles/global.css" ins={2-13, 56-58 }
62+ ``` css title="src/styles/global.css" ins={2-9, 33-35, 51-53 }
6763 /* nav 스타일 */
68- .hamburger {
69- padding-right : 20px ;
70- cursor : pointer ;
71- }
72-
73- .hamburger .line {
74- display : block ;
75- width : 40px ;
76- height : 5px ;
77- margin-bottom : 10px ;
78- background-color : #ff9776 ;
64+ .menu {
65+ background-color : #0d0950 ;
66+ border : none ;
67+ color : #fff ;
68+ font-size : 1.2rem ;
69+ font-weight : bold ;
70+ padding : 5px 10px ;
7971 }
8072
8173 .nav-links {
8274 width : 100% ;
83- top : 5rem ;
84- left : 48px ;
85- background-color : #ff9776 ;
8675 display : none ;
8776 margin : 0 ;
8877 }
@@ -95,13 +84,15 @@ import { Steps } from '@astrojs/starlight/components';
9584 font-size : 1.2rem ;
9685 font-weight : bold ;
9786 text-transform : uppercase ;
87+ color : #0d0950 ;
9888 }
99-
100- .nav-links a :hover , a :focus {
89+
90+ .nav-links a :hover ,
91+ .nav-links a :focus {
10192 background-color : #ff9776 ;
10293 }
10394
104- . expanded {
95+ :has ( .menu [ aria- expanded= " true " ]) .nav-links {
10596 display : unset ;
10697 }
10798
@@ -119,7 +110,7 @@ import { Steps } from '@astrojs/starlight/components';
119110 padding : 15px 20px ;
120111 }
121112
122- .hamburger {
113+ .menu {
123114 display : none ;
124115 }
125116 }
@@ -128,18 +119,21 @@ import { Steps } from '@astrojs/starlight/components';
128119
129120## 첫 번째 스크립트 태그 작성
130121
131- 탐색 링크를 표시하거나 숨기기 위해 햄버거 메뉴를 클릭하는 등의 사용자 입력에 응답할 수 없기 때문에 헤더는 아직 ** 대화형** 이 아닙니다.
122+ 탐색 링크를 표시하거나 숨기기 위해 메뉴를 클릭하는 등의 사용자 입력에 응답할 수 없기 때문에 헤더는 아직 ** 대화형** 이 아닙니다.
132123
133124` <script> ` 태그를 추가하면 클라이언트 측 JavaScript가 사용자 이벤트를 '수신'한 후 그에 따라 응답합니다.
134125
135126<Steps >
1361271 . ` index.astro ` 의 닫는 ` </body> ` 태그 바로 앞에 다음 ` <script> ` 태그를 추가합니다.
137128
138- ``` astro title="src/pages/index.astro" ins={2-6 }
129+ ``` astro title="src/pages/index.astro" ins={2-9 }
139130 <Footer />
140131 <script>
141- document.querySelector('.hamburger')?.addEventListener('click', () => {
142- document.querySelector('.nav-links')?.classList.toggle('expanded');
132+ const menu = document.querySelector('.menu');
133+
134+ menu.addEventListener('click', () => {
135+ const isExpanded = menu.getAttribute('aria-expanded') === 'true';
136+ menu.setAttribute('aria-expanded', !isExpanded);
143137 });
144138 </script>
145139 </body>
@@ -156,26 +150,32 @@ import { Steps } from '@astrojs/starlight/components';
1561501 . ` src/scripts/menu.js ` 를 생성하고 (새 ` /scripts/ ` 폴더를 생성해야 함) JavaScript를 해당 폴더로 이동합니다.
157151
158152 ``` js title="src/scripts/menu.js"
159- document .querySelector (' .hamburger' ).addEventListener (' click' , () => {
160- document .querySelector (' .nav-links' ).classList .toggle (' expanded' );
153+ const menu = document .querySelector (' .menu' );
154+
155+ menu .addEventListener (' click' , () => {
156+ const isExpanded = menu .getAttribute (' aria-expanded' ) === ' true' ;
157+ menu .setAttribute (' aria-expanded' , ! isExpanded);
161158 });
162159 ```
163160
1641612 . ` index.astro ` 의 ` <script> ` 태그 내용을 다음 파일 가져오기로 바꿉니다.
165162
166- ``` astro title="src/pages/index.astro" ins={7} del={3-5 }
163+ ``` astro title="src/pages/index.astro" ins={7} del={3-8 }
167164 <Footer />
168165 <script>
169- document.querySelector('.hamburger')?.addEventListener('click', () => {
170- document.querySelector('.nav-links')?.classList.toggle('expanded');
166+ const menu = document.querySelector('.menu');
167+
168+ menu.addEventListener('click', () => {
169+ const isExpanded = menu.getAttribute('aria-expanded') === 'true';
170+ menu.setAttribute('aria-expanded', !isExpanded);
171171 });
172172
173173 import "../scripts/menu.js";
174174 </script>
175175 </body>
176176 ```
177177
178- 3 . 더 작은 크기로 브라우저 미리보기를 다시 확인하고 햄버거 메뉴가 여전히 탐색 링크를 열고 닫는지 확인하세요.
178+ 3 . 더 작은 크기로 브라우저 미리보기를 다시 확인하고 메뉴가 여전히 탐색 링크를 열고 닫는지 확인하세요.
179179
1801804 . 가져오기와 동일한 ` <script> ` 를 다른 두 페이지인 ` about.astro ` 및 ` blog.astro ` 에 추가하고 각 페이지에 반응형 대화형 헤더가 있는지 확인하세요.
181181
0 commit comments