|
|
@@ -0,0 +1,270 @@
|
|
|
+/**
|
|
|
+ * WelcomePage 屏幕适配方案 - 推荐方案优化版
|
|
|
+ *
|
|
|
+ * 设计稿基准: 375px × 812px (iPhone X/11/12/13/14)
|
|
|
+ * 适配策略: vw/vh + 媒体查询(推荐方案)
|
|
|
+ *
|
|
|
+ * 核心思路:
|
|
|
+ * 1. 移动端(< 430px):使用 vw/vh 单位,精确响应视口
|
|
|
+ * 2. 大屏手机(430px - 768px):固定设计稿尺寸
|
|
|
+ * 3. 平板/桌面(≥ 768px):固定 375×812,居中显示
|
|
|
+ * 4. 所有尺寸基于设计稿精确计算
|
|
|
+ *
|
|
|
+ * 尺寸转换公式:
|
|
|
+ * - 宽度: px ÷ 375 × 100 = vw%
|
|
|
+ * - 高度: px ÷ 812 × 100 = vh%
|
|
|
+ */
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 外层容器 - 全屏布局
|
|
|
+ ======================================== */
|
|
|
+.welcome-page {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ background-color: #E8E8E8;
|
|
|
+ /* iOS 安全区域适配 */
|
|
|
+ padding-top: env(safe-area-inset-top);
|
|
|
+ padding-left: env(safe-area-inset-left);
|
|
|
+ padding-right: env(safe-area-inset-right);
|
|
|
+ padding-bottom: env(safe-area-inset-bottom);
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 背景层 - 全屏覆盖,消除空白
|
|
|
+ ======================================== */
|
|
|
+.welcome-bg {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background-size: cover;
|
|
|
+ background-position: center;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ z-index: 0;
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 内容容器 - 基于 vw/vh 响应式适配
|
|
|
+ ======================================== */
|
|
|
+.welcome-content {
|
|
|
+ position: relative;
|
|
|
+ width: 100vw;
|
|
|
+ /* 使用动态视口高度(dvh),降级方案使用 JavaScript 设置的 CSS 变量 */
|
|
|
+ height: 100dvh; /* 现代浏览器:动态视口高度 */
|
|
|
+ height: calc(var(--vh, 1vh) * 100); /* 降级方案:JavaScript 计算的视口高度 */
|
|
|
+ z-index: 1;
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ Lumi 图片 - 左下角,自适应完整显示
|
|
|
+ ======================================== */
|
|
|
+.welcome-lumi {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ bottom: 0;
|
|
|
+ /* 使用 contain 确保图片完整显示,不裁剪 */
|
|
|
+ object-fit: contain;
|
|
|
+ object-position: left bottom;
|
|
|
+ /* 自适应宽度,最大不超过容器 */
|
|
|
+ width: auto;
|
|
|
+ max-width: 100%;
|
|
|
+ /* 自适应高度,最大不超过下半部分 */
|
|
|
+ height: auto;
|
|
|
+ max-height: 50dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 50); /* 降级方案 */
|
|
|
+ /* 确保图片从底部对齐 */
|
|
|
+ align-self: flex-end;
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ Hello 图片 - 可点击,基于设计稿位置
|
|
|
+ 设计稿: top: 229px, left: 45px, width: 245px
|
|
|
+ ======================================== */
|
|
|
+.welcome-hello {
|
|
|
+ position: absolute;
|
|
|
+ /* 移动端:使用 vw/vh 单位精确计算 */
|
|
|
+ /* top: 229px ÷ 812px × 100 = 28.2vh */
|
|
|
+ top: 28.2dvh; /* 使用动态视口高度 */
|
|
|
+ top: calc(var(--vh, 1vh) * 28.2); /* 降级方案 */
|
|
|
+ /* left: 45px ÷ 375px × 100 = 12vw */
|
|
|
+ left: 12vw;
|
|
|
+ /* width: 245px ÷ 375px × 100 = 65.33vw */
|
|
|
+ width: 65.33vw;
|
|
|
+ max-width: 245px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: opacity 0.2s ease;
|
|
|
+ user-select: none;
|
|
|
+ -webkit-tap-highlight-color: transparent;
|
|
|
+ touch-action: manipulation;
|
|
|
+}
|
|
|
+
|
|
|
+.welcome-hello:hover {
|
|
|
+ opacity: 0.9;
|
|
|
+}
|
|
|
+
|
|
|
+.welcome-hello:active {
|
|
|
+ opacity: 0.8;
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 移动端适配(280px - 430px)
|
|
|
+ ======================================== */
|
|
|
+
|
|
|
+/* 极小屏幕(< 320px):适当缩小 */
|
|
|
+@media (max-width: 319px) {
|
|
|
+ .welcome-hello {
|
|
|
+ width: 60vw;
|
|
|
+ left: 10vw;
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-lumi {
|
|
|
+ /* 极小屏幕确保完整显示 */
|
|
|
+ max-height: 45dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 45); /* 降级方案 */
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 小屏手机(320px - 375px):保持比例 */
|
|
|
+@media (min-width: 320px) and (max-width: 374px) {
|
|
|
+ .welcome-hello {
|
|
|
+ width: 65.33vw;
|
|
|
+ left: 12vw;
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-lumi {
|
|
|
+ /* 小屏手机确保完整显示 */
|
|
|
+ max-height: 48dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 48); /* 降级方案 */
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 标准手机(375px - 429px):使用设计稿尺寸 */
|
|
|
+@media (min-width: 375px) and (max-width: 429px) {
|
|
|
+ .welcome-hello {
|
|
|
+ width: 245px;
|
|
|
+ left: 45px;
|
|
|
+ top: 28.2dvh; /* 使用动态视口高度 */
|
|
|
+ top: calc(var(--vh, 1vh) * 28.2); /* 降级方案 */
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 大屏手机(430px - 767px):固定设计稿尺寸 */
|
|
|
+@media (min-width: 430px) and (max-width: 767px) {
|
|
|
+ .welcome-content {
|
|
|
+ width: 375px;
|
|
|
+ height: 812px;
|
|
|
+ max-width: 100vw;
|
|
|
+ max-height: 100dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 100); /* 降级方案 */
|
|
|
+ margin: 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-lumi {
|
|
|
+ /* 保持自适应,确保完整显示 */
|
|
|
+ max-width: 375px;
|
|
|
+ max-height: 50dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 50); /* 降级方案 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-hello {
|
|
|
+ width: 245px;
|
|
|
+ left: 45px;
|
|
|
+ top: 229px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 平板/桌面适配(≥ 768px)
|
|
|
+ ======================================== */
|
|
|
+@media (min-width: 768px) {
|
|
|
+ .welcome-page {
|
|
|
+ background: linear-gradient(135deg, #E8E8E8 0%, #D8D8D8 100%);
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-content {
|
|
|
+ width: 375px;
|
|
|
+ height: 812px;
|
|
|
+ max-width: 375px;
|
|
|
+ max-height: calc(100dvh - 80px); /* 使用动态视口高度 */
|
|
|
+ max-height: calc(calc(var(--vh, 1vh) * 100) - 80px); /* 降级方案 */
|
|
|
+ margin: 0 auto;
|
|
|
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
|
|
|
+ border-radius: 20px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-lumi {
|
|
|
+ /* 保持自适应,确保完整显示 */
|
|
|
+ max-width: 375px;
|
|
|
+ max-height: 50dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 50); /* 降级方案 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-hello {
|
|
|
+ width: 245px;
|
|
|
+ left: 45px;
|
|
|
+ top: 229px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 横屏适配
|
|
|
+ ======================================== */
|
|
|
+@media (orientation: landscape) and (max-height: 500px) {
|
|
|
+ .welcome-content {
|
|
|
+ height: 100dvh; /* 使用动态视口高度 */
|
|
|
+ height: calc(var(--vh, 1vh) * 100); /* 降级方案 */
|
|
|
+ width: calc(100dvh * 0.462); /* 375/812 ≈ 0.462,使用动态视口高度 */
|
|
|
+ width: calc(calc(var(--vh, 1vh) * 100) * 0.462); /* 降级方案 */
|
|
|
+ max-width: 100vw;
|
|
|
+ margin: 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-lumi {
|
|
|
+ /* 横屏时保持自适应,确保完整显示 */
|
|
|
+ max-width: 100%;
|
|
|
+ max-height: 50dvh; /* 使用动态视口高度 */
|
|
|
+ max-height: calc(var(--vh, 1vh) * 50); /* 降级方案 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .welcome-hello {
|
|
|
+ /* 横屏时保持相对位置 */
|
|
|
+ top: 28.2dvh; /* 使用动态视口高度 */
|
|
|
+ top: calc(var(--vh, 1vh) * 28.2); /* 降级方案 */
|
|
|
+ left: 12vw;
|
|
|
+ width: 65.33vw;
|
|
|
+ max-width: 245px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 触摸优化(移动端)
|
|
|
+ ======================================== */
|
|
|
+@media (hover: none) and (pointer: coarse) {
|
|
|
+ .welcome-hello {
|
|
|
+ /* 移动端增大点击区域(最小 44×44px) */
|
|
|
+ min-width: 44px;
|
|
|
+ min-height: 44px;
|
|
|
+ padding: 10px;
|
|
|
+ margin: -10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* ========================================
|
|
|
+ 性能优化
|
|
|
+ ======================================== */
|
|
|
+.welcome-lumi,
|
|
|
+.welcome-hello {
|
|
|
+ /* 启用硬件加速 */
|
|
|
+ transform: translateZ(0);
|
|
|
+ will-change: transform;
|
|
|
+ /* 图片优化 */
|
|
|
+ image-rendering: -webkit-optimize-contrast;
|
|
|
+ image-rendering: crisp-edges;
|
|
|
+ /* 防止图片拖拽 */
|
|
|
+ -webkit-user-drag: none;
|
|
|
+}
|
|
|
+
|