vue 移动端开发vw适配方案rem适配方案 + vant框架 + unocss|tailwindcss

写在前面的话:看了这篇文章,有些东西名词啥的不懂的,或者有疑问的推荐百度,因为写的太多真的显得很啰嗦!

1.移动端开发适配

目前移动端适配,在市面上主流适配方案无非就两种,rem方案和vw方案。这些方案,就可以自动适配不同移动端屏幕尺寸动态缩放。其实他的适配,你可以理解为整个页面进行放大缩小,充满整个屏幕。记得要在html设置如下meta
<meta name="viewport" content="width=device-width, initial-scale=1.0">

  • vw方案:把px转换为vw单位,通过设置viewportWidth:750,750px = 100vw,1vw = 7.5px,这里就跟小程序上的rpx单位类似。
  • rem方案:把px转换为rem单位,受到html上的font-size影响。但是我们不能把这个font-size写死,它应该是基于屏幕大小动态变化,才能适配不同的手机屏幕。这里可以借助插件帮我们自动设置基准值和自动把px转换为rem单位,在这里有介绍。
  • 两个方案demo
    • mian分支:无vw方案与rem方案,个人模板
    • mobile分支:基于main分支,加入了vw方案与rem方案,可以通过vite.config.ts 修改useVwModel值进行切换
    • mobile_vant:基于mobile分支,引入了vant框架,进行了vant配置
  • 演示demo
html {//假设375的设计稿,设置了基准值为20px,那么当屏幕为750的时候,这里的font-size大小应该为40px。因为相当于整体放大了两倍font-size: 20px;//1rem = 20px
}//375:font-size:20px  750:font-size:40px
<div style="font-size: 1rem;">国破山河在城春草木深</div>//375:font-size:40px  750:font-size:80px
<div style="font-size: 2rem;">感时花溅泪恨别鸟惊心</div>	

2.vw适配方案(推荐)

只需要安装插件:postcss-px-to-viewport

  • 安装:npm install postcss-px-to-viewport --save-dev
  • vite配置参考如下:
//在vite.config.ts中
// vw方案(无像素差):px自动转换vw
import pxtovw from "postcss-px-to-viewport"
export default defineConfig({css: {postcss: {plugins: [autoprefixer({overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8']}),pxtovw({unitToConvert: 'px', // 要转化的单位viewportWidth: 750, //100vw=750px,UI设计稿的宽度,vant是375。可参考这个:https://juejin.cn/post/6961737808339795975unitPrecision: 6, // 转换后的精度,即小数点位数propList: ['*'], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vwfontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vwselectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认falsereplace: true, // 是否转换后直接更换属性值landscape: false, // 是否处理横屏情况// exclude: [/node_modules\/vant/i]})],},},})

3.rem适配方案(有0.1px误差)

需要安装两个插件,1rem=html上的font-size

插件一:lib-flexible —— 用于自动设置 rem 基准值(也就是html上的font-size),切记需要再main.js中 import ‘amfe-flexible’ 后才会自动设置基准值

插件二:postcss-pxtorem —— 是一款 postcss 插件,用于将px单位转化为 rem(你可以直接在项目中写px,它会自动帮你转换为rem单位)

  • 安装插件一:npm i amfe-flexible -D

  • 安装插件二:npm i postcss-pxtorem -D

  • 在main.js文件中: import ‘amfe-flexible’

  • 安装(自动管理浏览器前缀,非必装):npm install autoprefixer --save

  • 如果使用了unocss参考配置, 使用下面的unocss插件把自带的rem转换为px,在通过postcss-pxtorem转换为rem

  • unocss插件(把默认的rem单位转换为px,完整配置参考demo):npm install -D @unocss/preset-rem-to-px

  • vite配置参考如下:

//在vite.config.ts中
// rem方案(部分转换后会有0.1px的像素差,推荐vw方案):css自动转换为rem,切记需要再main.js中 import 'amfe-flexible' 自动设置基准值
import postCssPxToRem from 'postcss-pxtorem'
export default defineConfig({css: {postcss: {plugins: [autoprefixer({overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8']}),postCssPxToRem({// 自适应,px>rem转换rootValue:75, // 这里代表的是1rem等于多少rootValue的px。75表示750设计稿,37.5表示375设计稿propList: ['*'], // 需要转换的属性,这里选择全部都进行转换selectorBlackList: ['norem', 'ignore'], // 过滤掉norem-开头的class,不进行rem转换mediaQuery: false,  // 允许在媒体查询中转换 px}),],},}
})

4.原子化插件 unocss 与 tailwindcss

原子化的意思就是,把css的每一个属性,定义成一个class,这样子的话,我们写样式的时候,可以直接写,无需再命名class,好维护,如颜色大小主题等。部分样式参考:

style="width:100%;height:50px;display:flex;flex-direction:row;background:white;"// unocss || tailwindcss
class="w-full h-[50px] flex flex-row bg-white"

就我使用一段时间以来,我最大的感受的就是太爽了,再也不需要 命名class,写起来很丝滑。但是我认为它也有一些弊端,比如:1.前期有个学习记忆的成本(多敲就好)。2.个人开发又快又好的,团队开发可能要被骂娘(强制别人学习使用囧),除非他们也用。3.复用问题,因为它分的太细了,如果一些组合样式经常要用到,不好进行复用,可以通过使用@apply解决。

unocss是基于tailwindcss的。虽然我用的unocss,但是我查文档用的tailwindcss,写法跟tailwindcss是一样的 囧!这两个框架优劣百度更详细

5.引入移动端vant框架

vant框架的设计稿是375,如果我们自身的设计是375那就无需做额外的配置,但是如果我们是750的设计稿,那么rem方案和vw方案需要多做一些配置。这里配置参考两个方案demo

6.关于rpx

rpx是微信小程序上的单位,750rpx=100vw,在设计稿750的情况下,1px = 1rpx。在设计稿为375的情况下,2px = 1rpx。建议小程序开发使用750设计稿!

  • uniapp项目运行在浏览器上会把rpx转换为rem,rem适配方案
    在这里插入图片描述
  • uniapp运行在小程序上,则不会进行转换。这里超出750,长度溢出了。
    在这里插入图片描述

7.关于uniapp使用unocss

推荐这个项目uni-app vue3中使用,它是基于uniapp官方模板。clone这个项目后,修改package.json
“unocss-preset-weapp”: “^0.53.5”,然后通过pnpm i安装依赖
这个可以直接在uniapp运行,但是这个unocss插件提示支持不好,推荐用vscode。所以在vscode使用如下:

  • 运行在浏览器:pnpm run dev:h5
  • 运行在小程序:pnpm run dev:mp-weixin,但是它只是实时监听文件变动和生成最新代码,你需要手动启动微信开发者工具并双击打开项目。打开后,后续实时修改能够实时更新!
    在这里插入图片描述

8.演示demo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宏晶微 音频处理芯片 MS7124

MS7124是一款高性能24bit数字立体声音频DAC&#xff0c;该DAC采用Sigma-Delta结构&#xff0c;支持标准的I2S数字信号输入&#xff0c;输出支持立体声和单声道。

蓝桥杯专题-试题版-【九宫重排】【格子刷油漆】【回文数字】【国王的烦恼】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【多种优化算法比较】混沌引力搜索算法(CGSA)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

CentOS Linux MySQL 数据库 的安装方法

一、简单了解MySQL数据库的体系结构 &#xff08;一&#xff09;MySQL架构图 &#xff08;二&#xff09;MySQL体系结构&#xff1a;连接层、服务层、引擎层、存储层 1、连接层--主要职责&#xff1a;身份认证&#xff0c;连接管理&#xff0c;获取权限信息 &#xff08;1&am…

Basler相机一丢包就断开问题解决

问题描述&#xff1a; 两个相机&#xff0c; 一个相机aca2500-14gm连接电脑主板100M网卡没问题&#xff0c;帧率3帧&#xff0c;但是不会断。 一个相机aca2500-14gm连接USB转网口&#xff08;千兆&#xff09;&#xff0c;pylon Viewer采图丢包严重并且几秒后相机断开。 解决…

Nacos架构与原理 - 寻址机制

文章目录 前提设计MemberLookup内部实现单机寻址 StandaloneMemberLookup文件寻址 FileConfigMemberLookup地址服务器寻址 AddressServerMemberLookup 未来可扩展点 前提 Nacos 支持单机部署以及集群部署 针对单机模式&#xff0c;Nacos 只是自己和自己通信&#xff1b;对于集…

认识 SpringCloud 核心组件

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 微服务探索之旅 ✨特色专…

黑马微服务课程cloud-demo项目出现No instances available for userservice错误解决办法

错误描述 如果你的cloud-demo项目当输入http://localhost:8080/order/101&#xff0c;想查看订单编号为101的数据&#xff0c;网页前端显示如下错误 IDEA显示错误&#xff1a; 07-05 16:39:16:251 ERROR 10056 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] …

windows系统中常用的cmd命令(白帽黑帽必备知识)

文章目录 前言一、我们也来学习下二、windows系统中常用命令介绍1.netstat 命令2.ping 命令3.arp 命令4.route 命令5.tracert 命令6.telnet 命令7.nmap 命令8.SMB 命令9.tasklist 命令10.at 命令11.nslookup 命令12.ftp 命令13.net 命令14.ipconfig 命令 总结 前言 在计算机领…

学习 | 药品GMP认证和药厂GMP认证是怎么回事?

可能本身从事药品生产经营的朋友会知道&#xff0c;药品的GMP认证是怎么一回事&#xff0c;但是对于一些想要进入药品生产行业的企业&#xff0c;例如化工产品想进入原料药生产、药用辅料生产&#xff0c;塑料等材料制作商进入药品包装材料生产&#xff0c;只是听这说听那说&am…

Nginx配置

server模块 其中&#xff0c;这里并不是真的启动一个服务&#xff0c;是一个逻辑服务&#xff0c;是去匹配来请求服务的路径&#xff0c;listen是匹配请求者访问了什么端口&#xff0c;server_name是匹配请求者用了什么域名&#xff0c;location是将匹配上的请求转发到哪个地…

黑马点评(达人探店)

达人探店 一、发布探店笔记 发布探店笔记功能是项目本身就完成了的功能&#xff0c;他会把图片存在本地&#xff0c;有兴趣可以去看源码&#xff0c;在UploadCOntroller类下 二、查看探店笔记 这个功能项目本身是没有完成这个接口的&#xff0c;所以需要我们自己去完成。 …