Skip to content

Commit a06dcf1

Browse files
committed
fix: overlay the mobile menu instead of shoving the page down
1 parent 5691338 commit a06dcf1

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

src/components/Nav.astro

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)