修正移动端样式

This commit is contained in:
Jeffrey Hsu 2024-11-05 14:23:49 +08:00
parent aab7ab5a67
commit 90fabfff12
2 changed files with 30 additions and 19 deletions

View File

@ -2,7 +2,7 @@
import {getAssetURL} from "@/utils/function.ts"; import {getAssetURL} from "@/utils/function.ts";
import NavBarEntryItem from "@/components/nav/NavBarEntryItem.vue"; import NavBarEntryItem from "@/components/nav/NavBarEntryItem.vue";
import {computed} from "vue"; import {computed, ref} from "vue";
type Widget = { type Widget = {
icon: string[] icon: string[]
@ -30,6 +30,7 @@ const littleWidget: Widget[] = [
const logoUrl = getAssetURL("logo-c.png") const logoUrl = getAssetURL("logo-c.png")
const logoType: string = "logo"; const logoType: string = "logo";
const showLogo = computed(() => logoType === 'text') const showLogo = computed(() => logoType === 'text')
const isExpended = ref<boolean>(true)
const entry = [ const entry = [
{ {
@ -75,29 +76,39 @@ const entry = [
entry: [] entry: []
} }
] ]
const menuExpanded = () => {
isExpended.value = !isExpended.value
}
</script> </script>
<template> <template>
<nav <nav class="fixed z-20 h-16 w-full bg-white bg-opacity-70 text-gray-600 shadow backdrop-blur-md">
class="fixed z-20 h-16 w-full bg-white bg-opacity-70 text-gray-600 shadow backdrop-blur-md"
>
<div class="container mx-auto flex h-16 w-full items-center justify-between px-4 md:px-0 xl:max-w-screen-xl"> <div class="container mx-auto flex h-16 w-full items-center justify-between px-4 md:px-0 xl:max-w-screen-xl">
<!-- 下拉菜单按钮 --> <!-- 下拉菜单按钮 -->
<div class="flex h-8 w-10 rounded-md border-gray-600 md:hidden justify-center items-center"> <div class="flex h-8 w-10 items-center justify-center rounded-md border-gray-600 md:hidden"
@click="menuExpanded"
>
<font-awesome-icon :icon="['fas', 'bars']" class="h-6"/> <font-awesome-icon :icon="['fas', 'bars']" class="h-6"/>
</div> </div>
<!-- Logo --> <!-- Logo -->
<div class="absolute left-1/2 -translate-x-1/2 md:relative md:translate-x-0 md:left-0"> <div class="absolute left-1/2 -translate-x-1/2 md:relative md:left-0 md:translate-x-0">
<!-- 文字模式 -->
<div v-if="showLogo" class="h-full text-4xl min-w-16 logo py-3.5"> <div v-if="showLogo" class="h-full text-4xl min-w-16 logo py-3.5">
<span>CantyOni_on's Index</span> <span>CantyOni_on's Index</span>
</div> </div>
<!-- 图片模式 -->
<div v-else class="py-2"> <div v-else class="py-2">
<img :src="logoUrl" alt="" class="h-12 w-12"/> <img :src="logoUrl" alt="" class="h-12 w-12"/>
</div> </div>
</div> </div>
<!-- Entry --> <!-- Entry -->
<div class="hidden md:flex"> <div
:class="{'h-screen opacity-100 visible': isExpended, 'h-0 opacity-0 invisible': !isExpended}"
class="absolute top-full right-0 left-0 bg-white transition-all md:visible md:relative md:top-0 md:flex md:h-auto md:bg-transparent md:opacity-100"
>
<nav-bar-entry-item v-for="item in entry" :key="item.title" <nav-bar-entry-item v-for="item in entry" :key="item.title"
:entry="item.entry" :icon="item.icon" :entry="item.entry" :icon="item.icon"
:title="item.title"/> :title="item.title"/>

View File

@ -12,22 +12,20 @@ defineProps<{
</script> </script>
<template> <template>
<div class="container relative w-16 max-w-max flex-auto shrink-0 cursor-pointer <div class="container relative w-full max-w-max flex-auto shrink-0 cursor-pointer group md:w-16 md:hover:w-full">
group hover:w-full"> <div class="my-1 flex h-14 w-screen items-center rounded-md pr-4 pl-2 md:w-auto md:group-hover:bg-gray-200">
<div class="my-1 flex h-14 items-center rounded-md pr-4 pl-2 group-hover:bg-gray-200"> <font-awesome-icon :icon="icon" class="mx-2 md:h-8 md:w-8"/>
<font-awesome-icon :icon="icon" class="mx-2 h-8 w-8"/> <span
<span class="w-0 max-w-max overflow-hidden text-xl transition-all duration-300 class="w-full max-w-max overflow-hidden text-lg transition-all duration-300 text-nowrap md:w-0 md:text-xl md:group-hover:w-full">
text-nowrap group-hover:w-full">
{{ title }} {{ title }}
</span> </span>
</div> </div>
<!-- 下拉菜单 --> <!-- 下拉菜单 -->
<div v-if="entry" <div v-if="entry"
class="invisible absolute top-full left-1/2 overflow-hidden rounded-xl bg-white class="grid grid-cols-2 overflow-hidden transition-all duration-300 min-w-32 item md:invisible md:absolute md:top-full md:left-1/2 md:block md:rounded-xl md:bg-white md:opacity-0 md:shadow-md md:group-hover:visible md:group-hover:-translate-x-1/2 md:group-hover:opacity-100">
opacity-0 shadow-md transition-all duration-300 min-w-32 item <div v-for="item in entry" :key="item.title"
group-hover:visible group-hover:-translate-x-1/2 group-hover:opacity-100"> class="px-10 py-2 text-gray-500 text-md md:px-0 md:text-center md:text-lg md:hover:bg-gray-100">
<div v-for="item in entry" :key="item.title" class="py-2 text-center text-lg text-gray-500 hover:bg-gray-100">
{{ item.title }} {{ item.title }}
</div> </div>
@ -37,6 +35,8 @@ defineProps<{
<style lang="scss" scoped> <style lang="scss" scoped>
.item { .item {
transform: perspective(500px) rotateX(-45deg) translateX(-50%); @media (min-width: 768px) {
transform: perspective(500px) rotateX(-45deg) translateX(-50%);
}
} }
</style> </style>