当前位置: 首页 > news >正文

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

记录,以防忘记

Sass 函数定义 (_units.scss)
// 设计稿基准尺寸(根据实际设计图修改)
$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)
: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;
}

适老化切换

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>

相关文章:

  • VUE通过ref来获取dom元素及其他属性
  • 【免费】2005-2019年各地级市绿色专利申请量数据
  • Johnson
  • STM32F103C8T6单片机的起始点:使用GPIO输出点亮我们的第一个小灯(标准库篇)
  • 【Vue】b站黑马视频学习笔记(导览)
  • 彻底解决VS2008编译错误:fatal error C1083 无法打开包括文件“stdint.h“
  • LabVIEW 油井动液面在线监测系统​
  • SolidWorks打开.stp/.STEP文件出现默认模板无效的问题
  • python中pyside6多个py文件生成exe
  • 如何根据设计稿进行移动端适配:全面详解
  • 内存序问题排查
  • C#后端开发培训教程
  • [Vue]脚手架介绍
  • STM32——ADC模数转换器
  • EdgeInfinite: 用3B模型处理无限长的上下文
  • vue3+ts解决钩子函数里面传过来的值,外面拿不到的问题
  • Python Cookbook-5.6 以随机顺序处理列表的元素
  • 配环境的经验
  • 盈亏平衡IRR
  • LLM Agents的历史、现状与未来趋势
  • 济南品质网站建设费用/厦门网站推广优化哪家好
  • 佛山手机建网站/西安seo管理
  • 文化创意有限公司/天津百度快照优化公司
  • 购物网站app制作/今天发生的重大新闻
  • 寻花问柳-一个专做男人的网站/阿拉善盟seo
  • 南京做网站团队/石家庄热搜