diff --git a/packages/screen/src/styles/index.scss b/packages/screen/src/styles/index.scss index bcb6252..474e258 100644 --- a/packages/screen/src/styles/index.scss +++ b/packages/screen/src/styles/index.scss @@ -1,5 +1,16 @@ @use './mixins.scss' as *; +/** + * 全局 CSS 容器查询回退 + * + * 这些根级别变量为不支持容器查询的浏览器提供默认的视口单位。 + * 设置了 container-type 的组件会在支持时覆盖这些值为容器单位(cqw/cqh)。 + */ +:root { + --cq-inline-100: 100vw; + --cq-block-100: 100vh; +} + * { margin: 0; padding: 0; diff --git a/packages/screen/src/styles/mixins.scss b/packages/screen/src/styles/mixins.scss index 276c69a..99f34cf 100644 --- a/packages/screen/src/styles/mixins.scss +++ b/packages/screen/src/styles/mixins.scss @@ -1,22 +1,40 @@ -// 屏幕适配工具 +// 屏幕适配工具(支持容器查询) // 设计稿基准:1920px (宽) × 982px (高,不含头部) +// +// 容器查询支持: +// 当组件嵌入到其他系统时,会自动使用容器单位(cqw/cqh)而非视口单位(vw/vh) +// 这确保了子组件相对于父容器而非整个视口进行缩放 +// +// 回退策略: +// 使用 CSS 变量 --cq-inline-100 和 --cq-block-100 提供渐进增强 +// 不支持容器查询的浏览器会回退到视口单位 -// 将 px 转换为 vw (基于设计稿宽度 1920px) +$design-width: 1920; +$design-height: 982; + +// 将 px 转换为容器宽度单位(基于设计稿宽度 1920px) +// 在支持容器查询的浏览器中使用 cqw,否则回退到 vw @function vw($px) { - @return calc($px / 1920 * 100vw); + @return calc($px / $design-width * var(--cq-inline-100, 100vw)); } -// 将 px 转换为 vh (基于设计稿内容区域高度 982px) +// 将 px 转换为容器高度单位(基于设计稿内容区域高度 982px) +// 在支持容器查询的浏览器中使用 cqh,否则回退到 vh @function vh($px) { - @return calc($px / 982 * 100vh); + @return calc($px / $design-height * var(--cq-block-100, 100vh)); } -// 字体大小转换 (使用 vw 确保响应式) +// 字体大小转换(使用容器宽度确保响应式) +// 字体随容器宽度缩放,保持与其他元素的比例关系 @function fs($px) { - @return calc($px / 1920 * 100vw); + @return vw($px); } // 使用示例: -// width: vw(580); // 580px → vw -// height: vh(400); // 400px → vh -// font-size: fs(16); // 16px → vw +// width: vw(580); // 580px → cqw (或 vw 作为 fallback) +// height: vh(400); // 400px → cqh (或 vh 作为 fallback) +// font-size: fs(16); // 16px → cqw (或 vw 作为 fallback) +// +// 注意:这些函数需要父容器设置了 container-type: inline-size 或 size +// 例如在 CockpitLayout.vue 中已经设置了相应的容器类型 + diff --git a/packages/screen/src/views/cockpit/components/CockpitLayout.vue b/packages/screen/src/views/cockpit/components/CockpitLayout.vue index d73b737..3196e20 100644 --- a/packages/screen/src/views/cockpit/components/CockpitLayout.vue +++ b/packages/screen/src/views/cockpit/components/CockpitLayout.vue @@ -29,32 +29,89 @@ import YearStatistics from './YearStatistics.vue'