Skip to content

Commit d6fc734

Browse files
committed
fix/ replace hamburger menu with dialog element
1 parent 31a9c6a commit d6fc734

File tree

2 files changed

+54
-13
lines changed

2 files changed

+54
-13
lines changed

apps/web/app/components/GlobalHeader.vue

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const onSwitchLocale = () => {
1717
const { width } = useWindowSize()
1818
const { orientation } = useScreenOrientation()
1919
const shouldShowSpHeader = ref()
20+
const dialogRef = ref<HTMLDialogElement>()
2021
onMounted(() => {
2122
shouldShowSpHeader.value = width.value <= 1200
2223
})
@@ -27,6 +28,11 @@ watch([width, orientation], () => {
2728
const showMenu = ref(false)
2829
2930
const toggleMenu = () => {
31+
if (showMenu.value) {
32+
dialogRef.value!.close()
33+
} else {
34+
dialogRef.value!.show()
35+
}
3036
showMenu.value = !showMenu.value
3137
}
3238
@@ -48,26 +54,33 @@ const getAnchorPath = computed(
4854
class="navigation-mobile-toggle"
4955
name="menu"
5056
:class="{ 'isOpened': showMenu }"
57+
:aria-expanded="showMenu"
58+
aria-controls="navigation-mobile-menu-trigger"
59+
:aria-label="showMenu ? 'メニューを閉じる' : 'メニューを開く'"
5160
@click="toggleMenu"
5261
>
5362
<span /><span /><span />
5463
</button>
5564
<!-- <VFIcon name="menu" color="vue-blue" can-hover @click="toggleMenu" /> -->
5665
</div>
5766
<!-- hamburger-menu -->
58-
<Transition name="slide-down">
59-
<div v-show="showMenu" class="navigation-mobile-menu">
60-
<div>
61-
<ul>
62-
<li v-for="link in navLinks" :key="link.anchor">
63-
<nuxt-link :to="getAnchorPath(link.anchor)" @click="toggleMenu">
64-
<VFTypography variant="heading/200" color="vue-blue">{{ link.text }}</VFTypography>
65-
</nuxt-link>
66-
</li>
67-
</ul>
68-
</div>
69-
</div>
70-
</Transition>
67+
<!-- eslint-disable vuejs-accessibility/no-autofocus -->
68+
<dialog
69+
id="navigation-mobile-menu-trigger"
70+
ref="dialogRef"
71+
autofocus
72+
aria-label="ハンバーガーメニュー"
73+
class="navigation-mobile-menu"
74+
>
75+
<!-- eslint-enable vuejs-accessibility/no-autofocus -->
76+
<ul>
77+
<li v-for="link in navLinks" :key="link.anchor">
78+
<nuxt-link :to="getAnchorPath(link.anchor)" @click="toggleMenu">
79+
<VFTypography variant="heading/200" color="vue-blue">{{ link.text }}</VFTypography>
80+
</nuxt-link>
81+
</li>
82+
</ul>
83+
</dialog>
7184
</VFSpHeader>
7285
<VFHeader v-else>
7386
<div class="navigation-pc">
@@ -95,6 +108,7 @@ const getAnchorPath = computed(
95108
align-items: center;
96109
gap: calc(var(--unit) * 2);
97110
margin-right: 27px;
111+
z-index: 10;
98112
}
99113
100114
.navigation-mobile-menu {
@@ -104,6 +118,22 @@ const getAnchorPath = computed(
104118
width: 100vw;
105119
text-align: center;
106120
background-color: var(--color-white);
121+
z-index: 1;
122+
123+
width: 100%;
124+
border: 0;
125+
transition:
126+
translate 0.6s cubic-bezier(0.4, 0, 0.2, 1),
127+
display 0.6s cubic-bezier(0.4, 0, 0.2, 1) allow-discrete;
128+
translate: 0 -100%;
129+
130+
&[open] {
131+
translate: 0 0;
132+
133+
@starting-style {
134+
translate: 0 -100%;
135+
}
136+
}
107137
108138
& > div {
109139
padding: calc(var(--unit) * 5) 0;

packages/ui/components/common/SpHeader.vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,20 @@ header {
3939
display: flex;
4040
align-items: center;
4141
justify-content: space-between;
42+
&::before {
43+
content: '';
44+
position: absolute;
45+
top: 0;
46+
left: 0;
47+
width: 100%;
48+
height: 100%;
49+
background-color: var(--color-white);
50+
z-index: 5;
51+
}
4252
}
4353
.link {
4454
line-height: 0;
55+
z-index: 10;
4556
}
4657
.logo {
4758
height: 32px;

0 commit comments

Comments
 (0)