v 3 + vite + ts 自适应布局(postcss-pxtorem)

embedded/2024/9/24 8:22:58/

1、

pc端移动端H5等项目中,需要根据当前浏览器窗口或屏幕尺寸,来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。

2、适用范围:vue3 + vite + ts

步骤一:相关依赖下载下载相关依赖

npm install postcss-pxtorem --save
npm install amfe-flexible --save

下载完之后:package.json

javascript">{"name": "baseh5","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite --host","build": "vue-tsc -b && vite build","preview": "vite preview"},"dependencies": {"amfe-flexible": "^2.2.1","less": "^4.2.0","postcss-pxtorem": "^6.1.0","vue": "^3.4.31"},"devDependencies": {"@vitejs/plugin-vue": "^5.0.5","typescript": "^5.2.2","vite": "^5.3.4","vue-tsc": "^2.0.24"}
}

步骤二:在main.ts中进行引入

javascript">import { createApp } from 'vue'
import App from './App.vue'import 'amfe-flexible'  // 在`main.ts`中进行引入createApp(App).mount('#app')

步骤三:在vite.config.ts中进行配置

javascript">import { fileURLToPath, URL } from 'url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// 这里 - 引入pxtorem插件
import postCssPxToRem from 'postcss-pxtorem'export default defineConfig({plugins: [vue()],// 引入pxtorem插件 - ----------------------------------------------------css: {postcss: {plugins: [postCssPxToRem({/*配置在将px转化为rem时 1rem等于多少px,(因为我们搭配使用了amfe-flexible插件,此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)当UI设计稿的全屏基准宽度是1920px时 此处设置的值为192*/rootValue: 75,// propList - 配置方案1:所有px均转化为rempropList: ['*']/*propList - 配置方案2:若想设置部分样式不转化 可以在propList中配置,如:除border和font-size外,所有px均转化为rempropList: ["*", "!border","!font-size"],*/})]}},// 引入pxtorem插件 - ----------------------------------------------------resolve: {alias: {'@': fileURLToPath(new URL('./src/', import.meta.url))}}
})

3、验证效果

可以设置一个元素的宽度为我们UI设计稿的基准宽度,使其正好占满一行,
此时,可以看到,不论浏览器窗口如何放大缩小,该元素宽度都是正好占满一行。

4、注意点

1、
postcss-pxtorem插件,会将我们写在样式中的px根据我们在vite.config.ts中设置的rootValue值,按比例转化为rem。
但是,行内样式中的px,不会被转化为rem。


2、
amfe-flexible插件会根据当前可展示区域的实际宽度,动态设置的font-size为可展示区域宽度的十分之一,
这也就是,为什么我们在vite.config.ts中设置rootValue值时需要设置为UI设计稿的十分之一,
是为了,与此插件对font-size的设置相对应。


3、rem单位的特点是1rem对应的px值等于<html>的font-size值
也就是说,当<html>的font-size值变化时,1rem的值会跟随着动态变化,
比如:
有一个div,它的高度设置为1rem,
当页面内<html>的font-size为16px时,这个div的高度就是16px;
当页面内<html>的font-size为32px时,这个div的高度就是32px;

5、禁止缩放

用这种方案做 H5 的时候,在手机上打开,页面可以被缩放,就有些不专业了
可以用下面这种方法解决:
index.html的 head 标签中,添加以下代码,即可

javascript">
<head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Vite + Vue + TS</title><!-- 禁止在手机端缩放 --><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><!--禁止在电脑浏览器滚轮缩放 --><script>document.addEventListener('mousewheel', function (e) {e = e || window.event;if ((e.wheelDelta && event.ctrlKey) || e.detail) {event.preventDefault();}}, {capture: false,passive: false})</script></head>

http://www.ppmy.cn/embedded/92882.html

相关文章

大数据-Big Data

1. 简介 1.1. 主要特点 大数据(Big Data)是指规模巨大、复杂多变的数据集合,这些数据集来源于多个不同的源,包括社交媒体、移动设备、物联网、传感器等。大数据的主要特点如下: 数据量大(Volume):大数据的起始计量单位是PB(1024TB)、EB(1024PB,约100万TB)或ZB(…

ajax图书管理项目

bootstrap弹框 不离开当前页面&#xff0c;显示单独内容&#xff0c;让用户操作 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作步骤&#xff1a; 1.引入bootstrap.css和bootstrap.js …

创建单例模式的方法

一.单例模式的定义&#xff1a; 单例模式确保某个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。在计算机系统中&#xff0c;线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台…

c# .Net Core 项目配置SWagger UI 带Token访问

简介 Swagger是一款强大的API管理工具&#xff0c;它主要用于生成、描述、调用和可视化RESTful风格的Web服务。Swagger通过一套标准的规范定义接口及其相关信息&#xff0c;从而能够自动生成各种格式的接口文档&#xff08;如HTML、PDF、Markdown等&#xff09;&#xff0c;并…

武汉流星汇聚:卓越体验引领潮流,亚马逊赢得全球消费者喜爱

在浩瀚的电商海洋中&#xff0c;亚马逊如同一座璀璨的灯塔&#xff0c;吸引着全球消费者的目光。作为跨境电商的领军者&#xff0c;亚马逊不仅以其丰富的商品种类、便捷的购物流程赢得了消费者的青睐&#xff0c;更在平台流量与活跃用户积累方面展现出了无可比拟的优势。那么&a…

C语言实现计数排序

目录 1.基本思想 2.计数排序的特征 3.计数排序的基本步骤 4.计数排序算法实现 1.基本思想 (1)创建一个新的数组&#xff0c;数组的大小K 原数组中的最大值(max) - 最小值(min) 1&#xff0c;用于统计相同元素出现的次数。 (2)根据统计的结果按数组下标的顺序返回到原来…

嵌入式Linux之Ubuntu

第 1 章 Linux 入门 1.1 概述 Linux应用最广泛的服务器操作系统 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Limnux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位…

H5移动端兼容性问题处理总结

1. 当设置样式overflow:scroll/auto时&#xff0c;IOS上的滑动会卡顿 -webkit-overflow-scrolling:touch; 2. 在安卓环境下placeholder文字设置行高时会偏上 input有placeholder属性的时候不要设置行高 3. 移动端字体小于12px时异常显示 应该先把在整体放大一倍&#xff0…