在小屏幕(手机端)下,画廊弹窗被页面底部的导航栏(project-bottom-card)遮挡,导致:
从用户提供的截图可以看到:
.project-bottom-card {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 1000; // ← 固定在底部,z-index: 1000
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
}
// ❌ 修复前
.gallery-overlay {
position: fixed;
inset: 0;
z-index: 1000; // ← 同样是 z-index: 1000
}
问题:
z-index 都是 1000// ❌ 修复前
.gallery-container {
@media (max-width: 480px) {
max-height: 95vh;
height: 95vh;
}
}
.gallery-overlay {
@media (max-width: 480px) {
padding: 0; // ← 没有留白
}
}
问题:
// ✅ 修复后
.gallery-overlay {
position: fixed;
inset: 0;
z-index: 2000; // 从 1000 提升到 2000
background: rgba(0, 0, 0, 0.7);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
animation: fadeIn 0.25s ease-out;
@media (max-width: 768px) {
padding: 10px;
}
@media (max-width: 480px) {
padding: 10px; // ✅ 增加padding,确保有留白
align-items: center;
}
}
改进:
z-index: 2000 - 确保在底部导航栏(z-index: 1000)之上padding: 10px,不紧贴边缘// ✅ 修复后
.preview-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.95);
backdrop-filter: blur(10px);
z-index: 2100; // 从 2000 提升到 2100
display: flex;
align-items: center;
justify-content: center;
animation: fadeIn 0.2s ease-out;
}
改进:
z-index: 2100 - 确保大图预览在画廊弹窗之上// ✅ 修复后
.gallery-container {
@media (max-width: 480px) {
max-width: calc(100vw - 20px); // ✅ 左右各留10px空间
max-height: 85vh; // ✅ 从95vh降低到85vh
height: 85vh; // ✅ 为底部导航栏留出空间
border-radius: 16px;
}
}
改进:
max-height: 85vh - 从95vh降低到85vh,为底部导航栏留出约15vh的空间max-width: calc(100vw - 20px) - 确保弹窗不会紧贴屏幕边缘修复后的完整 z-index 层级:
Layer 0: 页面内容 (z-index: auto/0)
↓
Layer 1000: 页面底部导航栏 (project-bottom-card)
↓
Layer 2000: 画廊弹窗 (gallery-overlay)
↓
Layer 2100: 大图预览 (preview-overlay)
规则:
z-index: 1000z-index: 2000z-index: 2100┌─────────────────────────┐
│ │
│ ┌─────────────────┐ │
│ │ 🏠 后期 - 辅助 │ │
│ ├─────────────────┤ │
│ │ 📷 图片1 │ │
│ │ 📷 图片2 │ │
│ │ 📷 图片... │ │
│ └─────────────────┘ │
├─────────────────────────┤ ← ❌ 底部导航栏遮挡了弹窗
│ 📄 文件 | 👥 成员 | 💬 问│
└─────────────────────────┘
┌─────────────────────────┐
│ │
│ ┌─────────────────┐ │ ← 弹窗居中,85vh高度
│ │ 🏠 后期 - 辅助 │ │
│ ├─────────────────┤ │
│ │ 📷 图片1 │ │
│ │ 📷 图片2 │ │
│ │ 📷 图片... │ │
│ ├─────────────────┤ │
│ │ 📤 上传文件 ✅ │ │ ← 底部按钮可见
│ └─────────────────┘ │
│ │
├─────────────────────────┤ ← 底部导航栏被遮罩遮挡
│ [遮罩层覆盖] │
└─────────────────────────┘
// 修改位置: Line 45
.gallery-overlay {
z-index: 2000; // ← 从 1000 改为 2000
}
// 修改位置: Line 690
.preview-overlay {
z-index: 2100; // ← 从 2000 改为 2100
}
// 修改位置: Line 56-59
.gallery-overlay {
@media (max-width: 480px) {
padding: 10px; // ← 从 0 改为 10px
align-items: center;
}
}
// 修改位置: Line 87-92
.gallery-container {
@media (max-width: 480px) {
max-width: calc(100vw - 20px); // ← 新增,确保左右留白
max-height: 85vh; // ← 从 95vh 改为 85vh
height: 85vh; // ← 从 95vh 改为 85vh
border-radius: 16px;
}
}
src/modules/project/components/stage-gallery-modal/
└── stage-gallery-modal.component.scss
├── Line 45: gallery-overlay z-index (1000 → 2000)
├── Line 57: 小屏幕 padding (0 → 10px)
├── Line 88-90: 小屏幕尺寸调整 (95vh → 85vh)
└── Line 690: preview-overlay z-index (2000 → 2100)
建议为项目建立统一的 z-index 层级体系:
// z-index 层级定义(建议放在全局样式中)
$z-index-base: 0; // 基础内容
$z-index-dropdown: 100; // 下拉菜单
$z-index-sticky: 500; // 粘性元素
$z-index-fixed: 1000; // 固定元素(如底部导航)
$z-index-modal: 2000; // 模态弹窗
$z-index-popover: 2050; // 气泡提示
$z-index-toast: 3000; // 消息提示
$z-index-fullscreen: 5000; // 全屏覆盖
修复日期: 2025-12-07
修复版本: v1.3.0
状态: ✅ 已完成并验证
影响范围: 所有屏幕尺寸(主要解决小屏幕问题)