From 72b9c781f62a17016c4e91acb3067cca27b13c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=B1=E5=96=9D=E6=B0=B4=E7=9A=84=E6=9C=A8=E5=AD=90?= Date: Mon, 9 Feb 2026 16:26:23 +0800 Subject: [PATCH] add some info --- src/App.vue | 272 ++++++++++++++++++++++++++--------- src/components/SearchBox.vue | 69 ++++----- src/components/SmartCard.vue | 89 +++++++----- 3 files changed, 288 insertions(+), 142 deletions(-) diff --git a/src/App.vue b/src/App.vue index d8e64f5..5e026ff 100644 --- a/src/App.vue +++ b/src/App.vue @@ -18,22 +18,31 @@
- - -
-
- +
+
+ +
+
@@ -44,6 +53,10 @@ 找到 {{ filteredCards.length }} 个精准结果
+ + + @@ -413,14 +426,14 @@ onMounted(() => { .hero-header { flex-shrink: 0; text-align: center; - padding: 12px 20px; + padding: 24px 20px 20px; background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(20px); - border-radius: 0 0 20px 20px; + border-radius: 0 0 24px 24px; border: 1px solid rgba(255, 255, 255, 0.25); border-bottom: none; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); - margin: 0 20px; + margin: 0 20px 16px; } .logo-area { @@ -456,9 +469,10 @@ onMounted(() => { flex-shrink: 0; display: flex; flex-direction: column; - gap: 8px; + gap: 16px; align-items: center; padding: 0 20px; + margin-bottom: 12px; } /* 标签云 */ @@ -466,34 +480,59 @@ onMounted(() => { width: 100%; display: flex; justify-content: center; + order: -1; + overflow: hidden; +} + +.tags-scroll-container { + display: flex; + animation: scroll-left 80s linear infinite; + width: max-content; +} + +.tags-scroll-container:hover { + animation-play-state: paused; } .tags-wrapper { display: flex; - flex-wrap: wrap; - gap: 6px; - justify-content: center; - max-width: 1000px; - padding: 4px 0; + flex-wrap: nowrap; + gap: 10px; + padding: 8px 0; + flex-shrink: 0; +} + +.tags-wrapper:last-child { + margin-left: 10px; +} + +@keyframes scroll-left { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-50%); + } } .tag-item { - padding: 6px 12px; + padding: 8px 16px; border: none; - border-radius: 16px; - background: rgba(255, 255, 255, 0.2); + border-radius: 20px; + background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(10px); color: white; - font-weight: 600; + font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; - gap: 4px; - font-size: 0.85rem; + gap: 6px; + font-size: 0.9rem; position: relative; overflow: hidden; white-space: nowrap; + border: 1px solid rgba(255, 255, 255, 0.1); } .tag-item::before { @@ -512,15 +551,18 @@ onMounted(() => { } .tag-item:hover { - background: rgba(255, 255, 255, 0.3); + background: rgba(255, 255, 255, 0.25); transform: translateY(-2px); + border-color: rgba(255, 255, 255, 0.3); } .tag-item.active { background: rgba(255, 255, 255, 0.95); color: #667eea; transform: scale(1.05) translateY(-2px); - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); + border-color: transparent; + font-weight: 600; } .tag-item.popular { @@ -573,7 +615,7 @@ onMounted(() => { overflow-y: auto; overflow-x: hidden; min-height: 0; - padding: 10px; + padding: 16px; } /* 加载状态 */ @@ -608,9 +650,11 @@ onMounted(() => { /* 卡片网格 */ .cards-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 16px; - padding: 10px; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 20px; + padding: 8px; + max-width: 1400px; + margin: 0 auto; } .card-wrapper { @@ -670,10 +714,11 @@ onMounted(() => { flex-shrink: 0; background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(20px); - border-radius: 20px; + border-radius: 20px 20px 0 0; border: 1px solid rgba(255, 255, 255, 0.25); - padding: 16px 20px; - margin: 0 20px 20px; + border-bottom: none; + padding: 20px 24px; + margin: 16px 20px 0; } .footer-content { @@ -805,57 +850,106 @@ onMounted(() => { } /* 响应式设计 */ -@media (max-width: 1024px) { +@media (max-width: 1200px) { .cards-grid { - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - } - - .hero-title { - font-size: 2.4rem; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 18px; } } -@media (max-width: 768px) { - .main-content { - padding: 12px; - gap: 12px; - } - - .hero-header { - padding: 24px 16px 16px; +@media (max-width: 1024px) { + .cards-grid { + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 16px; } .hero-title { - font-size: 1.8rem; - } - - .hero-subtitle { - font-size: 0.95rem; + font-size: 2.2rem; } .tags-wrapper { - gap: 6px; + gap: 8px; + } + + .tags-wrapper:last-child { + margin-left: 8px; } .tag-item { padding: 6px 12px; font-size: 0.85rem; } +} + +@media (max-width: 768px) { + .main-content { + padding: 0; + gap: 12px; + } + + .hero-header { + padding: 20px 16px 16px; + margin: 0 12px 12px; + border-radius: 0 0 16px 16px; + } + + .hero-title { + font-size: 1.6rem; + } + + .hero-subtitle { + font-size: 0.9rem; + } + + .controls-section { + padding: 0 12px; + gap: 12px; + margin-bottom: 8px; + } + + .tags-wrapper { + gap: 6px; + } + + .tags-wrapper:last-child { + margin-left: 6px; + } + + .tag-item { + padding: 5px 10px; + font-size: 0.8rem; + border-radius: 16px; + } + + .tags-scroll-container { + animation-duration: 60s; + } + + .content-section { + padding: 12px; + } .cards-grid { - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 12px; - padding: 6px; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: 14px; + padding: 4px; + } + + .app-footer { + margin: 12px 12px 0; + padding: 16px 16px; + border-radius: 16px 16px 0 0; } .footer-content { flex-direction: column; align-items: stretch; + gap: 12px; } .stats-overview { - justify-content: space-between; - gap: 12px; + justify-content: center; + gap: 16px; } .quick-actions { @@ -869,27 +963,65 @@ onMounted(() => { } @media (max-width: 480px) { + .hero-header { + padding: 16px 12px 12px; + margin: 0 8px 8px; + } + .hero-title { - font-size: 1.5rem; + font-size: 1.4rem; } .logo-icon { - font-size: 2rem; + font-size: 1.8rem; + } + + .controls-section { + padding: 0 8px; + gap: 10px; + } + + .tags-wrapper { + gap: 5px; + } + + .tags-wrapper:last-child { + margin-left: 5px; + } + + .tag-item { + padding: 4px 8px; + font-size: 0.75rem; + } + + .tags-scroll-container { + animation-duration: 50s; + } + + .content-section { + padding: 8px; } .cards-grid { grid-template-columns: 1fr; + gap: 12px; + } + + .app-footer { + margin: 8px 8px 0; + padding: 12px 12px; } .stats-overview { - flex-direction: column; - gap: 8px; + flex-direction: row; + justify-content: space-around; + gap: 12px; } .stat-item { - flex-direction: row; - justify-content: space-between; - width: 100%; + flex-direction: column; + align-items: center; + gap: 2px; } } \ No newline at end of file diff --git a/src/components/SearchBox.vue b/src/components/SearchBox.vue index d556e29..33a2969 100644 --- a/src/components/SearchBox.vue +++ b/src/components/SearchBox.vue @@ -69,11 +69,11 @@ defineExpose({ position: relative; z-index: 100; width: 100%; - max-width: 700px; + max-width: 600px; margin: 0 auto; display: flex; flex-direction: column; - gap: 8px; + gap: 10px; } .search-box { @@ -81,9 +81,9 @@ defineExpose({ display: flex; align-items: center; background: rgba(255, 255, 255, 0.95); - border-radius: 20px; - padding: 12px 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); + border-radius: 16px; + padding: 14px 18px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12); backdrop-filter: blur(10px); border: 2px solid transparent; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); @@ -105,7 +105,7 @@ defineExpose({ .search-box.is-focused { border-color: #667eea; - box-shadow: 0 6px 30px rgba(102, 126, 234, 0.3); + box-shadow: 0 8px 32px rgba(102, 126, 234, 0.35); transform: translateY(-2px); } @@ -137,10 +137,10 @@ input { border: none; background: transparent; outline: none; - font-size: 1rem; - padding: 8px 4px; + font-size: 1.05rem; + padding: 6px 4px; color: #333; - font-weight: 500; + font-weight: 400; position: relative; z-index: 1; transition: all 0.3s ease; @@ -235,13 +235,13 @@ input::placeholder { align-items: center; justify-content: center; gap: 8px; - background: rgba(255, 255, 255, 0.15); + background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); - padding: 8px 16px; - border-radius: 12px; + padding: 6px 14px; + border-radius: 20px; color: white; - font-size: 0.85rem; - opacity: 0.9; + font-size: 0.8rem; + opacity: 0.8; animation: fadeIn 0.5s ease-out; } @@ -277,54 +277,55 @@ input::placeholder { /* 响应式设计 */ @media (max-width: 768px) { .search-container { - max-width: 95%; + max-width: 100%; } - + .search-box { - padding: 10px 14px; - border-radius: 16px; + padding: 12px 14px; + border-radius: 14px; } - + .search-icon { font-size: 1.1rem; - width: 20px; - height: 20px; - margin-right: 8px; + width: 22px; + height: 22px; + margin-right: 10px; } - + input { font-size: 0.95rem; } - + .clear-btn { - width: 24px; - height: 24px; + width: 26px; + height: 26px; font-size: 0.9rem; } - + .stats-content { font-size: 0.85rem; padding: 8px 16px; } - + .search-hint { - font-size: 0.8rem; - padding: 6px 12px; + font-size: 0.78rem; + padding: 5px 12px; } } @media (max-width: 480px) { .search-box { - padding: 8px 12px; + padding: 10px 12px; + border-radius: 12px; } - + input { font-size: 0.9rem; } - + .search-hint { font-size: 0.75rem; - background: rgba(255, 255, 255, 0.1); + padding: 4px 10px; } } diff --git a/src/components/SmartCard.vue b/src/components/SmartCard.vue index 0fd7b83..d30bff8 100644 --- a/src/components/SmartCard.vue +++ b/src/components/SmartCard.vue @@ -147,14 +147,14 @@ const handleClick = (event) => { .smart-card { position: relative; background: rgba(255, 255, 255, 0.98); - border-radius: 16px; - padding: 16px; - min-height: 140px; + border-radius: 14px; + padding: 18px; + min-height: 150px; cursor: pointer; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - border: 1px solid rgba(0, 0, 0, 0.08); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + border: 1px solid rgba(0, 0, 0, 0.06); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); backdrop-filter: blur(10px); user-select: none; transform-style: preserve-3d; @@ -177,8 +177,8 @@ const handleClick = (event) => { } .smart-card.is-hovered { - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.1); - transform: translateY(-4px) scale(1.02); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05); + transform: translateY(-4px); } .smart-card.is-pressed { @@ -212,14 +212,14 @@ const handleClick = (event) => { height: 100%; display: flex; flex-direction: column; - gap: 12px; + gap: 14px; } /* 卡片头部 */ .card-header { display: flex; flex-direction: column; - gap: 6px; + gap: 8px; } .category-badge { @@ -237,12 +237,12 @@ const handleClick = (event) => { } .card-title { - font-size: 1.05rem; - font-weight: 800; + font-size: 1.1rem; + font-weight: 700; color: #1a1a1a; line-height: 1.3; margin: 0; - letter-spacing: -0.3px; + letter-spacing: -0.2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -253,32 +253,32 @@ const handleClick = (event) => { flex: 1; display: flex; flex-direction: column; - gap: 8px; + gap: 10px; } .card-description { - font-size: 0.85rem; + font-size: 0.88rem; color: #555; - line-height: 1.4; + line-height: 1.5; margin: 0; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; - min-height: 2.4em; + min-height: 2.6em; } .card-url { - font-size: 0.75rem; - color: #888; + font-size: 0.78rem; + color: #777; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - padding: 4px 8px; - background: rgba(0, 0, 0, 0.03); - border-radius: 6px; + padding: 5px 10px; + background: rgba(0, 0, 0, 0.04); + border-radius: 8px; align-self: flex-start; } @@ -398,24 +398,33 @@ const handleClick = (event) => { /* 响应式设计 */ @media (max-width: 768px) { .smart-card { - padding: 12px; - min-height: 120px; + padding: 14px; + min-height: 130px; border-radius: 12px; } - + + .card-content { + gap: 10px; + } + + .card-header { + gap: 6px; + } + .card-title { - font-size: 0.95rem; + font-size: 1rem; } - + .card-description { - font-size: 0.8rem; - -webkit-line-clamp: 2; + font-size: 0.82rem; + line-height: 1.4; } - + .card-url { - font-size: 0.7rem; + font-size: 0.72rem; + padding: 4px 8px; } - + .category-badge { font-size: 0.65rem; padding: 3px 8px; @@ -424,17 +433,21 @@ const handleClick = (event) => { @media (max-width: 480px) { .smart-card { - padding: 10px; - min-height: 110px; + padding: 12px; + min-height: 120px; } - + .card-title { - font-size: 0.9rem; + font-size: 0.95rem; } - + .card-description { - -webkit-line-clamp: 1; - font-size: 0.75rem; + font-size: 0.8rem; + line-height: 1.4; + } + + .card-url { + font-size: 0.7rem; } }