使用sass 实现px转vh或vw,适配适老化时,在设计图字体大小的基础上,增加3px(可配置),

记录,以防忘记

Sass 函数定义 (_units.scss)
css 复制代码
// 设计稿基准尺寸(根据实际设计图修改)
$design-viewport-width: 1920px;  // 设计稿宽度
$design-viewport-height: 1080px; // 设计稿高度

// 计算公式   传入px值 / 设计稿宽度 * 100vw或100vh

// 适老化模式字体增量(可配置)
$accessibility-font-offset: 3px;

// 核心转换函数
@function px-to-vw($px) {
// 如果不加 # 就出现 单位丢失 如 calc(16 / 1920 * 100vw)(单位丢失,无法正确计算)
// var(--accessibility-font-offset, 0px)  如果变量未定义,则使用0px
  @return calc((#{$px} + var(--accessibility-font-offset, 0px)) / #{$design-viewport-width} * 100vw);
}

@function px-to-vh($px) {
  @return calc((#{$px} + var(--accessibility-font-offset, 0px)) / #{$design-viewport-height} * 100vh);
}

// 适配混合器(可选)
@mixin accessibility-mode {
  --accessibility-font-offset: #{$accessibility-font-offset};
}
CSS 变量声明 (styles.scss)
css 复制代码
:root {
  // 初始化适老化偏移量(默认不启用)
  --accessibility-font-offset: 0px;
}

body {
  // 使用示例:将 16px 转换为 vw 单位(自动包含适老化增量)
  font-size: px-to-vw(16px);
  
  // 高度转换示例(如需要)
  padding-top: px-to-vh(20px);
}

// 适老化模式专用类
.accessibility-mode {
  @include accessibility-mode;
}

适老化切换

javascript 复制代码
function toggleAccessibilityMode(enable) {
  const root = document.documentElement;
  
  if (enable) {
    root.classList.add('accessibility-mode');
    // 可选:存储用户偏好
    localStorage.setItem('accessibilityMode', 'enabled');
  } else {
    root.classList.remove('accessibility-mode');
    localStorage.setItem('accessibilityMode', 'disabled');
  }
}

// 初始化检测用户设置
window.addEventListener('DOMContentLoaded', () => {
  const savedMode = localStorage.getItem('accessibilityMode');
  if (savedMode === 'enabled') toggleAccessibilityMode(true);
});


<button onclick="toggleAccessibilityMode(true)">开启适老化模式</button>
<button onclick="toggleAccessibilityMode(false)">关闭适老化模式</button>
相关推荐
失忆爆表症2 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录2 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜3 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛3 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter
利刃大大3 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
NEXT063 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain
念风零壹3 小时前
AI 时代的前端技术:从系统编程到 JavaScript/TypeScript
前端·ai
光影少年4 小时前
react的hooks防抖和节流是怎样做的
前端·javascript·react.js
小毛驴8504 小时前
Vue 路由示例
前端·javascript·vue.js
发现一只大呆瓜4 小时前
AI流式交互:SSE与WebSocket技术选型
前端·javascript·面试