更新导航栏排版
This commit is contained in:
parent
2c593005e7
commit
9fb4577a87
@ -9,7 +9,8 @@
|
||||
<div class="nav-center">
|
||||
<ul class="nav-items" v-if="!isMobile">
|
||||
<li v-for="(item, index) in navItems" :key="index">
|
||||
<router-link :to="item.link">{{ item.name }}</router-link>
|
||||
<span v-if="item === 'divider'" class="divider">|</span>
|
||||
<router-link v-else :to="item.link">{{ item.name }}</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="mobile-menu" v-else>
|
||||
@ -18,8 +19,8 @@
|
||||
</button>
|
||||
<transition name="fade">
|
||||
<ul v-if="showMobileMenu" class="mobile-nav-items">
|
||||
<li v-for="(item, index) in navItems" :key="index" @click="toggleMobileMenu">
|
||||
<router-link :to="item.link">{{ item.name.replace(/[☆]/g, "") }}</router-link>
|
||||
<li v-for="(item, index) in navItems.filter(item => item !== 'divider')" :key="index" @click="toggleMobileMenu">
|
||||
<router-link :to="item.link">{{ item.name }}</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
</transition>
|
||||
@ -48,11 +49,13 @@ const theme = computed(() => store.getters.currentTheme)
|
||||
const themeClass = computed(() => theme.value === 'dark' ? 'theme-dark' : 'theme-light')
|
||||
|
||||
const navItems = [
|
||||
{ name: '工具', link: '/tools' },
|
||||
{name: '主页', link: '/'},
|
||||
'divider',
|
||||
{name: '博客', link: '/blog'},
|
||||
{ name: '☆主页☆', link: '/' },
|
||||
{name: '项目', link: '/projects'},
|
||||
{ name: '关于', link: '/about' },
|
||||
{name: '小工具', link: '/tools'},
|
||||
'divider',
|
||||
{name: '关于', link: '/about'}
|
||||
]
|
||||
|
||||
// 移动端菜单
|
||||
@ -64,7 +67,7 @@ const toggleMobileMenu = () => {
|
||||
// 判定
|
||||
const isMobile = ref(window.innerWidth < 768)
|
||||
const handleResize = () => {
|
||||
isMobile.value = window.innerWidth < 768
|
||||
isMobile.value = window.innerWidth < 888
|
||||
if (!isMobile.value) {
|
||||
showMobileMenu.value = false // 桌面端时关闭移动菜单
|
||||
}
|
||||
@ -83,80 +86,90 @@ const toggleTheme = () => {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.theme-dark {
|
||||
/* 全局文字颜色、背景等由全局样式统一设置,此处仅对组件部分做局部覆盖 */
|
||||
background-color: rgba(40, 40, 40);
|
||||
color: #0ff;
|
||||
|
||||
}
|
||||
|
||||
.theme-dark .navbar {
|
||||
background-color: rgba(40, 40, 40);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.theme-dark .nav-left .logo {
|
||||
color: #0ff;
|
||||
}
|
||||
|
||||
.theme-dark .nav-items li a {
|
||||
color: #0ff;
|
||||
}
|
||||
|
||||
.theme-dark .nav-items li a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.theme-dark .nav-items li a::after {
|
||||
background-color: #0ff;
|
||||
}
|
||||
|
||||
.theme-dark .login-btn {
|
||||
border: 1px solid #0ff;
|
||||
color: #0ff;
|
||||
}
|
||||
|
||||
.theme-dark .login-btn:hover {
|
||||
background: #0ff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.theme-dark .hamburger-icon,
|
||||
.theme-dark .hamburger-icon::before,
|
||||
.theme-dark .hamburger-icon::after {
|
||||
background: #0ff;
|
||||
}
|
||||
|
||||
|
||||
.theme-light {
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.theme-light .navbar {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.theme-light .nav-left .logo {
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
.theme-light .nav-items li a {
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
.theme-light .nav-items li a:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.theme-light .nav-items li a::after {
|
||||
background-color: #2f2f2f;
|
||||
}
|
||||
|
||||
.theme-light .login-btn {
|
||||
border: 1px solid #2f2f2f;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
.theme-light .login-btn:hover {
|
||||
background: #2f2f2f;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.theme-light .hamburger-icon,
|
||||
.theme-light .hamburger-icon::before,
|
||||
.theme-light .hamburger-icon::after {
|
||||
background: #2f2f2f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.navbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
@ -171,29 +184,34 @@ const toggleTheme = () => {
|
||||
height: 60px;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.nav-left .logo {
|
||||
font-family: 'Netron', sans-serif;
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav-center {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.nav-items {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
gap: 3rem;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.nav-items li a {
|
||||
text-decoration: none;
|
||||
position: relative;
|
||||
font-size: 1rem;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
|
||||
.nav-items li a::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
@ -205,13 +223,23 @@ const toggleTheme = () => {
|
||||
transform-origin: center;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.nav-items li a:hover::after {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
|
||||
.nav-items .divider {
|
||||
font-size: 1rem;
|
||||
padding: 0 0.7rem;
|
||||
color: gray;
|
||||
opacity: 60%;
|
||||
}
|
||||
|
||||
.nav-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.login-btn {
|
||||
background: transparent;
|
||||
padding: 0.5rem 1rem;
|
||||
@ -219,11 +247,13 @@ const toggleTheme = () => {
|
||||
cursor: pointer;
|
||||
transition: background 0.3s, color 0.3s;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.user-info .avatar {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
@ -244,7 +274,11 @@ const toggleTheme = () => {
|
||||
/* 移动端:汉堡菜单样式 */
|
||||
.mobile-menu {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hamburger-btn {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
@ -253,6 +287,7 @@ const toggleTheme = () => {
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.hamburger-icon {
|
||||
width: 25px;
|
||||
height: 3px;
|
||||
@ -260,6 +295,7 @@ const toggleTheme = () => {
|
||||
position: relative;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.hamburger-icon::before,
|
||||
.hamburger-icon::after {
|
||||
content: "";
|
||||
@ -268,10 +304,12 @@ const toggleTheme = () => {
|
||||
height: 3px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.hamburger-icon::before {
|
||||
left: 0;
|
||||
top: -8px;
|
||||
}
|
||||
|
||||
.hamburger-icon::after {
|
||||
left: 0;
|
||||
top: 8px;
|
||||
@ -282,16 +320,29 @@ const toggleTheme = () => {
|
||||
position: absolute;
|
||||
backdrop-filter: blur(10px);
|
||||
top: 45px;
|
||||
width: 200%;
|
||||
right: -125%;
|
||||
list-style: none;
|
||||
padding: 1rem;
|
||||
margin: 0;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
|
||||
text-align: center;
|
||||
}
|
||||
.mobile-nav-items li {
|
||||
margin: 0.5rem;
|
||||
padding: 5px;
|
||||
border-radius: 4px;
|
||||
font-weight: bold;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
.theme-light .mobile-nav-items li {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
.mobile-nav-items li:hover {
|
||||
background: black;
|
||||
}
|
||||
.theme-light .mobile-nav-items li:hover {
|
||||
background: #ffffff;
|
||||
}
|
||||
.mobile-nav-items li a {
|
||||
text-decoration: none;
|
||||
@ -303,6 +354,7 @@ const toggleTheme = () => {
|
||||
.fade-leave-active {
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.fade-enter-from,
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user