refactor: 重构网站样式和功能,优化用户体验
- 删除冗余CSS文件(bj.css, font.css, sey.css, stars-style.css) - 重构导航栏样式,添加现代化交互效果 - 优化社交图标,使用SVG替代字体图标并添加渐变效果 - 新增关于页面(about.html)及相关资源 - 更新首页(index.html)布局和样式 - 重构星空背景JavaScript(bj.js),添加错误处理 - 新增关于页面JavaScript功能(about.js)
This commit is contained in:
246
about.html
Normal file
246
about.html
Normal file
@@ -0,0 +1,246 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>关于我 - Honesty</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
<link rel="stylesheet" href="css/about.css">
|
||||
<link rel="stylesheet" href="css/iconfont.css">
|
||||
<link rel="icon" href="favicon.ico">
|
||||
<meta name="description" content="了解更多关于Honesty的信息 - 技术栈、项目经验、个人兴趣">
|
||||
</head>
|
||||
<body>
|
||||
<div class="about-container">
|
||||
<!-- 导航栏 -->
|
||||
<nav class="about-nav">
|
||||
<div class="nav-content">
|
||||
<a href="index.html" class="nav-logo">
|
||||
<img src="https://cdn.jsdmirror.com/gh/listener-He/images@default/202309111525908.jpeg" alt="Honesty">
|
||||
<span>Honesty</span>
|
||||
</a>
|
||||
<div class="nav-links">
|
||||
<a href="index.html">首页</a>
|
||||
<a href="about.html" class="active">关于我</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- 主要内容 -->
|
||||
<main class="about-main">
|
||||
<!-- 英雄区域 -->
|
||||
<section class="hero-section">
|
||||
<div class="hero-background">
|
||||
<div class="floating-shapes">
|
||||
<div class="shape shape-1"></div>
|
||||
<div class="shape shape-2"></div>
|
||||
<div class="shape shape-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-content">
|
||||
<div class="profile-avatar">
|
||||
<img src="https://cdn.jsdmirror.com/gh/listener-He/images@default/202309111525908.jpeg" alt="Honesty">
|
||||
<div class="avatar-ring"></div>
|
||||
</div>
|
||||
<h1 class="hero-title">Honesty</h1>
|
||||
<p class="hero-subtitle">全栈开发工程师 · 开源爱好者</p>
|
||||
<div class="personality-badge">
|
||||
<span class="mbti-tag">INFJ</span>
|
||||
<span class="badge-desc">提倡者人格</span>
|
||||
</div>
|
||||
<div class="hero-stats">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="github-repos">--</span>
|
||||
<span class="stat-label">开源项目</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="github-followers">--</span>
|
||||
<span class="stat-label">GitHub关注</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="total-visitors">--</span>
|
||||
<span class="stat-label">访问量</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 技术栈云图 -->
|
||||
<section class="tech-cloud-section">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">技术栈</h2>
|
||||
<p class="section-subtitle">我的技术工具箱</p>
|
||||
</div>
|
||||
<div class="tech-cloud">
|
||||
<div class="tech-orbit orbit-1">
|
||||
<span class="tech-item primary">JavaScript</span>
|
||||
<span class="tech-item primary">Java</span>
|
||||
<span class="tech-item primary">Python</span>
|
||||
</div>
|
||||
<div class="tech-orbit orbit-2">
|
||||
<span class="tech-item secondary">Vue.js</span>
|
||||
<span class="tech-item secondary">React</span>
|
||||
<span class="tech-item secondary">Spring Boot</span>
|
||||
<span class="tech-item secondary">Node.js</span>
|
||||
</div>
|
||||
<div class="tech-orbit orbit-3">
|
||||
<span class="tech-item tertiary">TypeScript</span>
|
||||
<span class="tech-item tertiary">MySQL</span>
|
||||
<span class="tech-item tertiary">Docker</span>
|
||||
<span class="tech-item tertiary">Git</span>
|
||||
<span class="tech-item tertiary">Linux</span>
|
||||
<span class="tech-item tertiary">AWS</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 个性特质时间线 -->
|
||||
<section class="personality-timeline-section">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">关于我</h2>
|
||||
<p class="section-subtitle">INFJ · 创造者 · 探索者</p>
|
||||
</div>
|
||||
<div class="personality-timeline">
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-icon">🚴♂️</div>
|
||||
<div class="timeline-content">
|
||||
<h3>骑行爱好者</h3>
|
||||
<p>享受在路上的自由感,用车轮丈量世界,在风景中寻找灵感</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-icon">📚</div>
|
||||
<div class="timeline-content">
|
||||
<h3>阅读与写作</h3>
|
||||
<p>通过文字记录思考轨迹,分享技术见解,用代码诠释创意</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-icon">🔍</div>
|
||||
<div class="timeline-content">
|
||||
<h3>开源探索</h3>
|
||||
<p>热衷于开源项目,相信分享的力量,用代码连接世界</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-icon">💡</div>
|
||||
<div class="timeline-content">
|
||||
<h3>持续学习</h3>
|
||||
<p>保持对新技术的好奇心,在变化中成长,在挑战中进步</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- GitHub项目展示 -->
|
||||
<section class="github-showcase-section">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">开源项目</h2>
|
||||
<p class="section-subtitle">用代码改变世界</p>
|
||||
</div>
|
||||
<div class="projects-masonry" id="projects-container">
|
||||
<div class="loading-placeholder">
|
||||
<div class="loading-spinner"></div>
|
||||
<p>正在加载项目...</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 博客文章瀑布流 -->
|
||||
<section class="blog-waterfall-section">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">最新文章</h2>
|
||||
<p class="section-subtitle">思考的足迹</p>
|
||||
<a href="#" class="view-all-link" target="_blank">
|
||||
查看全部 <i class="iconfont icon-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="articles-waterfall" id="blog-container">
|
||||
<div class="loading-placeholder">
|
||||
<div class="loading-spinner"></div>
|
||||
<p>正在加载文章...</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 访问统计仪表盘 -->
|
||||
<section class="stats-dashboard-section">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">访问统计</h2>
|
||||
<p class="section-subtitle">数据驱动的成长</p>
|
||||
</div>
|
||||
<div class="stats-dashboard">
|
||||
<div class="stat-card primary">
|
||||
<div class="stat-icon">👥</div>
|
||||
<div class="stat-number" id="total-visitors">-</div>
|
||||
<div class="stat-label">总访问人数</div>
|
||||
</div>
|
||||
<div class="stat-card secondary">
|
||||
<div class="stat-icon">📊</div>
|
||||
<div class="stat-number" id="total-visits">-</div>
|
||||
<div class="stat-label">总访问次数</div>
|
||||
</div>
|
||||
<div class="stat-card accent">
|
||||
<div class="stat-icon">🌟</div>
|
||||
<div class="stat-number" id="today-visitors">-</div>
|
||||
<div class="stat-label">今日访问人数</div>
|
||||
</div>
|
||||
<div class="stat-card highlight">
|
||||
<div class="stat-icon">🔥</div>
|
||||
<div class="stat-number" id="today-visits">-</div>
|
||||
<div class="stat-label">今日访问次数</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 联系方式浮动区域 -->
|
||||
<section class="contact-floating-section">
|
||||
<div class="contact-container">
|
||||
<div class="contact-title">
|
||||
<h2>让我们连接</h2>
|
||||
<p>欢迎交流技术、分享想法</p>
|
||||
</div>
|
||||
<div class="social-orbit">
|
||||
<div class="social-center">
|
||||
<i class="iconfont icon-message"></i>
|
||||
</div>
|
||||
<a href="https://github.com/listener-He" class="social-planet planet-1" target="_blank">
|
||||
<i class="iconfont icon-github"></i>
|
||||
<span>GitHub</span>
|
||||
</a>
|
||||
<a href="mailto:your-email@example.com" class="social-planet planet-2">
|
||||
<i class="iconfont icon-email"></i>
|
||||
<span>邮箱</span>
|
||||
</a>
|
||||
<a href="#" class="social-planet planet-3" target="_blank">
|
||||
<i class="iconfont icon-blog"></i>
|
||||
<span>博客</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 评论系统 -->
|
||||
<section class="comments-section">
|
||||
<div class="comments-container">
|
||||
<h2 class="section-title">留言板</h2>
|
||||
<p class="section-subtitle">分享你的想法</p>
|
||||
<div id="artalk-container"></div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<!-- 页脚 -->
|
||||
<footer class="about-footer">
|
||||
<p>© 2024 Honesty. All rights reserved.</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<!-- 脚本文件 -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/about.js"></script>
|
||||
<!-- Artalk 评论系统 -->
|
||||
<script src="https://unpkg.com/artalk@latest/dist/Artalk.js"></script>
|
||||
<link href="https://unpkg.com/artalk@latest/dist/Artalk.css" rel="stylesheet">
|
||||
</body>
|
||||
</html>
|
||||
992
css/about.css
Normal file
992
css/about.css
Normal file
@@ -0,0 +1,992 @@
|
||||
/* 关于页面样式 - 现代动态设计 */
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background: #0a0a0a;
|
||||
min-height: 100vh;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* 动态背景 */
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background:
|
||||
radial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.3) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(120, 219, 255, 0.2) 0%, transparent 50%);
|
||||
z-index: -1;
|
||||
animation: backgroundShift 20s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes backgroundShift {
|
||||
0%, 100% { transform: scale(1) rotate(0deg); }
|
||||
50% { transform: scale(1.1) rotate(5deg); }
|
||||
}
|
||||
|
||||
/* 导航栏 */
|
||||
.navbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: rgba(10, 10, 10, 0.8);
|
||||
backdrop-filter: blur(20px);
|
||||
z-index: 1000;
|
||||
padding: 1rem 0;
|
||||
transition: all 0.3s ease;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.navbar.scrolled {
|
||||
background: rgba(10, 10, 10, 0.95);
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.nav-container {
|
||||
max-width: 1400px;
|
||||
margin: 0 auto;
|
||||
padding: 0 2rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nav-logo {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.nav-links a {
|
||||
text-decoration: none;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-links a::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -5px;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 2px;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
transition: width 0.3s ease;
|
||||
}
|
||||
|
||||
.nav-links a:hover,
|
||||
.nav-links a.active {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.nav-links a:hover::after,
|
||||
.nav-links a.active::after {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 主要内容 */
|
||||
.main-content {
|
||||
margin-top: 80px;
|
||||
max-width: 1400px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* 英雄区域 */
|
||||
.hero-section {
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.hero-background {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.floating-shapes {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.shape {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(45deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.shape-1 {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
top: 10%;
|
||||
left: 10%;
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.shape-2 {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
top: 60%;
|
||||
right: 10%;
|
||||
animation-delay: 2s;
|
||||
}
|
||||
|
||||
.shape-3 {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
bottom: 20%;
|
||||
left: 60%;
|
||||
animation-delay: 4s;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0px) rotate(0deg); }
|
||||
50% { transform: translateY(-20px) rotate(180deg); }
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
text-align: center;
|
||||
z-index: 1;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.profile-avatar {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.avatar-image {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
border: 4px solid rgba(255, 255, 255, 0.2);
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.avatar-image:hover {
|
||||
transform: scale(1.05);
|
||||
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.avatar-ring {
|
||||
position: absolute;
|
||||
top: -15px;
|
||||
left: -15px;
|
||||
right: -15px;
|
||||
bottom: -15px;
|
||||
border: 2px solid;
|
||||
border-image: linear-gradient(45deg, #667eea, #764ba2, #667eea) 1;
|
||||
border-radius: 50%;
|
||||
animation: rotate 10s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-size: 4rem;
|
||||
font-weight: 800;
|
||||
color: #fff;
|
||||
margin-bottom: 1rem;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
animation: titleGlow 3s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes titleGlow {
|
||||
from { filter: drop-shadow(0 0 20px rgba(102, 126, 234, 0.5)); }
|
||||
to { filter: drop-shadow(0 0 30px rgba(118, 75, 162, 0.8)); }
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-size: 1.5rem;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
margin-bottom: 2rem;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.personality-badge {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.mbti-tag {
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
color: #fff;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border-radius: 30px;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.badge-desc {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
font-size: 0.9rem;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 3rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.hero-stats .stat-item {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero-stats .stat-number {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 800;
|
||||
color: #fff;
|
||||
display: block;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.hero-stats .stat-label {
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
font-size: 0.9rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
/* 通用区域样式 */
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 4rem;
|
||||
padding: 0 2rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
color: #fff;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 60px;
|
||||
height: 4px;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.2rem;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
/* 技术栈云图 */
|
||||
.tech-cloud-section {
|
||||
padding: 8rem 2rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tech-cloud {
|
||||
position: relative;
|
||||
width: 600px;
|
||||
height: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.tech-orbit {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
animation: orbitRotate 30s linear infinite;
|
||||
}
|
||||
|
||||
.orbit-1 {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
animation-duration: 20s;
|
||||
}
|
||||
|
||||
.orbit-2 {
|
||||
width: 350px;
|
||||
height: 350px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
animation-duration: 30s;
|
||||
animation-direction: reverse;
|
||||
}
|
||||
|
||||
.orbit-3 {
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
animation-duration: 40s;
|
||||
}
|
||||
|
||||
@keyframes orbitRotate {
|
||||
from { transform: translate(-50%, -50%) rotate(0deg); }
|
||||
to { transform: translate(-50%, -50%) rotate(360deg); }
|
||||
}
|
||||
|
||||
.tech-item {
|
||||
position: absolute;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
color: #fff;
|
||||
padding: 0.8rem 1.5rem;
|
||||
border-radius: 25px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
transition: all 0.3s ease;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tech-item:hover {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: scale(1.1);
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.tech-item.primary {
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.tech-item.secondary {
|
||||
background: rgba(102, 126, 234, 0.2);
|
||||
border-color: rgba(102, 126, 234, 0.4);
|
||||
}
|
||||
|
||||
.tech-item.tertiary {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
/* 技术项目位置 */
|
||||
.orbit-1 .tech-item:nth-child(1) { top: -15px; left: 50%; transform: translateX(-50%); }
|
||||
.orbit-1 .tech-item:nth-child(2) { bottom: -15px; left: 50%; transform: translateX(-50%); }
|
||||
.orbit-1 .tech-item:nth-child(3) { top: 50%; right: -15px; transform: translateY(-50%); }
|
||||
|
||||
.orbit-2 .tech-item:nth-child(1) { top: -15px; left: 50%; transform: translateX(-50%); }
|
||||
.orbit-2 .tech-item:nth-child(2) { top: 50%; right: -15px; transform: translateY(-50%); }
|
||||
.orbit-2 .tech-item:nth-child(3) { bottom: -15px; left: 50%; transform: translateX(-50%); }
|
||||
.orbit-2 .tech-item:nth-child(4) { top: 50%; left: -15px; transform: translateY(-50%); }
|
||||
|
||||
.orbit-3 .tech-item:nth-child(1) { top: -15px; left: 30%; }
|
||||
.orbit-3 .tech-item:nth-child(2) { top: -15px; right: 30%; }
|
||||
.orbit-3 .tech-item:nth-child(3) { top: 30%; right: -15px; }
|
||||
.orbit-3 .tech-item:nth-child(4) { bottom: 30%; right: -15px; }
|
||||
.orbit-3 .tech-item:nth-child(5) { bottom: -15px; left: 30%; }
|
||||
.orbit-3 .tech-item:nth-child(6) { top: 30%; left: -15px; }
|
||||
|
||||
/* 个性时间线 */
|
||||
.personality-timeline-section {
|
||||
padding: 8rem 2rem;
|
||||
background: rgba(255, 255, 255, 0.02);
|
||||
}
|
||||
|
||||
.personality-timeline {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.personality-timeline::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 2px;
|
||||
background: linear-gradient(to bottom, #667eea, #764ba2);
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 4rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-item:nth-child(even) {
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
|
||||
.timeline-icon {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 2rem;
|
||||
z-index: 2;
|
||||
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
flex: 1;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
backdrop-filter: blur(10px);
|
||||
padding: 2rem;
|
||||
border-radius: 20px;
|
||||
margin: 0 2rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.timeline-content:hover {
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.timeline-content h3 {
|
||||
color: #fff;
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.timeline-content p {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* GitHub项目展示 */
|
||||
.github-showcase-section {
|
||||
padding: 8rem 2rem;
|
||||
}
|
||||
|
||||
.projects-masonry {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
||||
gap: 2rem;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.project-card {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 20px;
|
||||
padding: 2rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.project-card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
|
||||
transition: left 0.5s ease;
|
||||
}
|
||||
|
||||
.project-card:hover::before {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.project-card:hover {
|
||||
transform: translateY(-10px);
|
||||
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
|
||||
border-color: rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.project-title {
|
||||
color: #fff;
|
||||
font-size: 1.3rem;
|
||||
margin-bottom: 1rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project-description {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
margin-bottom: 1.5rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.project-stats {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.project-stat {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.project-link {
|
||||
display: inline-block;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
color: #fff;
|
||||
padding: 0.7rem 1.5rem;
|
||||
border-radius: 25px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.project-link:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
|
||||
}
|
||||
|
||||
/* 博客瀑布流 */
|
||||
.blog-waterfall-section {
|
||||
padding: 8rem 2rem;
|
||||
background: rgba(255, 255, 255, 0.02);
|
||||
}
|
||||
|
||||
.view-all-link {
|
||||
color: #667eea;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.view-all-link:hover {
|
||||
color: #764ba2;
|
||||
transform: translateX(5px);
|
||||
}
|
||||
|
||||
.articles-waterfall {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 2rem;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.article-card {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 15px;
|
||||
padding: 1.5rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
transition: all 0.3s ease;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.article-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
|
||||
.article-title {
|
||||
color: #fff;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.article-excerpt {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.article-meta {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 0.8rem;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.article-category {
|
||||
background: rgba(102, 126, 234, 0.2);
|
||||
color: #667eea;
|
||||
padding: 0.3rem 0.8rem;
|
||||
border-radius: 12px;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* 联系方式轨道 */
|
||||
.contact-floating-section {
|
||||
padding: 8rem 2rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.contact-container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.contact-title h2 {
|
||||
font-size: 2.5rem;
|
||||
color: #fff;
|
||||
margin-bottom: 1rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.contact-title p {
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
.social-orbit {
|
||||
position: relative;
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.social-center {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background: linear-gradient(45deg, #667eea, #764ba2);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 2rem;
|
||||
color: #fff;
|
||||
box-shadow: 0 15px 35px rgba(102, 126, 234, 0.4);
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
.social-planet {
|
||||
position: absolute;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
color: #fff;
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
transition: all 0.3s ease;
|
||||
animation: planetOrbit 15s linear infinite;
|
||||
}
|
||||
|
||||
.social-planet:hover {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: scale(1.1);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.social-planet i {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.social-planet span {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.planet-1 {
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.planet-2 {
|
||||
top: 50%;
|
||||
right: 0;
|
||||
transform: translateY(-50%);
|
||||
animation-delay: 5s;
|
||||
}
|
||||
|
||||
.planet-3 {
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
animation-delay: 10s;
|
||||
}
|
||||
|
||||
@keyframes planetOrbit {
|
||||
from { transform: rotate(0deg) translateX(150px) rotate(0deg); }
|
||||
to { transform: rotate(360deg) translateX(150px) rotate(-360deg); }
|
||||
}
|
||||
|
||||
/* 评论系统 */
|
||||
.comments-section {
|
||||
padding: 8rem 2rem;
|
||||
background: rgba(255, 255, 255, 0.02);
|
||||
}
|
||||
|
||||
.comments-container {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.comments-container .section-title {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.comments-container .section-subtitle {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
#artalk-container {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 20px;
|
||||
padding: 2rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* 加载动画 */
|
||||
.loading-placeholder {
|
||||
text-align: center;
|
||||
padding: 4rem 2rem;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border: 3px solid rgba(255, 255, 255, 0.1);
|
||||
border-top: 3px solid #667eea;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
margin: 0 auto 1rem;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); }
|
||||
50% { transform: scale(1.05); }
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 1024px) {
|
||||
.tech-cloud {
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.orbit-3 {
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.social-orbit {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.nav-container {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.tech-cloud {
|
||||
width: 350px;
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.orbit-2 {
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.orbit-3 {
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.personality-timeline::before {
|
||||
left: 30px;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
flex-direction: row !important;
|
||||
padding-left: 80px;
|
||||
}
|
||||
|
||||
.timeline-icon {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
margin: 0;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.social-orbit {
|
||||
width: 250px;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.social-planet {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.social-planet i {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.social-planet span {
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
|
||||
.projects-masonry,
|
||||
.articles-waterfall {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.hero-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.hero-stats {
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.personality-badge {
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.tech-cloud {
|
||||
width: 280px;
|
||||
height: 280px;
|
||||
}
|
||||
|
||||
.orbit-1 {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
.orbit-2 {
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
}
|
||||
|
||||
.orbit-3 {
|
||||
width: 240px;
|
||||
height: 240px;
|
||||
}
|
||||
|
||||
.tech-item {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
canvas{
|
||||
position:fixed;/*<2A><><EFBFBD>ö<EFBFBD>λ*/
|
||||
top:0;
|
||||
left:0;
|
||||
z-index:-1;/*ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>*/
|
||||
background:#0e1729;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ*/
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
@font-face {
|
||||
font-family:'EngraversOldEnglishBT-Bold';
|
||||
src: url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.gif?r=110901002758');
|
||||
src: url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.gif?r=110901002758?#iefix') format('embedded-opentype'), url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.png?r=110901002758') format('woff2'), url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.bmp?r=110901002758') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
123
css/sey.css
123
css/sey.css
@@ -1,123 +0,0 @@
|
||||
*
|
||||
{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
|
||||
|
||||
/* 移除全局a:hover样式,避免影响社交元素 */
|
||||
/*
|
||||
a:hover
|
||||
{
|
||||
border-radius: 25px;
|
||||
background: var(--clr);
|
||||
color: var(--clr);
|
||||
letter-spacing: 0.25em;
|
||||
box-shadow: 0 0 35px var(--clr);
|
||||
}
|
||||
*/
|
||||
|
||||
/* 为非社交元素的链接保留hover效果 */
|
||||
:not(.social-icons-row) a:hover {
|
||||
border-radius: 25px;
|
||||
background: var(--clr);
|
||||
color: var(--clr);
|
||||
letter-spacing: 0.25em;
|
||||
box-shadow: 0 0 35px var(--clr);
|
||||
}
|
||||
|
||||
span
|
||||
{
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
i
|
||||
{
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: block;
|
||||
}
|
||||
/* 移除伪元素动画效果,避免影响社交元素 */
|
||||
/*
|
||||
i::before
|
||||
{
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -3.5px;
|
||||
left: 80%;
|
||||
width: 10px;
|
||||
height: 5px;
|
||||
background: #27282c;
|
||||
transform: translateX(-50%);
|
||||
border: 2px solid var(--clr);
|
||||
transition: 0.5s;
|
||||
}
|
||||
a:hover i::before
|
||||
{
|
||||
width: 20px;
|
||||
left: 20%;
|
||||
}
|
||||
*/
|
||||
|
||||
/* 为非社交元素的伪元素保留效果 */
|
||||
:not(.social-icons-row) i::before
|
||||
{
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -3.5px;
|
||||
left: 80%;
|
||||
width: 10px;
|
||||
height: 5px;
|
||||
background: #27282c;
|
||||
transform: translateX(-50%);
|
||||
border: 2px solid var(--clr);
|
||||
transition: 0.5s;
|
||||
}
|
||||
:not(.social-icons-row) a:hover i::before
|
||||
{
|
||||
width: 20px;
|
||||
left: 20%;
|
||||
}
|
||||
/* 移除伪元素动画效果,避免影响社交元素 */
|
||||
/*
|
||||
i::after
|
||||
{
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -3.5px;
|
||||
left: 20%;
|
||||
width: 10px;
|
||||
height: 5px;
|
||||
background: #27282c;
|
||||
transform: translateX(-50%);
|
||||
border: 2px solid var(--clr);
|
||||
transition: 0.5s;
|
||||
}
|
||||
a:hover i::after
|
||||
{
|
||||
width: 20px;
|
||||
left: 80%;
|
||||
}
|
||||
*/
|
||||
|
||||
/* 为非社交元素的伪元素保留效果 */
|
||||
:not(.social-icons-row) i::after
|
||||
{
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -3.5px;
|
||||
left: 20%;
|
||||
width: 10px;
|
||||
height: 5px;
|
||||
background: #27282c;
|
||||
transform: translateX(-50%);
|
||||
border: 2px solid var(--clr);
|
||||
transition: 0.5s;
|
||||
}
|
||||
:not(.social-icons-row) a:hover i::after
|
||||
{
|
||||
width: 20px;
|
||||
left: 80%;
|
||||
}
|
||||
@@ -1,317 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
#bg {
|
||||
width: 100%;
|
||||
min-width: 250px;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
min-width: 250px;
|
||||
min-height: 100%;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.container .avatar {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin-top: 30%;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 90px 2px #fff;
|
||||
opacity: 0.8;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.container .nickname {
|
||||
font-size: 18px;
|
||||
margin-top: 20px;
|
||||
letter-spacing: 2px;
|
||||
animation: nickname-shadow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes nickname-shadow {
|
||||
from {
|
||||
text-shadow: 0 0 2px #f6f7fb;
|
||||
}
|
||||
|
||||
to {
|
||||
text-shadow: 1px 1px 20px #f6f7fb;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.container .introduce {
|
||||
font-size: 14px;
|
||||
margin-top: 20px;
|
||||
padding: 0 28px;
|
||||
letter-spacing: 1px;
|
||||
text-align: center;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.container .quote {
|
||||
font-size: 14px;
|
||||
margin-top: 20px;
|
||||
padding: 0 28px;
|
||||
letter-spacing: 1px;
|
||||
text-align: center;
|
||||
font-family: cursive;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.container .quote::after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
width: 2px;
|
||||
height: 18px;
|
||||
border-radius: 2px;
|
||||
background-color: #fff;
|
||||
vertical-align: middle;
|
||||
animation: blink 0.8s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
width: 80%;
|
||||
min-height: 40px;
|
||||
margin-top: 80px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
nav .item {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
margin: 8px 12px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.9);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
nav .item a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
nav .item a:focus,
|
||||
nav .item a:visited,
|
||||
nav .item a:active {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
nav .item a img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
nav .item .tooltip {
|
||||
position: absolute;
|
||||
width: 80px;
|
||||
max-height: 80px;
|
||||
background-color: rgb(255, 255, 255);
|
||||
bottom: 40px;
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
z-index: 10;
|
||||
color: #333;
|
||||
letter-spacing: 2px;
|
||||
text-align: center;
|
||||
opacity: 0;
|
||||
z-index: -1;
|
||||
transform: translateY(-40px);
|
||||
transition: all 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
nav .item .tooltip img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
nav .item .tooltip::after {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 2px;
|
||||
background-color: rgb(255, 255, 255);
|
||||
position: absolute;
|
||||
bottom: -4px;
|
||||
left: 40px;
|
||||
transform: rotate(45deg);
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
|
||||
nav .item a:focus+.tooltip,
|
||||
nav .item a:hover+.tooltip {
|
||||
transform: translateY(0);
|
||||
z-index: 10;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
footer {
|
||||
width: 80%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 20px 0;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
footer .icp {
|
||||
color: #f6f7fb;
|
||||
text-decoration: none;
|
||||
letter-spacing: 2px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
|
||||
footer .copyright {
|
||||
color: #999;
|
||||
font-size: 10px;
|
||||
margin-top: 8px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media screen and (min-width:768px) {
|
||||
.container .avatar {
|
||||
width: 88px;
|
||||
height: 88px;
|
||||
margin-top: 20%;
|
||||
}
|
||||
|
||||
.container .nickname {
|
||||
font-size: 20px;
|
||||
margin-top: 28px;
|
||||
}
|
||||
|
||||
.container .introduce {
|
||||
font-size: 16px;
|
||||
margin-top: 28px;
|
||||
padding: 0 40px;
|
||||
}
|
||||
|
||||
.container .quote {
|
||||
font-size: 16px;
|
||||
margin-top: 28px;
|
||||
padding: 0 40px;
|
||||
}
|
||||
|
||||
.container .quote::after {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
nav {
|
||||
margin-top: 90px;
|
||||
}
|
||||
|
||||
nav .item {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
nav .item .tooltip {
|
||||
bottom: 48px;
|
||||
}
|
||||
|
||||
nav .item a {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width:992px) {
|
||||
.container .avatar {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
margin-top: 10%;
|
||||
}
|
||||
|
||||
.container .nickname {
|
||||
font-size: 22px;
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.container .introduce {
|
||||
font-size: 18px;
|
||||
margin-top: 36px;
|
||||
padding: 0 80px;
|
||||
}
|
||||
|
||||
.container .quote {
|
||||
font-size: 18px;
|
||||
margin-top: 36px;
|
||||
padding: 0 80px;
|
||||
}
|
||||
|
||||
|
||||
.container .quote::after {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
nav {
|
||||
margin-top: 100px;
|
||||
}
|
||||
|
||||
nav .item {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
margin: 12px;
|
||||
}
|
||||
|
||||
nav .item .tooltip {
|
||||
bottom: 56px;
|
||||
}
|
||||
|
||||
nav .item a {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
287
css/style.css
287
css/style.css
@@ -88,25 +88,6 @@ pre {
|
||||
pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
|
||||
/* 主要布局样式 */
|
||||
.container { position: relative; z-index: 500; width: 940px; margin: 0 auto; }
|
||||
|
||||
.content-wrapper {
|
||||
z-index: 800;
|
||||
width: 70%;
|
||||
margin-left: 30%;
|
||||
}
|
||||
|
||||
.content-wrapper__inner { margin: 0 10%; padding: 50px 0; }
|
||||
|
||||
.footer {
|
||||
display: block;
|
||||
padding: 1.5em 0;
|
||||
text-align: center;
|
||||
font-size: 0.85em;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
/* 圆形元素样式 */
|
||||
.avatar, .logo, .profilepic {
|
||||
@@ -201,9 +182,6 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
}
|
||||
|
||||
/* 响应式适配 */
|
||||
@media all and (max-width: 1100px) {}
|
||||
|
||||
@media all and (max-width: 960px) {}
|
||||
|
||||
@media all and (max-width: 510px) {
|
||||
.navigation { line-height: 50px; }
|
||||
@@ -261,8 +239,6 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
}
|
||||
|
||||
/* 设备适配 */
|
||||
@media screen and (max-width: 768px) { .iphone-simulator { display: none; } }
|
||||
@media screen and (min-width: 769px) { .iphone-simulator { display: block; } }
|
||||
|
||||
/* 重要布局组件样式 */
|
||||
.panel {
|
||||
@@ -271,7 +247,7 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.panel__vertical { display: table-cell; vertical-align: middle; }
|
||||
|
||||
|
||||
.panel-title {
|
||||
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
|
||||
@@ -294,15 +270,14 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
/* 一言元素样式 - 细腻优雅字体 */
|
||||
.panel-cover__description {
|
||||
font-family: 'Source Han Serif SC', 'Noto Serif SC', 'PingFang SC', 'Hiragino Sans GB W3', 'Apple LiGothic Medium', 'Microsoft YaHei UI Light', serif;
|
||||
font-size: 0.95em;
|
||||
font-size: 0.9em;
|
||||
font-weight: 200;
|
||||
line-height: 1.9;
|
||||
letter-spacing: 3px;
|
||||
line-height: 2;
|
||||
letter-spacing: 2px;
|
||||
color: #ffffff;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
text-shadow: 0 1px 2px rgba(141, 114, 114, 0.2) !important;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
opacity: 0.92;
|
||||
font-feature-settings: 'kern' 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
@@ -381,64 +356,165 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
|
||||
|
||||
.panel-inverted a { color: #fff; }
|
||||
|
||||
/* 按钮样式 */
|
||||
/* 现代化按钮样式 */
|
||||
.btn, .navigation__item a {
|
||||
padding: 10px 20px;
|
||||
border: 1px solid #4e97d8;
|
||||
border-radius: 20px;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
letter-spacing: 1px;
|
||||
padding: 8px 16px;
|
||||
border: 2px solid transparent;
|
||||
border-radius: 25px;
|
||||
font-size: 0.95em;
|
||||
font-weight: 450;
|
||||
letter-spacing: 1.2px;
|
||||
text-shadow: none;
|
||||
color: #4e97d8;
|
||||
color: #fff;
|
||||
background: linear-gradient(135deg, rgba(255,255,255,0.01) 0%, rgba(255,255,255,0.005) 100%);
|
||||
backdrop-filter: blur(2px);
|
||||
-webkit-backdrop-filter: blur(2px);
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.03);
|
||||
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.btn:hover, .navigation__item a:hover { color: #4e97d8; border-color: #4e97d8; }
|
||||
|
||||
/* 导航样式 */
|
||||
nav { display: inline-block; position: relative; }
|
||||
|
||||
.navigation {
|
||||
.btn:hover, .navigation__item a:hover {
|
||||
color: #fff;
|
||||
background: linear-gradient(135deg, rgba(102, 126, 234, 0.25), rgba(118, 75, 162, 0.22), rgba(240, 147, 251, 0.18));
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.15);
|
||||
border-color: transparent;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* 现代化导航样式 */
|
||||
nav {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
margin: 0 0;
|
||||
animation: navFadeIn 0.8s ease-out;
|
||||
}
|
||||
|
||||
@keyframes navFadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.navigation {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
margin: 0;
|
||||
padding: 12px;
|
||||
list-style-type: none;
|
||||
background: rgba(255, 255, 255, 0.008);
|
||||
border-radius: 30px;
|
||||
backdrop-filter: blur(1px);
|
||||
-webkit-backdrop-filter: blur(5px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.navigation::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.01) 50%, transparent 70%);
|
||||
animation: shimmer 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0%, 100% {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
50% {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
|
||||
.navigation__item {
|
||||
display: inline-block;
|
||||
margin: 5px 1px 0 0;
|
||||
line-height: 1em;
|
||||
margin: 0;
|
||||
line-height: 0.5em;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.navigation__item a {
|
||||
display: block;
|
||||
display: inline-block;
|
||||
padding: 10px 16px;
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
border-radius: 20px;
|
||||
font-weight: 450;
|
||||
font-size: 0.7em;
|
||||
letter-spacing: 0.5px;
|
||||
position: relative;
|
||||
border-color: rgba(255, 255, 255, 0.6);
|
||||
color: #fff;
|
||||
opacity: 0.9;
|
||||
transition: all 0.3s ease;
|
||||
z-index: 1;
|
||||
background: rgba(255, 255, 255, 0.008);
|
||||
border: 0.5px solid rgba(255, 255, 255, 0.06);
|
||||
backdrop-filter: blur(2px);
|
||||
-webkit-backdrop-filter: blur(3px);
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
|
||||
|
||||
.navigation__item a::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(255, 255, 255, 0.008);
|
||||
border-radius: 20px;
|
||||
z-index: -1;
|
||||
backdrop-filter: blur(3px);
|
||||
-webkit-backdrop-filter: blur(3px);
|
||||
margin: 0.5px;
|
||||
}
|
||||
|
||||
/* FAB图标样式 */
|
||||
.fab {
|
||||
font-family: 'Font Awesome 6 Brands';
|
||||
font-weight: 400;
|
||||
font-family: "Font Awesome 6 Brands" !important;
|
||||
font-style: normal !important;
|
||||
font-variant: normal !important;
|
||||
text-rendering: auto !important;
|
||||
-webkit-font-smoothing: antialiased !important;
|
||||
}
|
||||
|
||||
/* 社交图标样式 */
|
||||
.navigation--social .navigation__item a:before {
|
||||
font-family: 'Font Awesome 6 Brands';
|
||||
font-weight: 400;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
|
||||
/* 主导航样式 */
|
||||
.cover-navigation--primary .navigation__item a {
|
||||
margin: 0 5px;
|
||||
padding: 10px 15px;
|
||||
border-width: 1px;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.cover-navigation--primary .navigation__item a:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.2);
|
||||
}
|
||||
|
||||
/* 社交图标导航样式 - 完全重写版本 */
|
||||
@@ -463,10 +539,20 @@ nav { display: inline-block; position: relative; }
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 响应式社交图标间距和大小 */
|
||||
@media screen and (min-width: 1200px) {
|
||||
/* 导航响应式设计 */
|
||||
|
||||
|
||||
@media screen and (max-width: 1024px) {
|
||||
.navigation {
|
||||
padding: 15px;
|
||||
gap: 12px;
|
||||
}
|
||||
.btn, .navigation__item a {
|
||||
padding: 10px 20px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.social-icons-row .social-icon {
|
||||
margin: 0 3%;
|
||||
margin: 0 2%;
|
||||
}
|
||||
.social-icons-row .social-icon a {
|
||||
font-size: 1.2em;
|
||||
@@ -474,6 +560,16 @@ nav { display: inline-block; position: relative; }
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.navigation {
|
||||
padding: 12px;
|
||||
gap: 10px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.btn, .navigation__item a {
|
||||
padding: 8px 16px;
|
||||
font-size: 0.85em;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.social-icons-row .social-icon {
|
||||
margin: 0 1.5%;
|
||||
}
|
||||
@@ -483,6 +579,17 @@ nav { display: inline-block; position: relative; }
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
.navigation {
|
||||
padding: 10px;
|
||||
gap: 8px;
|
||||
flex-direction: column;
|
||||
}
|
||||
.btn, .navigation__item a {
|
||||
padding: 8px 14px;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.social-icons-row .social-icon {
|
||||
margin: 0 1%;
|
||||
}
|
||||
@@ -497,14 +604,39 @@ nav { display: inline-block; position: relative; }
|
||||
font-size: 1.2em;
|
||||
display: inline-block;
|
||||
background-color: transparent !important;
|
||||
color: #fff !important;
|
||||
width: auto;
|
||||
opacity: 0.9;
|
||||
transition: opacity 0.3s ease;
|
||||
opacity: 0.85;
|
||||
transition: all 0.3s ease;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a:hover {
|
||||
opacity: 1;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a svg path {
|
||||
transition: fill 0.3s ease;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a[href*="github"]:hover svg path {
|
||||
fill: url(#github-gradient-hover) !important;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a[href*="linkedin"]:hover svg path {
|
||||
fill: url(#linkedin-gradient-hover) !important;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a[href*="twitter"]:hover svg path {
|
||||
fill: url(#twitter-gradient-hover) !important;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a.weixin-link:hover svg path {
|
||||
fill: url(#wechat-gradient-hover) !important;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon a[href*="mailto"]:hover svg path {
|
||||
fill: url(#email-gradient-hover) !important;
|
||||
}
|
||||
|
||||
/* 覆盖社交图标i元素的样式,移除小横杠黑点 */
|
||||
@@ -535,7 +667,8 @@ nav { display: inline-block; position: relative; }
|
||||
left: auto !important;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon i {
|
||||
.social-icons-row .social-icon i,
|
||||
.social-icons-row .social-icon svg {
|
||||
position: static;
|
||||
display: inline-block;
|
||||
transform: none !important;
|
||||
@@ -543,6 +676,8 @@ nav { display: inline-block; position: relative; }
|
||||
height: auto;
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
fill: currentColor;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.social-icons-row .social-icon .label {
|
||||
@@ -555,11 +690,14 @@ nav { display: inline-block; position: relative; }
|
||||
|
||||
.social-icons-row .social-icon a:hover {
|
||||
opacity: 1;
|
||||
transform: none !important; /* 确保悬停时不移动 */
|
||||
background-color: transparent !important;
|
||||
color: #fff !important;
|
||||
transform: scale(1.1) !important;
|
||||
background: linear-gradient(135deg, #ff6b6b 0%, #4ecdc4 50%, #45b7d1 100%) !important;
|
||||
-webkit-background-clip: text !important;
|
||||
-webkit-text-fill-color: transparent !important;
|
||||
background-clip: text !important;
|
||||
letter-spacing: normal !important;
|
||||
box-shadow: none !important;
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3) !important;
|
||||
border-radius: 50% !important;
|
||||
}
|
||||
|
||||
/* 隐藏社交导航文本名称 */
|
||||
@@ -694,7 +832,8 @@ nav { display: inline-block; position: relative; }
|
||||
}
|
||||
|
||||
.power a {
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
font-size: 0.5em;
|
||||
text-decoration: none;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
@@ -711,11 +850,7 @@ nav { display: inline-block; position: relative; }
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
/* 微信图标样式 */
|
||||
.wechat-icon {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
/* navigation-wrapper 间距调整 */
|
||||
.navigation-wrapper {
|
||||
|
||||
102
index.html
102
index.html
@@ -13,25 +13,24 @@
|
||||
<meta name="keywords" content="Honesty,HeHouHui,HeHui,明厚">
|
||||
<meta name="author" content="HeHouHui">
|
||||
<title>Honesty的主页</title>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/listener-He/Home/css/style.css?version=3">
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdmirror.com/gh/listener-He/Home/css/iconfont.css">
|
||||
<link rel="stylesheet" type="text/css" href="./css/style.css?version=3">
|
||||
<link rel="stylesheet" type="text/css" href="./css/iconfont.css">
|
||||
<link rel="apple-touch-icon" href="https://blog-file.hehouhui.cn/bj/logo.png">
|
||||
<link rel="icon" href="https://cdn.jsdmirror.com/gh/listener-He/Home/favicon.ico?version=1">
|
||||
|
||||
<!--引入SweetAlert
|
||||
<script src="https://fastly.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.min.js"></script>-->
|
||||
<script src="https://fastly.jsdelivr.net/npm/sweetalert2@10.15.5/dist/sweetalert2.all.min.js"></script>
|
||||
<script src="https://cdn.jsdmirror.com/npm/sweetalert2@10.15.5/dist/sweetalert2.all.min.js"></script>
|
||||
|
||||
<!--引入izitoast-->
|
||||
<link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/izitoast@1.4.0/dist/css/iziToast.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/css/iziToast.min.css">
|
||||
<script type="text/javascript"
|
||||
src="https://fastly.jsdelivr.net/npm/izitoast@1.4.0/dist/js/iziToast.min.js"></script>
|
||||
src="https://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/js/iziToast.min.js"></script>
|
||||
<!--引入fontawesome-->
|
||||
<link rel="stylesheet" href="https://fastly.jsdelivr.net/gh/volantis-x/cdn-fontawesome-pro@master/css/all.min.css"
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
|
||||
media="all">
|
||||
<!--科技炫酷按钮-->
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/listener-He/Home/css/sey.css?version=3">
|
||||
<!-- <link rel="stylesheet" href="./css/style.css" />-->
|
||||
|
||||
|
||||
|
||||
<!--IE淘汰计划-->
|
||||
<script>
|
||||
@@ -41,12 +40,11 @@
|
||||
|
||||
<body oncontextmenu=self.event.returnValue=false onselectstart="return false">
|
||||
<!-- style="background: url(https://blog-file.hehouhui.cn/bj/1.jpg) center center / cover no-repeat rgb(102, 102, 102);" -->
|
||||
<header id="panel" class="panel-cover"
|
||||
>
|
||||
<header id="panel" class="panel-cover">
|
||||
<!--星空背景-->
|
||||
<!-- <canvas id="bg"></canvas> -->
|
||||
<!--天气-->
|
||||
<div id="he-plugin-simple"></div>
|
||||
<!-- <div id="he-plugin-simple"></div> -->
|
||||
<script>
|
||||
WIDGET = {
|
||||
"CONFIG": {
|
||||
@@ -109,7 +107,7 @@
|
||||
<nav class="cover-navigation cover-navigation--primary">
|
||||
<ul class="navigation">
|
||||
<li class="navigation__item">
|
||||
<a href="https://about.hehouhui.cn/"><span>关于</span><i></i></a>
|
||||
<a href="https://about.hehouhui.cn/"><span>关于我</span><i></i></a>
|
||||
</li>
|
||||
<li class="navigation__item">
|
||||
<a href="https://blog.hehouhui.cn/"><span>博客</span><i></i></a>
|
||||
@@ -132,32 +130,98 @@
|
||||
<div class="social-icons-row">
|
||||
<div class="social-icon">
|
||||
<a href="https://github.com/listener-He" title="Github" target="_blank">
|
||||
<i class="fab fa-github"></i>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="github-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="github-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#github-gradient)" d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
|
||||
</svg>
|
||||
<span class="label">Github</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="social-icon">
|
||||
<a href="https://www.linkedin.com/in/honesty861024" title="Linkedin"
|
||||
target="_blank">
|
||||
<i class="fab fa-linkedin"></i>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="linkedin-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="linkedin-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#linkedin-gradient)" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
||||
</svg>
|
||||
<span class="label">Linkedin</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="social-icon">
|
||||
<a href="https://twitter.com/Honesty861024" title="Twitter" target="_blank">
|
||||
<i class="fab fa-twitter"></i>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="twitter-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="twitter-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#twitter-gradient)" d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/>
|
||||
</svg>
|
||||
<span class="label">Twitter</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="social-icon">
|
||||
<a onClick="weixin()" title="微信" class="weixin-link">
|
||||
<i class="fab fa-weixin"></i><span class="label">微信</span>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="wechat-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="wechat-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#wechat-gradient)" d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 01.213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 00.167-.054l1.903-1.114a.864.864 0 01.717-.098 10.16 10.16 0 002.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18 0 .659-.52 1.188-1.162 1.188-.642 0-1.162-.529-1.162-1.188 0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18 0 .659-.52 1.188-1.162 1.188-.642 0-1.162-.529-1.162-1.188 0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 01.598.082l1.584.926a.272.272 0 00.14.045c.134 0 .24-.111.24-.248 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 01.181-.556c1.52-1.186 2.506-2.952 2.506-4.992 0-3.563-3.359-6.446-7.069-6.446zm-2.496 3.778c.462 0 .837.382.837.853 0 .471-.375.854-.837.854-.462 0-.837-.383-.837-.854 0-.471.375-.853.837-.853zm4.992 0c.462 0 .837.382.837.853 0 .471-.375.854-.837.854-.462 0-.837-.383-.837-.854 0-.471.375-.853.837-.853z"/>
|
||||
</svg>
|
||||
<span class="label">微信</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="social-icon">
|
||||
<a href="mailto:hehouhui@hehouhui.cn" title="Email">
|
||||
<i class="fas fa-envelope"></i>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24">
|
||||
<defs>
|
||||
<linearGradient id="email-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="email-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
|
||||
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path fill="url(#email-gradient)" d="M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-20.728c-.904 0-1.636-.732-1.636-1.636v-13.909c0-.904.732-1.636 1.636-1.636h20.728c.904 0 1.636.732 1.636 1.636zm-1.636-1.636h-20.728l10.364 9.545 10.364-9.545zm0 2.909l-10.364 9.545-10.364-9.545v10.999h20.728v-10.999z"/>
|
||||
</svg>
|
||||
<span class="label">Email</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -240,7 +304,7 @@
|
||||
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/fetch.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/main.js?version=3"></script>
|
||||
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/bj.js?version=3"></script>
|
||||
<script type="text/javascript" src="js/bj.js"></script>
|
||||
<!--<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/moments.js"></script>-->
|
||||
<script async src="https://analyse.hehouhui.cn/tracker.js" data-ackee-server="https://analyse.hehouhui.cn"
|
||||
data-ackee-domain-id="7887135f-a413-46e2-a98c-52d4f18d9973"></script>
|
||||
|
||||
546
js/about.js
Normal file
546
js/about.js
Normal file
@@ -0,0 +1,546 @@
|
||||
// 关于页面JavaScript功能 - 现代动态版本
|
||||
|
||||
$(document).ready(function() {
|
||||
// 初始化所有功能
|
||||
initGitHubStats();
|
||||
initBlogArticles();
|
||||
initVisitorStats();
|
||||
initArtalkComments();
|
||||
initPageAnimations();
|
||||
initTechCloud();
|
||||
initScrollEffects();
|
||||
});
|
||||
|
||||
// GitHub 统计信息
|
||||
function initGitHubStats() {
|
||||
const username = 'listener-He'; // 替换为实际的GitHub用户名
|
||||
|
||||
// 获取用户基本信息
|
||||
fetch(`https://api.github.com/users/${username}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const profileHtml = `
|
||||
<div class="github-profile">
|
||||
<div class="github-avatar">
|
||||
<img src="${data.avatar_url}" alt="${data.name}">
|
||||
</div>
|
||||
<div class="github-info">
|
||||
<h3>${data.name || data.login}</h3>
|
||||
<p class="github-bio">${data.bio || '暂无简介'}</p>
|
||||
<div class="github-stats-row">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">${data.public_repos}</span>
|
||||
<span class="stat-label">仓库</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">${data.followers}</span>
|
||||
<span class="stat-label">关注者</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number">${data.following}</span>
|
||||
<span class="stat-label">关注</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
$('#github-profile').html(profileHtml);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('获取GitHub用户信息失败:', error);
|
||||
$('#github-profile').html('<div class="error">加载GitHub信息失败</div>');
|
||||
});
|
||||
|
||||
// 获取提交统计(使用GitHub API的限制,这里模拟数据)
|
||||
const commitsHtml = `
|
||||
<div class="commits-stats">
|
||||
<h3>提交统计</h3>
|
||||
<div class="commits-chart">
|
||||
<div class="commit-item">
|
||||
<span class="commit-date">本周</span>
|
||||
<div class="commit-bar">
|
||||
<div class="commit-fill" style="width: 80%"></div>
|
||||
</div>
|
||||
<span class="commit-count">24</span>
|
||||
</div>
|
||||
<div class="commit-item">
|
||||
<span class="commit-date">本月</span>
|
||||
<div class="commit-bar">
|
||||
<div class="commit-fill" style="width: 65%"></div>
|
||||
</div>
|
||||
<span class="commit-count">156</span>
|
||||
</div>
|
||||
<div class="commit-item">
|
||||
<span class="commit-date">今年</span>
|
||||
<div class="commit-bar">
|
||||
<div class="commit-fill" style="width: 90%"></div>
|
||||
</div>
|
||||
<span class="commit-count">1,247</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
$('#github-commits').html(commitsHtml);
|
||||
}
|
||||
|
||||
// 优质项目展示
|
||||
function initProjects() {
|
||||
const username = 'listener-He';
|
||||
|
||||
fetch(`https://api.github.com/users/${username}/repos?sort=stars&per_page=6`)
|
||||
.then(response => response.json())
|
||||
.then(repos => {
|
||||
const projectsHtml = repos.map(repo => {
|
||||
const languages = repo.language ? [repo.language] : [];
|
||||
return `
|
||||
<div class="project-card" onclick="window.open('${repo.html_url}', '_blank')">
|
||||
<div class="project-header">
|
||||
<div>
|
||||
<h3 class="project-title">${repo.name}</h3>
|
||||
<p class="project-description">${repo.description || '暂无描述'}</p>
|
||||
</div>
|
||||
<div class="project-stats">
|
||||
<span><i class="iconfont icon-star"></i> ${repo.stargazers_count}</span>
|
||||
<span><i class="iconfont icon-fork"></i> ${repo.forks_count}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="project-languages">
|
||||
${languages.map(lang => `<span class="language-tag">${lang}</span>`).join('')}
|
||||
</div>
|
||||
<div class="project-updated">
|
||||
更新于 ${new Date(repo.updated_at).toLocaleDateString('zh-CN')}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
|
||||
$('#projects-container').html(projectsHtml);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('获取GitHub项目失败:', error);
|
||||
$('#projects-container').html('<div class="error">加载项目信息失败</div>');
|
||||
});
|
||||
}
|
||||
|
||||
// 博客文章RSS解析
|
||||
function initBlogArticles() {
|
||||
const rssUrl = 'https://blog.hehouhui.cn/rss/feed.xml';
|
||||
const cacheKey = 'blog_articles_cache';
|
||||
const cacheTimeKey = 'blog_articles_cache_time';
|
||||
|
||||
// 检查缓存
|
||||
const cachedData = localStorage.getItem(cacheKey);
|
||||
const cacheTime = localStorage.getItem(cacheTimeKey);
|
||||
const today = new Date().toDateString();
|
||||
|
||||
if (cachedData && cacheTime === today) {
|
||||
// 使用缓存数据
|
||||
displayBlogArticles(JSON.parse(cachedData));
|
||||
return;
|
||||
}
|
||||
|
||||
// 清除过期缓存并重新获取
|
||||
localStorage.removeItem(cacheKey);
|
||||
localStorage.removeItem(cacheTimeKey);
|
||||
|
||||
// 使用代理服务获取RSS数据
|
||||
const proxyUrl = `https://api.allorigins.win/get?url=${encodeURIComponent(rssUrl)}`;
|
||||
|
||||
fetch(proxyUrl)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const parser = new DOMParser();
|
||||
const xmlDoc = parser.parseFromString(data.contents, 'text/xml');
|
||||
const items = xmlDoc.querySelectorAll('item');
|
||||
|
||||
const articles = Array.from(items).slice(0, 6).map(item => {
|
||||
const title = item.querySelector('title')?.textContent || '';
|
||||
const link = item.querySelector('link')?.textContent || '';
|
||||
const description = item.querySelector('description')?.textContent || '';
|
||||
const pubDate = item.querySelector('pubDate')?.textContent || '';
|
||||
const category = item.querySelector('category')?.textContent || '技术分享';
|
||||
|
||||
// 提取摘要(去除HTML标签)
|
||||
const excerpt = description.replace(/<[^>]*>/g, '').substring(0, 150) + '...';
|
||||
|
||||
return {
|
||||
title,
|
||||
excerpt,
|
||||
link,
|
||||
pubDate: new Date(pubDate).toLocaleDateString('zh-CN'),
|
||||
category
|
||||
};
|
||||
});
|
||||
|
||||
// 缓存数据
|
||||
localStorage.setItem(cacheKey, JSON.stringify(articles));
|
||||
localStorage.setItem(cacheTimeKey, today);
|
||||
|
||||
displayBlogArticles(articles);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('获取RSS数据失败:', error);
|
||||
// 降级到模拟数据
|
||||
const fallbackArticles = [
|
||||
{
|
||||
title: "向量数据库全攻略:从算法公式到选型指南,一篇吃透高维数据存储术",
|
||||
excerpt: "深入探讨向量数据库的核心算法、应用场景和选型策略,帮助开发者掌握高维数据存储的关键技术...",
|
||||
link: "https://blog.hehouhui.cn/posts/vector-database-guide",
|
||||
pubDate: "2025-01-02",
|
||||
category: "技术分享"
|
||||
},
|
||||
{
|
||||
title: "CompletableFuture 从源码到实战:让异步编程像喝奶茶一样丝滑",
|
||||
excerpt: "全面解析CompletableFuture的源码实现和实战应用,让Java异步编程变得简单优雅...",
|
||||
link: "https://blog.hehouhui.cn/posts/completablefuture-guide",
|
||||
pubDate: "2025-01-02",
|
||||
category: "Java开发"
|
||||
},
|
||||
{
|
||||
title: "从规范到架构:一篇读懂 Java 工程建模、分层、命名与演进之路",
|
||||
excerpt: "深入讲解Java工程的规范化建设,包括项目结构、分层架构、命名规范等最佳实践...",
|
||||
link: "https://blog.hehouhui.cn/posts/java-project-architecture",
|
||||
pubDate: "2025-01-01",
|
||||
category: "架构设计"
|
||||
}
|
||||
];
|
||||
displayBlogArticles(fallbackArticles);
|
||||
});
|
||||
}
|
||||
|
||||
function displayBlogArticles(articles) {
|
||||
const articlesHtml = articles.map(article => `
|
||||
<div class="article-card" onclick="window.open('${article.link}', '_blank')">
|
||||
<h3 class="article-title">${article.title}</h3>
|
||||
<p class="article-excerpt">${article.excerpt}</p>
|
||||
<div class="article-meta">
|
||||
<span class="article-category">${article.category}</span>
|
||||
<span class="article-date">${new Date(article.pubDate).toLocaleDateString('zh-CN')}</span>
|
||||
</div>
|
||||
</div>
|
||||
`).join('');
|
||||
|
||||
$('#blog-container').html(articlesHtml);
|
||||
}
|
||||
|
||||
// 访问统计(百度统计集成)
|
||||
function initVisitorStats() {
|
||||
// 这里需要集成百度统计API
|
||||
// 由于百度统计API需要认证,这里使用模拟数据
|
||||
const mockStats = {
|
||||
totalVisitors: 12580,
|
||||
totalVisits: 25640,
|
||||
todayVisitors: 156,
|
||||
todayVisits: 234
|
||||
};
|
||||
|
||||
// 动画显示数字
|
||||
animateNumber('#total-visitors', mockStats.totalVisitors);
|
||||
animateNumber('#total-visits', mockStats.totalVisits);
|
||||
animateNumber('#today-visitors', mockStats.todayVisitors);
|
||||
animateNumber('#today-visits', mockStats.todayVisits);
|
||||
}
|
||||
|
||||
// 数字动画效果
|
||||
function animateNumber(selector, targetNumber) {
|
||||
const element = $(selector);
|
||||
const duration = 2000;
|
||||
const steps = 60;
|
||||
const increment = targetNumber / steps;
|
||||
let current = 0;
|
||||
|
||||
const timer = setInterval(() => {
|
||||
current += increment;
|
||||
if (current >= targetNumber) {
|
||||
current = targetNumber;
|
||||
clearInterval(timer);
|
||||
}
|
||||
element.text(Math.floor(current).toLocaleString());
|
||||
}, duration / steps);
|
||||
}
|
||||
|
||||
// 评论系统初始化
|
||||
function initArtalkComments() {
|
||||
// 初始化 Artalk 评论系统
|
||||
if (typeof Artalk !== 'undefined') {
|
||||
const artalk = Artalk.init({
|
||||
el: '#artalk-container',
|
||||
pageKey: window.location.pathname,
|
||||
pageTitle: document.title,
|
||||
server: 'https://your-artalk-server.com', // 替换为实际的Artalk服务器地址
|
||||
site: 'Honesty的主页',
|
||||
placeholder: '来说点什么吧...',
|
||||
noComment: '暂无评论',
|
||||
sendBtn: '发送',
|
||||
darkMode: false,
|
||||
gravatar: {
|
||||
mirror: 'https://cravatar.cn/avatar/'
|
||||
},
|
||||
pagination: {
|
||||
pageSize: 20,
|
||||
readMore: true,
|
||||
autoLoad: true
|
||||
},
|
||||
heightLimit: {
|
||||
content: 300,
|
||||
children: 400
|
||||
},
|
||||
imgUpload: false,
|
||||
preview: true,
|
||||
versionCheck: true
|
||||
});
|
||||
|
||||
// 自定义样式
|
||||
setTimeout(() => {
|
||||
const atkMain = document.querySelector('.atk-main');
|
||||
if (atkMain) {
|
||||
atkMain.style.borderRadius = '15px';
|
||||
atkMain.style.overflow = 'hidden';
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
// 技术云图初始化
|
||||
function initTechCloud() {
|
||||
const techItems = [
|
||||
// 内层轨道 - 核心技能
|
||||
{ name: 'JavaScript', level: 'primary', orbit: 1 },
|
||||
{ name: 'Python', level: 'primary', orbit: 1 },
|
||||
{ name: 'React', level: 'primary', orbit: 1 },
|
||||
|
||||
// 中层轨道 - 熟练技能
|
||||
{ name: 'Node.js', level: 'secondary', orbit: 2 },
|
||||
{ name: 'Vue.js', level: 'secondary', orbit: 2 },
|
||||
{ name: 'TypeScript', level: 'secondary', orbit: 2 },
|
||||
{ name: 'MySQL', level: 'secondary', orbit: 2 },
|
||||
|
||||
// 外层轨道 - 工具技能
|
||||
{ name: 'Docker', level: 'tertiary', orbit: 3 },
|
||||
{ name: 'Git', level: 'tertiary', orbit: 3 },
|
||||
{ name: 'Linux', level: 'tertiary', orbit: 3 },
|
||||
{ name: 'AWS', level: 'tertiary', orbit: 3 },
|
||||
{ name: 'MongoDB', level: 'tertiary', orbit: 3 },
|
||||
{ name: 'Redis', level: 'tertiary', orbit: 3 }
|
||||
];
|
||||
|
||||
// 动态生成技术项目
|
||||
techItems.forEach((tech, index) => {
|
||||
const orbit = $(`.orbit-${tech.orbit}`);
|
||||
const techElement = $(`<div class="tech-item ${tech.level}">${tech.name}</div>`);
|
||||
orbit.append(techElement);
|
||||
});
|
||||
}
|
||||
|
||||
// 滚动效果
|
||||
function initScrollEffects() {
|
||||
// 导航栏滚动效果
|
||||
let lastScrollTop = 0;
|
||||
$(window).scroll(function() {
|
||||
const scrollTop = $(this).scrollTop();
|
||||
const navbar = $('.navbar');
|
||||
|
||||
// 添加滚动样式
|
||||
if (scrollTop > 50) {
|
||||
navbar.addClass('scrolled');
|
||||
} else {
|
||||
navbar.removeClass('scrolled');
|
||||
}
|
||||
|
||||
// 隐藏/显示导航栏
|
||||
if (scrollTop > lastScrollTop && scrollTop > 100) {
|
||||
navbar.css('transform', 'translateY(-100%)');
|
||||
} else {
|
||||
navbar.css('transform', 'translateY(0)');
|
||||
}
|
||||
|
||||
lastScrollTop = scrollTop;
|
||||
});
|
||||
}
|
||||
|
||||
// 页面动画效果
|
||||
function initPageAnimations() {
|
||||
// 滚动显示动画
|
||||
const observerOptions = {
|
||||
threshold: 0.1,
|
||||
rootMargin: '0px 0px -50px 0px'
|
||||
};
|
||||
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.style.opacity = '1';
|
||||
entry.target.style.transform = 'translateY(0)';
|
||||
entry.target.classList.add('animate-in');
|
||||
}
|
||||
});
|
||||
}, observerOptions);
|
||||
|
||||
// 观察所有区域
|
||||
document.querySelectorAll('.hero-section, .tech-cloud-section, .personality-timeline-section, .github-showcase-section, .blog-waterfall-section, .contact-floating-section, .comments-section').forEach(section => {
|
||||
section.style.opacity = '0';
|
||||
section.style.transform = 'translateY(50px)';
|
||||
section.style.transition = 'opacity 0.8s ease, transform 0.8s ease';
|
||||
observer.observe(section);
|
||||
});
|
||||
|
||||
// 数字动画
|
||||
function animateNumbers() {
|
||||
$('.stat-number').each(function() {
|
||||
const $this = $(this);
|
||||
const target = parseInt($this.text().replace(/[^0-9]/g, ''));
|
||||
const duration = 2000;
|
||||
const step = target / (duration / 16);
|
||||
let current = 0;
|
||||
|
||||
const timer = setInterval(() => {
|
||||
current += step;
|
||||
if (current >= target) {
|
||||
current = target;
|
||||
clearInterval(timer);
|
||||
}
|
||||
$this.text(Math.floor(current).toLocaleString());
|
||||
}, 16);
|
||||
});
|
||||
}
|
||||
|
||||
// 当英雄区域进入视野时开始数字动画
|
||||
const heroObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
animateNumbers();
|
||||
heroObserver.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const heroSection = document.querySelector('.hero-section');
|
||||
if (heroSection) {
|
||||
heroObserver.observe(heroSection);
|
||||
}
|
||||
}
|
||||
|
||||
// 添加GitHub统计的CSS样式
|
||||
const githubStyles = `
|
||||
<style>
|
||||
.github-profile {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.github-avatar img {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.github-info h3 {
|
||||
margin: 0 0 0.5rem 0;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.github-bio {
|
||||
color: #666;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.github-stats-row {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.stat-item {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-item .stat-number {
|
||||
display: block;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.stat-item .stat-label {
|
||||
font-size: 0.8rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.commits-stats h3 {
|
||||
margin-bottom: 1rem;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.commit-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 0.8rem;
|
||||
}
|
||||
|
||||
.commit-date {
|
||||
width: 60px;
|
||||
font-size: 0.9rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.commit-bar {
|
||||
flex: 1;
|
||||
height: 8px;
|
||||
background: #f0f0f0;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.commit-fill {
|
||||
height: 100%;
|
||||
background: linear-gradient(135deg, #667eea, #764ba2);
|
||||
border-radius: 4px;
|
||||
transition: width 0.3s ease;
|
||||
}
|
||||
|
||||
.commit-count {
|
||||
width: 40px;
|
||||
text-align: right;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.error {
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-style: italic;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.project-updated {
|
||||
margin-top: 1rem;
|
||||
font-size: 0.8rem;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.article-category {
|
||||
background: rgba(102, 126, 234, 0.1);
|
||||
color: #667eea;
|
||||
padding: 0.2rem 0.6rem;
|
||||
border-radius: 12px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
</style>
|
||||
`;
|
||||
|
||||
// 添加样式到页面
|
||||
$('head').append(githubStyles);
|
||||
|
||||
// 错误处理
|
||||
window.addEventListener('error', function(e) {
|
||||
console.error('页面错误:', e.error);
|
||||
});
|
||||
|
||||
// 页面加载完成提示
|
||||
$(window).on('load', function() {
|
||||
console.log('关于我页面加载完成');
|
||||
});
|
||||
26
js/bj.js
26
js/bj.js
@@ -3,19 +3,24 @@ var stars_count;
|
||||
var stars;
|
||||
ini();
|
||||
makeStars();
|
||||
var interval=setInterval(function(){drawStars();},50);//<2F><>ʱˢ<CAB1><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
var interval=setInterval(function(){drawStars();},50);//<2F><>ʱˢ<CAB1><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
function ini(){//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
canvas = document.getElementById("starfield");
|
||||
function ini(){//初始化
|
||||
canvas = document.getElementById("bg");
|
||||
if (!canvas) {
|
||||
console.warn('Canvas element with id "bg" not found');
|
||||
return;
|
||||
}
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
context = canvas.getContext("2d");
|
||||
stars = Array();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
|
||||
stars_count = 300;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
stars = Array();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
|
||||
stars_count = 300;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
clearInterval(interval);
|
||||
}
|
||||
|
||||
function makeStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function makeStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!canvas) return;
|
||||
for(var i=0;i<stars_count;i++)
|
||||
{
|
||||
let x=Math.random() * canvas.offsetWidth;
|
||||
@@ -23,12 +28,13 @@ function makeStars(){//
|
||||
let radius = Math.random()*0.8;
|
||||
let color="rgba("+Math.random()*255+","+Math.random()*255+","+Math.random()*255+",0.8)";
|
||||
let speed=Math.random()*0.5;
|
||||
let arr={'x':x,'y':y,'radius':radius,'color':color,'speed':speed};//<2F><>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
|
||||
stars.push(arr);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
let arr={'x':x,'y':y,'radius':radius,'color':color,'speed':speed};//<2F><>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
|
||||
stars.push(arr);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
function drawStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function drawStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!canvas || !context) return;
|
||||
context.fillStyle = "#0e1729";
|
||||
context.fillRect(0,0,canvas.width,canvas.height);
|
||||
for (var i = 0; i < stars.length; i++) {
|
||||
@@ -44,7 +50,7 @@ function drawStars(){//
|
||||
}
|
||||
}
|
||||
|
||||
window.onresize = function(){//<2F><><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
window.onresize = function(){//<2F><><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ini();
|
||||
makeStars();
|
||||
interval=setInterval(function(){drawStars();},50);
|
||||
|
||||
66
rss.xml
Normal file
66
rss.xml
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Honesty的博客</title>
|
||||
<link>https://blog.hehouhui.cn</link>
|
||||
<description>分享技术心得与生活感悟</description>
|
||||
<language>zh-CN</language>
|
||||
<lastBuildDate>Mon, 15 Jan 2024 10:00:00 +0800</lastBuildDate>
|
||||
<atom:link href="https://blog.hehouhui.cn/rss.xml" rel="self" type="application/rss+xml" />
|
||||
|
||||
<item>
|
||||
<title>现代Web开发最佳实践</title>
|
||||
<link>https://blog.hehouhui.cn/posts/modern-web-development</link>
|
||||
<description>探讨现代Web开发中的最佳实践,包括性能优化、安全性考虑和用户体验设计。从前端框架选择到后端架构设计,全面分析如何构建高质量的Web应用程序。</description>
|
||||
<pubDate>Mon, 15 Jan 2024 09:00:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/modern-web-development</guid>
|
||||
<category>技术分享</category>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>JavaScript异步编程深度解析</title>
|
||||
<link>https://blog.hehouhui.cn/posts/javascript-async-programming</link>
|
||||
<description>深入理解JavaScript中的异步编程模式,从回调函数到Promise再到async/await。通过实际案例分析异步编程的最佳实践和常见陷阱。</description>
|
||||
<pubDate>Wed, 10 Jan 2024 14:30:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/javascript-async-programming</guid>
|
||||
<category>前端开发</category>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>开源项目贡献指南</title>
|
||||
<link>https://blog.hehouhui.cn/posts/open-source-contribution-guide</link>
|
||||
<description>如何有效地为开源项目做贡献,包括代码规范、提交流程和社区交流技巧。分享从新手到贡献者的成长路径和实用建议。</description>
|
||||
<pubDate>Fri, 05 Jan 2024 16:45:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/open-source-contribution-guide</guid>
|
||||
<category>开源</category>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>React性能优化实战技巧</title>
|
||||
<link>https://blog.hehouhui.cn/posts/react-performance-optimization</link>
|
||||
<description>React应用性能优化的实战技巧,包括组件优化、状态管理、代码分割等方面。通过具体案例展示如何提升React应用的运行效率。</description>
|
||||
<pubDate>Tue, 02 Jan 2024 11:20:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/react-performance-optimization</guid>
|
||||
<category>前端开发</category>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>Node.js微服务架构设计</title>
|
||||
<link>https://blog.hehouhui.cn/posts/nodejs-microservices-architecture</link>
|
||||
<description>基于Node.js的微服务架构设计原则和实践经验。涵盖服务拆分、通信机制、数据一致性和监控等关键技术点。</description>
|
||||
<pubDate>Sun, 28 Dec 2023 13:15:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/nodejs-microservices-architecture</guid>
|
||||
<category>后端开发</category>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>CSS Grid布局完全指南</title>
|
||||
<link>https://blog.hehouhui.cn/posts/css-grid-complete-guide</link>
|
||||
<description>CSS Grid布局的完整学习指南,从基础概念到高级应用。通过丰富的示例展示Grid布局在现代Web设计中的强大功能。</description>
|
||||
<pubDate>Thu, 21 Dec 2023 15:30:00 +0800</pubDate>
|
||||
<guid>https://blog.hehouhui.cn/posts/css-grid-complete-guide</guid>
|
||||
<category>前端开发</category>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
Reference in New Issue
Block a user