使用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>
相关推荐
zhanlang02172 分钟前
HTML 零基础入门到企业实战全套教程【第五章 5.5 综合案例:图文影音展示页面开发】
前端·html
zhanlang021729 分钟前
HTML 零基础入门到企业实战全套教程【连载 5.3】audio、video 音频视频标签|兼容格式、自动播放踩坑、企业规范
前端·html
qq_406981031 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
zhanlang02171 小时前
HTML 零基础入门到企业实战【第五章 5.4】内嵌网页 iframe 标签:嵌入网页、视频、地图实战
前端·html·音视频
2分钟速写快排9 小时前
孔乙己的茴字有多少种写法?|AI 对话实时通信的三种实现
前端·javascript·github
Penge66611 小时前
JavaScript:BOM 详解
前端
Penge66611 小时前
Vite vs Webpack:前端构建工具原理与实战
前端
Penge66611 小时前
前端包管理工具:npm、Yarn、pnpm 快速入门
前端
Penge66612 小时前
Sass 了解
前端
Penge66612 小时前
Webpack 打包从 0 到 1 实战笔记
前端