PersonalPage/src/App.vue

133 lines
2.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<!-- 3D粒子背景 -->
<ParticleBackground />
<!-- 主内容区 -->
<main class="content">
<div class="profile-section">
<!-- 头像区域 -->
<div class="avatar-wrapper">
<img
src="/assets/images/logo.png"
alt="Cat Tom Avatar"
class="avatar"
/>
</div>
<!-- 打字机效果标题 -->
<Typewriter
:texts="['你好我是Cat Tom', 'Web全栈开发者', '开源爱好者']"
:speed="100"
class="title"
/>
<!-- 个人简介 -->
<p class="description">
专注于现代Web技术栈擅长Vue/React全栈开发开源项目贡献者
</p>
<!-- 社交链接 -->
<SocialLinks
@show-wechat="showWechatModal = true"
/>
</div>
</main>
<!-- 微信弹窗 -->
<WechatModal
v-if="showWechatModal"
@close="showWechatModal = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue'
import ParticleBackground from './components/ParticleBackground.vue'
import SocialLinks from './components/SocialLinks.vue'
import Typewriter from './components/Typewriter.vue'
import WechatModal from './components/WechatModal.vue'
const showWechatModal = ref(false)
</script>
<style scoped>
.app-container {
min-height: 100vh;
position: relative;
overflow: hidden;
}
.content {
position: relative;
z-index: var(--z-index-content);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 2rem;
text-align: center;
}
.profile-section {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
background: rgba(255, 255, 255, 0.85);
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10px);
}
.avatar-wrapper {
width: 150px;
height: 150px;
margin: 0 auto 2rem;
border-radius: 50%;
border: 3px solid var(--primary-light);
overflow: hidden;
transition: transform 0.3s ease;
}
.avatar-wrapper:hover {
transform: scale(1.05);
}
.avatar {
width: 100%;
height: 100%;
object-fit: cover;
}
.title {
font-size: 2.5rem;
margin-bottom: 1.5rem;
color: var(--text-primary);
font-weight: 600;
}
.description {
font-size: 1.2rem;
color: var(--text-secondary);
margin-bottom: 2rem;
line-height: 1.8;
}
@media (max-width: 768px) {
.title {
font-size: 1.8rem;
}
.description {
font-size: 1rem;
}
.avatar-wrapper {
width: 120px;
height: 120px;
}
}
</style>