添加星空相册

This commit is contained in:
DelLevin-Home
2026-06-05 02:13:42 +08:00
parent a664c423fa
commit 1668c84436
6 changed files with 1604 additions and 16 deletions

618
static/css/galaxy.css Normal file
View File

@@ -0,0 +1,618 @@
/* ==================== 星空预览样式 ==================== */
/* 星空模式切换按钮在弹窗header中 - 透明玻璃效果 + 黑色字体 */
.galaxy-toggle-btn {
display: none; /* 隐藏旧按钮 */
}
/* 模式切换容器 */
.mode-switch-container {
margin-right: 12px;
}
/* 模式切换按钮 */
.mode-switch-btn {
display: flex;
background: rgba(0, 0, 0, 0.05);
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 6px;
padding: 2px;
cursor: pointer;
gap: 2px;
}
.mode-label {
padding: 6px 12px;
font-size: 13px;
color: #666;
border-radius: 4px;
transition: all 0.3s ease;
}
.mode-label.active {
background: rgba(0, 0, 0, 0.1);
color: #1a1a1a;
}
.mode-label:hover:not(.active) {
color: #333;
}
/* 瀑布模式容器 */
.waterfall-wrapper {
display: none;
flex: 1;
overflow-y: auto;
padding: 20px;
background: linear-gradient(180deg, #f5f5f5 0%, #fff 100%);
}
.waterfall-wrapper.active {
display: block;
}
.waterfall-container {
column-count: 3;
column-gap: 16px;
max-width: 1200px;
margin: 0 auto;
}
/* 星空模式header样式 */
.galaxy-mode-header {
background: rgba(10, 10, 46, 0.95) !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;
}
.galaxy-mode-header h2 {
color: #fff !important;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.5) !important;
}
.galaxy-mode-header .guestbook-close {
background: rgba(255, 255, 255, 0.1) !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
color: #fff !important;
}
.galaxy-mode-header .guestbook-close:hover {
background: rgba(255, 0, 0, 0.5) !important;
border-color: rgba(255, 0, 0, 0.6) !important;
}
.galaxy-mode-header .mode-switch-btn {
background: rgba(255, 255, 255, 0.1) !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
}
.galaxy-mode-header .mode-label {
color: rgba(255, 255, 255, 0.7) !important;
}
.galaxy-mode-header .mode-label.active {
background: rgba(255, 255, 255, 0.2) !important;
color: #fff !important;
}
.waterfall-item {
break-inside: avoid;
margin-bottom: 16px;
background: #fff;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
transition: transform 0.3s ease, box-shadow 0.3s ease;
cursor: pointer;
}
.waterfall-item:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.waterfall-item img {
width: 100%;
display: block;
border-radius: 12px 12px 0 0;
}
.waterfall-item-info {
padding: 12px;
font-size: 12px;
color: #666;
text-align: center;
background: #fff;
}
/* 响应式设计 */
@media (max-width: 900px) {
.waterfall-container {
column-count: 2;
}
}
@media (max-width: 600px) {
.waterfall-container {
column-count: 1;
}
}
.header-controls {
display: flex;
align-items: center;
}
/* 星空画布容器(在弹窗内) */
.galaxy-canvas-wrapper {
display: none;
flex: 1;
position: relative;
background: radial-gradient(ellipse at center, #1a1a3e 0%, #0a0a2e 50%, #050520 100%);
overflow: hidden;
}
.galaxy-canvas-wrapper.active {
display: block;
}
/* 星空背景动画 - 繁杂无序 */
.galaxy-canvas-wrapper::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
/* 第一大区域 - 各种随机位置和大小 */
radial-gradient(1px 1px at 5px 15px, #fff, transparent),
radial-gradient(2px 2px at 45px 8px, rgba(255,255,255,0.85), transparent),
radial-gradient(1px 1px at 82px 42px, rgba(255,255,255,0.6), transparent),
radial-gradient(3px 3px at 120px 25px, #fff, transparent),
radial-gradient(1px 1px at 155px 58px, rgba(255,255,255,0.9), transparent),
radial-gradient(2px 2px at 192px 12px, rgba(255,255,255,0.4), transparent),
radial-gradient(1px 1px at 228px 48px, #fff, transparent),
radial-gradient(2px 2px at 265px 32px, rgba(255,255,255,0.7), transparent),
radial-gradient(1px 1px at 302px 65px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 338px 8px, #fff, transparent),
radial-gradient(2px 2px at 375px 42px, rgba(255,255,255,0.8), transparent),
radial-gradient(1px 1px at 412px 18px, rgba(255,255,255,0.6), transparent),
radial-gradient(2px 2px at 448px 55px, rgba(255,255,255,0.3), transparent),
radial-gradient(1px 1px at 485px 38px, #fff, transparent),
radial-gradient(1px 1px at 522px 72px, rgba(255,255,255,0.7), transparent),
radial-gradient(3px 3px at 558px 28px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 595px 52px, #fff, transparent),
/* 第二大区域 - 更随机的分布 */
radial-gradient(2px 2px at 22px 78px, rgba(255,255,255,0.45), transparent),
radial-gradient(1px 1px at 68px 92px, #fff, transparent),
radial-gradient(1px 1px at 108px 85px, rgba(255,255,255,0.55), transparent),
radial-gradient(2px 2px at 145px 98px, rgba(255,255,255,0.35), transparent),
radial-gradient(1px 1px at 182px 88px, #fff, transparent),
radial-gradient(1px 1px at 218px 75px, rgba(255,255,255,0.65), transparent),
radial-gradient(2px 2px at 255px 95px, rgba(255,255,255,0.45), transparent),
radial-gradient(1px 1px at 292px 82px, #fff, transparent),
radial-gradient(1px 1px at 328px 98px, rgba(255,255,255,0.75), transparent),
radial-gradient(2px 2px at 365px 78px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 402px 92px, #fff, transparent),
radial-gradient(1px 1px at 438px 85px, rgba(255,255,255,0.4), transparent),
radial-gradient(2px 2px at 475px 95px, rgba(255,255,255,0.6), transparent),
radial-gradient(1px 1px at 512px 78px, #fff, transparent),
radial-gradient(1px 1px at 548px 88px, rgba(255,255,255,0.8), transparent),
radial-gradient(1px 1px at 585px 82px, rgba(255,255,255,0.3), transparent),
/* 第三大区域 - 散落的小星星 */
radial-gradient(1px 1px at 15px 108px, rgba(255,255,255,0.25), transparent),
radial-gradient(1px 1px at 52px 118px, rgba(255,255,255,0.15), transparent),
radial-gradient(1px 1px at 88px 112px, rgba(255,255,255,0.35), transparent),
radial-gradient(1px 1px at 125px 105px, rgba(255,255,255,0.2), transparent),
radial-gradient(1px 1px at 162px 120px, rgba(255,255,255,0.4), transparent),
radial-gradient(1px 1px at 198px 108px, rgba(255,255,255,0.3), transparent),
radial-gradient(1px 1px at 235px 115px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 272px 102px, rgba(255,255,255,0.2), transparent),
radial-gradient(1px 1px at 308px 120px, rgba(255,255,255,0.35), transparent),
radial-gradient(1px 1px at 345px 108px, rgba(255,255,255,0.45), transparent),
radial-gradient(1px 1px at 382px 115px, rgba(255,255,255,0.15), transparent),
radial-gradient(1px 1px at 418px 102px, rgba(255,255,255,0.25), transparent),
radial-gradient(1px 1px at 455px 112px, rgba(255,255,255,0.4), transparent),
radial-gradient(1px 1px at 492px 105px, rgba(255,255,255,0.3), transparent),
radial-gradient(1px 1px at 528px 118px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 565px 108px, rgba(255,255,255,0.2), transparent),
radial-gradient(1px 1px at 602px 115px, rgba(255,255,255,0.35), transparent),
/* 额外的亮点 */
radial-gradient(2px 2px at 35px 55px, rgba(255,255,255,0.6), transparent),
radial-gradient(3px 3px at 175px 35px, rgba(255,255,255,0.8), transparent),
radial-gradient(2px 2px at 315px 68px, rgba(255,255,255,0.7), transparent),
radial-gradient(2px 2px at 455px 25px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 535px 42px, rgba(255,255,255,0.9), transparent),
radial-gradient(2px 2px at 75px 68px, rgba(255,255,255,0.65), transparent),
radial-gradient(1px 1px at 205px 82px, rgba(255,255,255,0.75), transparent),
radial-gradient(3px 3px at 385px 48px, rgba(255,255,255,0.55), transparent),
radial-gradient(1px 1px at 505px 72px, rgba(255,255,255,0.85), transparent),
radial-gradient(2px 2px at 625px 15px, rgba(255,255,255,0.4), transparent),
radial-gradient(1px 1px at 652px 58px, rgba(255,255,255,0.7), transparent),
radial-gradient(2px 2px at 688px 32px, rgba(255,255,255,0.6), transparent),
radial-gradient(1px 1px at 725px 45px, rgba(255,255,255,0.8), transparent),
radial-gradient(2px 2px at 762px 62px, rgba(255,255,255,0.5), transparent),
radial-gradient(1px 1px at 798px 18px, rgba(255,255,255,0.65), transparent),
radial-gradient(1px 1px at 835px 75px, rgba(255,255,255,0.45), transparent),
radial-gradient(2px 2px at 872px 42px, rgba(255,255,255,0.7), transparent),
radial-gradient(1px 1px at 908px 28px, rgba(255,255,255,0.55), transparent),
radial-gradient(2px 2px at 945px 65px, rgba(255,255,255,0.8), transparent),
radial-gradient(1px 1px at 982px 38px, rgba(255,255,255,0.4), transparent);
background-repeat: repeat;
background-size: 1000px 130px;
animation: twinkle 3s ease-in-out infinite alternate, drift 20s linear infinite;
pointer-events: none;
z-index: 0;
}
@keyframes twinkle {
0% { opacity: 0.4; }
33% { opacity: 0.7; }
66% { opacity: 0.5; }
100% { opacity: 0.8; }
}
@keyframes drift {
0% { transform: translate(0, 0); }
100% { transform: translate(-10px, -5px); }
}
.galaxy-canvas-wrapper canvas {
width: 100%;
height: 100%;
display: block;
position: relative;
z-index: 1;
}
.galaxy-tip {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.6);
color: rgba(255, 255, 255, 0.8);
padding: 8px 16px;
border-radius: 20px;
font-size: 12px;
pointer-events: none;
opacity: 0;
transition: opacity 0.3s ease;
}
.galaxy-canvas-wrapper.active .galaxy-tip {
opacity: 1;
animation: fadeInOut 3s ease-in-out forwards;
}
@keyframes fadeInOut {
0%, 100% { opacity: 0; }
20%, 80% { opacity: 1; }
}
/* 星空模式独立按钮(旧版本,保留备用) */
.galaxy-mode-btn {
background: transparent;
border: none;
padding: 8px 12px;
cursor: pointer;
display: none;
flex-direction: column;
align-items: center;
gap: 4px;
transition: all 0.3s ease;
border-radius: 8px;
position: relative;
margin-top: 8px;
}
.galaxy-mode-btn:hover {
background: rgba(255, 215, 0, 0.1);
transform: scale(1.1);
}
.galaxy-mode-btn svg {
transition: transform 0.3s ease;
}
.galaxy-mode-btn:hover svg {
transform: rotate(15deg);
}
/* 星空预览容器 */
.galaxy-container {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0a0a2e 0%, #16162e 50%, #0d0d3d 100%);
z-index: 10000;
flex-direction: column;
}
.galaxy-container.active {
display: flex;
animation: galaxyFadeIn 0.5s ease;
}
@keyframes galaxyFadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* 星空头部 */
.galaxy-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
background: rgba(0, 0, 0, 0.4);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
z-index: 10001;
}
.galaxy-header h2 {
color: #FFD700;
font-size: 20px;
margin: 0;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.5);
}
.galaxy-controls {
display: flex;
align-items: center;
gap: 16px;
}
.galaxy-tip {
color: rgba(255, 255, 255, 0.6);
font-size: 12px;
}
.galaxy-close-btn {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #fff;
font-size: 24px;
width: 36px;
height: 36px;
cursor: pointer;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.galaxy-close-btn:hover {
background: rgba(255, 0, 0, 0.5);
border-color: rgba(255, 0, 0, 0.6);
transform: rotate(90deg);
}
/* 星空画布 */
#galaxy-canvas {
flex: 1;
cursor: grab;
}
#galaxy-canvas:active {
cursor: grabbing;
}
/* 星星点击提示 */
.star-tooltip {
position: fixed;
background: rgba(0, 0, 0, 0.88);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 10px;
padding: 14px 18px;
pointer-events: none;
z-index: 10002;
opacity: 0;
transition: opacity 0.2s ease, transform 0.2s ease;
max-width: 320px;
backdrop-filter: blur(12px);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
.star-tooltip.visible {
opacity: 1;
transform: translateY(0);
}
.star-tooltip img {
width: 100px;
height: 100px;
object-fit: cover;
border-radius: 8px;
border: 2px solid rgba(255, 255, 255, 0.3);
}
.star-tooltip p {
color: rgba(255, 255, 255, 0.9);
margin: 10px 0 0;
font-size: 12px;
text-align: center;
letter-spacing: 0.5px;
}
/* 星星放大弹窗 */
.star-lightbox {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.92);
z-index: 10003;
align-items: center;
justify-content: center;
flex-direction: column;
backdrop-filter: blur(10px);
}
.star-lightbox.active {
display: flex;
animation: lightboxFadeIn 0.25s ease;
}
@keyframes lightboxFadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.star-lightbox-container {
position: relative;
max-width: 90vw;
max-height: 85vh;
display: flex;
flex-direction: column;
align-items: center;
}
.star-lightbox img {
max-width: 90vw;
max-height: 80vh;
object-fit: contain;
border-radius: 12px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.1);
animation: imageZoomIn 0.25s ease;
}
@keyframes imageZoomIn {
from {
transform: scale(0.9);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
.star-lightbox-close {
position: absolute;
top: -50px;
right: -10px;
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #fff;
font-size: 24px;
width: 40px;
height: 40px;
cursor: pointer;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.star-lightbox-close:hover {
background: rgba(255, 255, 255, 0.25);
transform: rotate(90deg);
border-color: rgba(255, 255, 255, 0.4);
}
.star-lightbox-info {
color: rgba(255, 255, 255, 0.9);
font-size: 14px;
margin-top: 16px;
padding: 8px 16px;
background: rgba(255, 255, 255, 0.1);
border-radius: 20px;
backdrop-filter: blur(10px);
letter-spacing: 0.5px;
}
.star-lightbox-nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #fff;
font-size: 24px;
width: 50px;
height: 50px;
cursor: pointer;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.star-lightbox-nav:hover {
background: rgba(255, 255, 255, 0.25);
border-color: rgba(255, 255, 255, 0.4);
}
.star-lightbox-nav.prev {
left: -70px;
}
.star-lightbox-nav.next {
right: -70px;
}
.star-lightbox-counter {
color: rgba(255, 255, 255, 0.6);
font-size: 12px;
margin-top: 10px;
}
/* 加载动画 */
.galaxy-loading {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #FFD700;
font-size: 18px;
text-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0%, 100% {
opacity: 0.6;
}
50% {
opacity: 1;
}
}
/* 响应式设计 */
@media (max-width: 768px) {
.galaxy-header {
padding: 12px 16px;
}
.galaxy-header h2 {
font-size: 16px;
}
.galaxy-tip {
display: none;
}
.star-lightbox img {
max-width: 95%;
}
}