@@ -49,7 +49,7 @@ const DIRT = SEQ_MOUND.map((f) => frameToSvg(f, { scale: 2, outline: false }))
4949---
5050
5151<header
52- class =" sticky top-0 z-30 border-b border-[var(--color-edge-soft)] bg-[var(--color-ink)]/92 backdrop-blur"
52+ class =" sticky top-0 z-30 isolate border-b border-[var(--color-edge-soft)] bg-[var(--color-ink)]/92 backdrop-blur"
5353>
5454 <div class =" mx-auto flex h-14 max-w-6xl items-center gap-6 px-5" >
5555 <a
@@ -160,10 +160,13 @@ const DIRT = SEQ_MOUND.map((f) => frameToSvg(f, { scale: 2, outline: false }))
160160
161161 여는 방식은 흙을 걷어내는 모양으로 한다. `clip-path` 를 몇 칸으로 끊어서
162162 위에서 아래로 파내려간다. 스르륵 내려오면 이 사이트의 다른 움직임과 결이 달라진다.
163+
164+ 본문 위에 덮는다. 흐름에 두면 열 때마다 히어로가 통째로 아래로 밀린다.
165+ 메뉴를 잠깐 보려던 것뿐인데 읽던 자리가 사라지는 셈이라 낯설게 느껴진다.
163166 -->
164167 <div
165168 id =" menu"
166- class =" menu-sheet overflow-hidden border-b-[3px] border-[var(--color-soil-line)] bg-[var(--color-ink)] md:hidden"
169+ class =" menu-sheet absolute inset-x-0 top-full z-40 overflow-hidden border-b-[3px] border-[var(--color-soil-line)] bg-[var(--color-ink)] md:hidden"
167170 data-menu
168171 hidden
169172 >
@@ -202,6 +205,8 @@ const DIRT = SEQ_MOUND.map((f) => frameToSvg(f, { scale: 2, outline: false }))
202205 .menu-sheet {
203206 clip-path: inset(0 0 100% 0);
204207 transition: clip-path 220ms steps(4, end);
208+ /* 본문 위에 떠 있다는 표시. 흐릿하게 번지지 않고 한 칸 밀어서 찍는다 */
209+ box-shadow: 0 6px 0 rgb(0 0 0 / 0.45);
205210 }
206211 .menu-sheet[data-open] {
207212 clip-path: inset(0 0 0 0);
@@ -265,6 +270,18 @@ const DIRT = SEQ_MOUND.map((f) => frameToSvg(f, { scale: 2, outline: false }))
265270 for (const link of sheet.querySelectorAll('a')) {
266271 link.addEventListener('click', () => setOpen(false))
267272 }
273+
274+ // 본문을 덮고 있으니 뒤를 눌러 닫을 수 있어야 한다
275+ addEventListener('click', (e) => {
276+ if (btn.getAttribute('aria-expanded') !== 'true') return
277+ const at = e.target as Node
278+ if (!sheet.contains(at) && !btn.contains(at)) setOpen(false)
279+ })
280+
281+ // 스크롤하면 닫는다. 덮은 채로 따라다니면 읽는 걸 방해한다.
282+ addEventListener('scroll', () => {
283+ if (btn.getAttribute('aria-expanded') === 'true') setOpen(false)
284+ }, { passive: true })
268285 }
269286
270287 const nav = document.querySelector<HTMLElement>('[data-burrow-nav]')
0 commit comments