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

vue 使用postcss-pxtorem 实现适老化

在这里插入图片描述

1. 安装依赖

npm install postcss-pxtorem -D

2. 配置 Vite (vite.config.js)

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import postcsspxtorem from 'postcss-pxtorem'export default defineConfig({plugins: [vue()],css: {postcss: {plugins: [postcsspxtorem({rootValue: 16, // 基准值propList: ['*'], // 转换所有属性selectorBlackList: ['no-rem'], // 忽略的类名前缀exclude: /node_modules/i // 排除 node_modules})]}}
})

3. 创建全局状态管理 (src/stores/elderMode.js)

// src/stores/elderMode.ts
import { defineStore } from 'pinia';
export default defineStore('elderMode', () => {// 从 localStorage 读取初始状态const isElderMode = ref(localStorage.getItem('elderMode') === 'true');// 监听状态变化并更新根字体大小watchEffect(() => {const fontSize = isElderMode.value ? 20 : 16;document.documentElement.style.fontSize = `${fontSize}px`;// 添加/移除适老模式类名if (isElderMode.value) {document.body.classList.add('elder-mode');} else {document.body.classList.remove('elder-mode');}localStorage.setItem('elderMode', isElderMode.value.toString());});// 切换功能const toggleElderMode = () => {isElderMode.value = !isElderMode.value;};return {isElderMode,toggleElderMode,};
});

4. 创建切换按钮组件 (src/components/ElderToggle.vue)

<template><buttonclass="elder-toggle":class="{ active: $elderMode.isElderMode }"@click="toggleElderMode"aria-label="适老模式切换"><span class="icon">A+</span></button>
</template><script setup lang="ts">
import elderMode from '@/stores/elderMode';
const $elderMode = elderMode();function toggleElderMode() {$elderMode.toggleElderMode();
}
</script><style scoped>
.elder-toggle {position: fixed;bottom: 20px;right: 20px;z-index: 1000;width: 50px;height: 50px;border-radius: 50%;background: #409eff;color: white;border: none;cursor: pointer;box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);transition: all 0.3s;
}.elder-toggle.active {background: #ff6a00;transform: scale(1.1);
}.icon {font-size: 18px;font-weight: bold;
}
</style>

5. app中使用

<template><router-view></router-view><ElderToggle />
</template>
<script setup lang="ts">onMounted(() => {});
</script>

实现原理说明

  1. rem 转换机制:

    postcss-pxtorem 自动将 px 转换为 rem

    基准值通过 JS 动态设置(16px/20px)

  2. 一键切换功能:

    使用 Vue 响应式状态管理

    切换时更新根字体大小(document.documentElement.style.fontSize)

    添加 elder-mode 类名应用额外样式

  3. 持久化存储:

    使用 localStorage 保存用户选择

    页面刷新后自动恢复状态

  4. 适老模式增强:

    增大字体(16px → 20px)

    增加行高(1.5 → 1.8)

    增强对比度

    增大点击区域

  5. 特殊处理:

    使用 .no-rem 类名或 Px 单位跳过转换

    媒体查询中的 px 不会转换

http://www.dtcms.com/a/305510.html

相关文章:

  • Elasticsearch 基础速成 5 步跑通索引、文档、映射与查询
  • 【php 安装 xdebug】
  • 数学建模——最大最小化模型
  • 关于mysql时间类型和java model的日期类型映射
  • anaconda和Miniconda安装包32位64位皆可,anaconda和Miniconda有什么区别?
  • 【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】
  • JetBrains Annotations:从入门到落地,彻底告别 NullPointerException
  • Vue路由钩子完全指南
  • Linux ARM 平台 C 语言操作 Excel 文件的常用库与工具汇总(支持 xls 和 xlsx)
  • 【 建模分析回顾】[MultiOutputClassifier]MAP - Charting Student Math Misunderstandings
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)
  • Java stream 并发问题
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(二级)
  • 潇洒郎: Kafka Ubuntu 安装部署,命令行或者python生产数据与消费数据(kafka-python)
  • makefile中include *.d文件的作用
  • 安全和AI方向的学习路线
  • aws(学习笔记第五十课) ECS集中练习(2)
  • 项目目标如何拆解,才能提高执行效率和效果
  • 获取TensorRT引擎文件(.engine)版本号的几种方法
  • GitPython02-Git使用方式
  • 【Datawhale AI夏令营】科大讯飞AI大赛(大模型技术)/夏令营:让AI理解列车排期表(Task3)
  • Elasticsearch 全文检索与过滤
  • MyBatis Plus Wrapper 详细分析与原理
  • 设计模式十四:适配器模式(Adapter Pattern)
  • MCP提示词工程:上下文注入的艺术与科学
  • 【计算机视觉与代码大模型全景解析:从理论基础到学习路线】
  • VSCode高效集成开发全流程优化
  • [论文阅读] 人工智能 + 软件工程 | 增强RESTful API测试:针对MongoDB的搜索式模糊测试新方法
  • Jaeger理论、实战、问题记录
  • Python 中使用 OpenCV 库来捕获摄像头视频流并在窗口中显示