Skip to content

Commit 2e9dcdd

Browse files
committed
feat: improve menu responsiveness
1 parent 38b76c3 commit 2e9dcdd

File tree

2 files changed

+78
-36
lines changed

2 files changed

+78
-36
lines changed

src/views/components/LightSwitch.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<button @click="toggleScheme">
33
<svg
44
v-if="isDark"
5-
:class="tw`w-5`"
5+
:class="tw`w-4 md:w-5`"
66
xmlns="http://www.w3.org/2000/svg"
77
viewBox="0 0 20 20"
88
fill="currentColor"
@@ -15,7 +15,7 @@
1515
</svg>
1616
<svg
1717
v-else
18-
:class="tw`w-4`"
18+
:class="tw`w-4 md:w-5`"
1919
xmlns="http://www.w3.org/2000/svg"
2020
viewBox="0 0 20 20"
2121
fill="currentColor"

src/views/components/MainNav.vue

Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,62 @@
11
<template>
22
<ul :class="classes.wrapper">
3-
<router-link :class="tw`mr-6`" to="/">
4-
<img
5-
:class="
6-
tw`w-6 transition ease-in-out duration-200 transform scale-100 hover:scale-110`
7-
"
8-
src="@/views/assets/images/logo-detailed.svg"
9-
alt="Vue Zephyrs"
10-
/>
11-
</router-link>
12-
<ul :class="tw`flex items-center space-x-4`">
13-
<li>
14-
<Link to="/docs/install" variant="button">Documentation</Link>
3+
<div :class="tw`flex items-stretch justify-between`">
4+
<router-link :class="tw`mr-2 flex items-center`" to="/">
5+
<img
6+
:class="[tw`w-9 p-2.5`, classes.options.item]"
7+
src="@/views/assets/images/logo-detailed.svg"
8+
alt="Vue Zephyrs"
9+
/>
10+
<span :class="tw`inline-block md:hidden mt-0.5 ml-3 font-bold text-lg`"
11+
>Vue Zephyrs</span
12+
>
13+
</router-link>
14+
<button
15+
@click="navIsOpen = !navIsOpen"
16+
:class="[classes.options.item, tw`md:hidden`]"
17+
>
18+
<svg
19+
:class="tw`w-4`"
20+
xmlns="http://www.w3.org/2000/svg"
21+
fill="none"
22+
viewBox="0 0 24 24"
23+
stroke="currentColor"
24+
>
25+
<path
26+
stroke-linecap="round"
27+
stroke-linejoin="round"
28+
stroke-width="2"
29+
d="M4 6h16M4 12h16M4 18h16"
30+
/>
31+
</svg>
32+
</button>
33+
</div>
34+
<ul :class="classes.nav.wrapper">
35+
<li :class="classes.nav.item">
36+
<div :class="tw`inline-block`" @click="navIsOpen = false">
37+
<Link to="/docs/install" variant="button">Documentation</Link>
38+
</div>
1539
</li>
16-
<li>
17-
<Link to="/guides" variant="button">Guides</Link>
40+
<li :class="classes.nav.item">
41+
<div :class="tw`inline-block`" @click="navIsOpen = false">
42+
<Link to="/guides" variant="button">Guides</Link>
43+
</div>
1844
</li>
19-
<li>
20-
<Anchor href="https://twitter.com/usezephyr" variant="button" newTab>
21-
Updates
22-
</Anchor>
45+
<li :class="classes.nav.item">
46+
<div :class="tw`inline-block`" @click="navIsOpen = false">
47+
<Anchor href="https://twitter.com/usezephyr" variant="button" newTab>
48+
Updates
49+
</Anchor>
50+
</div>
2351
</li>
2452
</ul>
25-
<div :class="tw`flex items-center ml-auto space-x-2`">
26-
<LightSwitch
27-
:class="
28-
tw`items-center inline-flex space-x-2 uppercase cursor-pointer select-none text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2.5 py-2 rounded hover:(bg(green-100 dark:gray-700 opacity-50 dark:opacity-50))`
29-
"
30-
/>
53+
<div :class="classes.options.wrapper">
54+
<LightSwitch :class="[classes.options.item, tw`px-3`]" />
3155
<Dropdown>
32-
<DropdownButton
33-
as="button"
34-
classAppend="items-center uppercase cursor-pointer inline-flex space-x-2 text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2.5 py-2 rounded hover:(bg(green-100 dark:gray-700 opacity-50 dark:opacity-50))"
35-
>
56+
<DropdownButton as="button" :class="classes.options.item">
3657
<div>{{ locale === "zh-CN" ? "中文" : locale }}</div>
3758
<svg
38-
:class="tw`w-5`"
59+
:class="tw`w-4 md:w-5`"
3960
xmlns="http://www.w3.org/2000/svg"
4061
viewBox="0 0 20 20"
4162
fill="currentColor"
@@ -62,7 +83,7 @@
6283
</template>
6384

6485
<script lang="ts">
65-
import { defineComponent, computed } from "vue";
86+
import { defineComponent, computed, ref } from "vue";
6687
import { tw } from "twind";
6788
import { toTitleCase } from "@/views/utils/stringMods";
6889
import { locale, updateLocale } from "@/views/utils/locale";
@@ -75,6 +96,7 @@ export default defineComponent({
7596
Link,
7697
},
7798
setup() {
99+
const navIsOpen = ref(false);
78100
const links = [
79101
{
80102
href: null,
@@ -96,12 +118,32 @@ export default defineComponent({
96118
];
97119
const classes = computed(() => {
98120
return {
99-
wrapper: tw(
100-
"relative z-10 flex items-center rounded py-4 px-8 bg-gray-50 dark:bg-gray-800"
101-
),
121+
wrapper: tw`relative z-10 flex flex-col md:flex-row items-stretch rounded p-5 md:(px-8 px-6) bg-gray-50 dark:bg-gray-800`,
122+
nav: {
123+
wrapper: [
124+
!navIsOpen.value ? tw`hidden md:flex` : tw`flex`,
125+
tw`flex-col md:flex-row md:items-center md:space-x-2 border-y border-gray-200 dark:border-gray-700 my-4 py-4 md:(border-0 py-0 my-0)`,
126+
],
127+
item: "",
128+
},
129+
options: {
130+
wrapper: [
131+
!navIsOpen.value ? tw`hidden md:flex` : tw`flex`,
132+
tw`items-stretch justify-between md:justify-start md:ml-auto space-x-2`,
133+
],
134+
item: tw`text-sm md:text-base items-center flex space-x-2 uppercase cursor-pointer select-none text(gray-500 dark:gray-300 hover:dark:white hover:green-700) px-2 py-1.5 md:px-2.5 md:py-2 rounded bg-gray-100 dark:bg-gray-700 hover:(bg(green-100 dark:gray-600 opacity-50 dark:opacity-50))`,
135+
},
102136
};
103137
});
104-
return { tw, links, updateLocale, locale, classes, toTitleCase };
138+
return {
139+
tw,
140+
links,
141+
updateLocale,
142+
locale,
143+
classes,
144+
toTitleCase,
145+
navIsOpen,
146+
};
105147
},
106148
});
107149
</script>

0 commit comments

Comments
 (0)