@@ -17,6 +17,7 @@ const onSwitchLocale = () => {
17
17
const { width } = useWindowSize ()
18
18
const { orientation } = useScreenOrientation ()
19
19
const shouldShowSpHeader = ref ()
20
+ const dialogRef = ref <HTMLDialogElement >()
20
21
onMounted (() => {
21
22
shouldShowSpHeader .value = width .value <= 1200
22
23
})
@@ -27,6 +28,11 @@ watch([width, orientation], () => {
27
28
const showMenu = ref (false )
28
29
29
30
const toggleMenu = () => {
31
+ if (showMenu .value ) {
32
+ dialogRef .value ! .close ()
33
+ } else {
34
+ dialogRef .value ! .show ()
35
+ }
30
36
showMenu .value = ! showMenu .value
31
37
}
32
38
@@ -48,26 +54,31 @@ const getAnchorPath = computed(
48
54
class =" navigation-mobile-toggle"
49
55
name =" menu"
50
56
:class =" { 'isOpened': showMenu }"
57
+ :aria-expanded =" showMenu"
58
+ aria-controls =" navigation-mobile-menu-trigger"
59
+ :aria-label =" showMenu ? 'メニューを閉じる' : 'メニューを開く'"
51
60
@click =" toggleMenu"
52
61
>
53
62
<span /><span /><span />
54
63
</button >
55
64
<!-- <VFIcon name="menu" color="vue-blue" can-hover @click="toggleMenu" /> -->
56
65
</div >
57
66
<!-- 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
+ <dialog id =" navigation-mobile-menu-trigger" ref =" dialogRef" class =" navigation-mobile-menu" >
68
+ <ul >
69
+ <li v-for =" (link, index) in navLinks" :key =" link.anchor" >
70
+ <!-- eslint-disable vuejs-accessibility/no-autofocus -->
71
+ <nuxt-link
72
+ :to =" getAnchorPath(link.anchor)"
73
+ :autofocus =" index === 0 && true"
74
+ @click =" toggleMenu"
75
+ >
76
+ <!-- eslint-enable vuejs-accessibility/no-autofocus -->
77
+ <VFTypography variant =" heading/200" color =" vue-blue" >{{ link.text }}</VFTypography >
78
+ </nuxt-link >
79
+ </li >
80
+ </ul >
81
+ </dialog >
71
82
</VFSpHeader >
72
83
<VFHeader v-else >
73
84
<div class =" navigation-pc" >
@@ -95,6 +106,7 @@ const getAnchorPath = computed(
95
106
align-items : center ;
96
107
gap : calc (var (--unit ) * 2 );
97
108
margin-right : 27px ;
109
+ z-index : 10 ;
98
110
}
99
111
100
112
.navigation-mobile-menu {
@@ -104,9 +116,23 @@ const getAnchorPath = computed(
104
116
width : 100vw ;
105
117
text-align : center ;
106
118
background-color : var (--color-white );
119
+ padding : calc (var (--unit ) * 5 ) 0 ;
120
+ border : 0 ;
121
+ transition :
122
+ translate 0.6s cubic-bezier (0.4 , 0 , 0.2 , 1 ),
123
+ display 0.6s cubic-bezier (0.4 , 0 , 0.2 , 1 ) allow-discrete;
124
+ z-index : 1 ;
125
+
126
+ &[open ] {
127
+ translate : 0 0 ;
128
+
129
+ @starting-style {
130
+ translate : 0 -100 dvh;
131
+ }
132
+ }
107
133
108
- & > div {
109
- padding : calc ( var ( --unit ) * 5 ) 0 ;
134
+ &:not ([ open ]) {
135
+ translate : 0 -100 dvh ;
110
136
}
111
137
112
138
ul {
0 commit comments