diff --git a/src/components/SocialLinks.vue b/src/components/SocialLinks.vue
index 5caba9a..1604241 100644
--- a/src/components/SocialLinks.vue
+++ b/src/components/SocialLinks.vue
@@ -1,93 +1,106 @@
@@ -96,35 +109,46 @@ const openLink = (url) => {
-
![]()
+
![]()
+
@@ -138,17 +162,22 @@ const openLink = (url) => {
background: rgba(var(--v-theme-surface), 0.8);
backdrop-filter: blur(12px);
border-radius: 1.5rem;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1),
+ box-shadow:
+ 0 10px 30px rgba(0, 0, 0, 0.1),
inset 0 0 0 1px rgba(255, 255, 255, 0.1);
will-change: transform;
overflow: hidden;
- transition: background 0.3s ease, box-shadow 0.3s ease;
+ transition:
+ background 0.3s ease,
+ box-shadow 0.3s ease;
+ border: 1px solid rgba(255, 255, 255, 0.05);
}
/* 暗黑模式适配 */
-[data-theme="dark"] .social-links-card {
+:global([data-theme="dark"]) .social-links-card {
background: rgba(var(--v-theme-surface), 0.6);
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3),
+ box-shadow:
+ 0 10px 30px rgba(0, 0, 0, 0.3),
inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}
@@ -169,6 +198,11 @@ const openLink = (url) => {
padding: 0.8rem 0;
border-radius: 0.8rem;
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ outline: none;
+}
+
+.social-item:focus-visible {
+ box-shadow: 0 0 0 2px var(--hover-color);
}
.social-item:hover {
@@ -191,7 +225,6 @@ const openLink = (url) => {
.social-icon {
font-size: 1.6rem;
- color: var(--text-primary);
transition: all 0.3s ease;
}
@@ -234,49 +267,69 @@ const openLink = (url) => {
}
/* 二维码样式 */
-.qr-overlay {
+.qr-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
- background: rgba(0, 0, 0, 0.7);
display: flex;
align-items: center;
justify-content: center;
z-index: 100;
- backdrop-filter: blur(5px);
+ pointer-events: none;
}
-.qr-container {
+.qr-code {
background: white;
padding: 1.5rem;
border-radius: 1rem;
text-align: center;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
+ position: relative;
+ pointer-events: auto;
}
-.qr-image {
+.qr-code img {
width: 180px;
height: 180px;
- margin-bottom: 0.5rem;
+ display: block;
+ margin: 0 auto;
}
-.qr-hint {
- color: var(--text-primary);
- font-weight: 500;
- margin-top: 0.5rem;
+.qr-close {
+ position: absolute;
+ top: 0.5rem;
+ right: 0.5rem;
+ background: transparent;
+ border: none;
+ font-size: 1.5rem;
+ cursor: pointer;
+ color: #666;
+ width: 2rem;
+ height: 2rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ transition: all 0.2s ease;
+}
+
+.qr-close:hover {
+ background: #f0f0f0;
+ color: #333;
}
/* 过渡动画 */
.fade-enter-active,
.fade-leave-active {
- transition: opacity 0.3s ease;
+ transition: all 0.3s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
+ transform: scale(0.95);
}
/* 响应式调整 */
@@ -294,5 +347,14 @@ const openLink = (url) => {
.social-icon {
font-size: 1.4rem;
}
+
+ .qr-code {
+ padding: 1rem;
+ }
+
+ .qr-code img {
+ width: 150px;
+ height: 150px;
+ }
}
-
+
\ No newline at end of file