Skip to content

Commit 6fee8e9

Browse files
committed
feat: ヘッダーコンポーネント作成
1 parent ad12cca commit 6fee8e9

File tree

1 file changed

+94
-4
lines changed

1 file changed

+94
-4
lines changed

2025/src/components/Header.astro

Lines changed: 94 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import VimLogo from "./VimLogo.astro";
33
---
44

55
<header
6-
class="fixed top-0 right-0 left-0 z-50 bg-white/30 backdrop-blur-md transition-all duration-300 border-b border-gray-100"
6+
class="fixed top-0 right-0 left-0 z-50 border-b border-gray-100 bg-white/30 backdrop-blur-md transition-all duration-300"
77
>
88
<div class="container mx-auto px-4">
99
<div class="flex h-16 items-center justify-between">
@@ -55,12 +55,102 @@ import VimLogo from "./VimLogo.astro";
5555
<button
5656
disabled
5757
class="inline-flex h-auto items-center justify-center gap-2 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0"
58+
><span class="opacity-60">EN</span><span class="mx-1">/</span><span
59+
class="font-bold">JA</span
60+
></button
5861
>
59-
<span class="opacity-60">EN</span>
60-
<span class="mx-1">/</span>
61-
<span class="font-bold">JA</span>
62+
</nav>
63+
<div class="flex items-center md:hidden">
64+
<button
65+
class="inline-flex h-auto items-center justify-center gap-2 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0"
66+
><span class="opacity-60">EN</span><span class="mx-1">/</span><span
67+
class="font-bold">JA</span
68+
></button
69+
><button
70+
class="inline-flex h-10 w-10 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0"
71+
aria-label="Toggle menu"
72+
>
73+
<span class="sr-only">Toggle menu</span>
74+
<span id="menu-close" class="hidden">
75+
<svg
76+
xmlns="http://www.w3.org/2000/svg"
77+
width="24"
78+
height="24"
79+
viewBox="0 0 24 24"
80+
fill="none"
81+
stroke="currentColor"
82+
stroke-width="2"
83+
stroke-linecap="round"
84+
stroke-linejoin="round"
85+
class="lucide lucide-x h-6 w-6"
86+
><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path>
87+
</svg>
88+
</span>
89+
<span id="menu-open">
90+
<svg
91+
xmlns="http://www.w3.org/2000/svg"
92+
width="24"
93+
height="24"
94+
viewBox="0 0 24 24"
95+
fill="none"
96+
stroke="currentColor"
97+
stroke-width="2"
98+
stroke-linecap="round"
99+
stroke-linejoin="round"
100+
class="lucide lucide-menu h-6 w-6"
101+
><line x1="4" x2="20" y1="12" y2="12"></line><line
102+
x1="4"
103+
x2="20"
104+
y1="6"
105+
y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg
106+
>
107+
</span>
62108
</button>
109+
</div>
110+
</div>
111+
</div>
112+
<div class="border-t border-gray-100 bg-white md:hidden hidden" id="mobile-menu">
113+
<div class="container mx-auto px-4 py-4">
114+
<nav class="flex flex-col space-y-4">
115+
<a
116+
href="#keynote"
117+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
118+
>基調講演</a
119+
><a
120+
href="#venue"
121+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
122+
>会場</a
123+
><a
124+
href="#about"
125+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
126+
>VimConf とは</a
127+
><a
128+
href="#schedule"
129+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
130+
>スケジュール</a
131+
><a
132+
href="#sponsors"
133+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
134+
>スポンサー</a
135+
><a
136+
href="#staff"
137+
class="py-2 text-sm font-medium transition-colors hover:text-emerald-600"
138+
>スタッフ</a
139+
>
63140
</nav>
64141
</div>
65142
</div>
66143
</header>
144+
145+
<script>
146+
const menuButton = document.querySelector('button[aria-label="Toggle menu"]');
147+
const mobileMenu = document.getElementById("mobile-menu");
148+
const menuOpen = document.getElementById("menu-open");
149+
const menuClose = document.getElementById("menu-close");
150+
menuButton.addEventListener("click", () => {
151+
menuButton.classList.toggle("open");
152+
mobileMenu.classList.toggle("hidden");
153+
menuOpen.classList.toggle("hidden");
154+
menuClose.classList.toggle("hidden");
155+
});
156+
</script>

0 commit comments

Comments
 (0)