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

news2024/10/7 8:21:56

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

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/6961737808339795975
          unitPrecision: 6, // 转换后的精度,即小数点位数
          propList: ['*'], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
          viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vw
          fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vw
          selectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,
          minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
          mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
          replace: 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.coloradmin.cn/o/720497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大禹智库:下一代向量数据库————具备在线化,协作化,可视化,自动化和安全互信的向量数据库

目录 一、在线化 二、协作化 三、可视化 四、自动化 五、安全互信 结论&#xff1a; 行业分析报告&#xff1a;下一代向量数据库的特征 摘要&#xff1a; 向量数据库是一种用于存储和处理向量数据的数据库系统。随着人工智能和大数据技术的快速发展&#xff0c;向量数据…

原生js实现for循环占位符绑定数据,类似模拟vue循环渲染数据

let ar [{ label: 显示文本1, value: 1 },{ label: 显示文本2, value: 2 },{ label: 显示文本3, value: 3 },{ label: 显示文本4, value: 4 },{ label: 显示文本5, value: 5 },], html , tpl <p>{value}&#xff1a;{label}</p>, dom document.querySelector(&…

MySQL安装及使用图文教程(超详细版本)

1、下载 下载地址&#xff1a;MySQL :: Download MySQL Installer 本文选择安装包安装版本 2、 安装 1&#xff09;双击安装包启动安装程序&#xff0c;点击“Next”按钮&#xff0c;如下图&#xff1a; 2&#xff09;点击“Execute”按钮 3&#xff09;点击“Next”按钮 4&a…

PHP 校园新闻网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 校园新闻网站系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址https://download.csdn.net/download/qq_41221322/87999771https://downlo…

leetcode 141.环形链表(快慢指针追击问题)

⭐️ 往期相关文章 &#x1f4ab;链接1&#xff1a;链表分割 &#x1f4ab;链接2&#xff1a;链表中倒数第k个结点(快慢指针问题) &#x1f4ab;链接3&#xff1a;leetcode 876.链表的中间结点(快慢指针问题) &#x1f4ab;链接4&#xff1a;leetcode 206.反转链表 &#x1f4…

Linux网络、磁盘、内存、日志监控

文章目录 1、CPU性能监控1.2、平均负载基础1.3、平均负载与 CPU 使用率1.4、监控命令top命令mpstat命令pidstat场景一&#xff1a;CPU 密集型进程场景二&#xff1a;I/O 密集型进程场景三&#xff1a;大量进程的场景1.5、CPU上下文切换1.6、 遇到CPU利用率高该如何排查1.7、根据…

八.图像处理与光学之图像几何变换算法(最近邻域插值)

八.图像处理与光学之图像几何变换算法(最近邻域插值) 8.0 前言 ​ 图像几何变换是图像处理中非常基础实用的技能,主要包括图片位移、缩放、镜像、剪切、放射变换等,在对图像进行空间变换的过程中,典型的情况是在对图像进行放大,旋转处理的时候,图像会出现失真的现象。这…

Python进阶 - 迭代器

目录 什么是迭代 可迭代对象 什么是迭代器 迭代器实现迭代 for in 循环的实现 什么是迭代 使用for循环遍历取值的过程叫做迭代 可迭代对象 标准概念&#xff1a;在类里面定义__iter__方法&#xff0c;并使用该类创建的对象就是可迭代对象 简单记忆&#xff1a;使用for循…

vue3使用表格、列表的拖拽排序

常量变量声明都已省略。。。。自己定义 1.效果 <a-tablesize"small":columns"sourceColumns":data-source"sourceData"bordered:pagination"SourceTableConfig.pagination ? objArray.sourcePagination : false"v-if"Source…

uniapp快速开发小程序全流程

uniapp快速开发小程序全流程 完整项目代码&#xff1a;https://gitee.com/Zifasdfa/ziyi-app 欢迎fork与star 1 项目效果及环境准备 1.1 项目效果 本文主要使用uniapp实现一个简单的app应用 1.2 环境准备&项目初始化 ①node环境&#xff1a;去node.js官网下载稳定版的nod…

Android 实现透明度

开发时&#xff0c;UI上的一些布局总需要设置他是有一定的透明度的&#xff0c;有些UI不会给AHEX的代码&#xff0c;只有无透明度的HEX颜色代码&#xff0c;我也懒得去算&#xff0c;每次都要去网上查&#xff0c;所有今天自己总结一份&#xff0c;下次懒得再去找了。 1.颜色C…

群测群防体系建设自然灾害风险识别预警监测建设方案

实现感知全域覆盖实现监测全面汇聚实现风险早期识别实现预报预警精细精准实现预警靶向发布实现全过程监测预警 健全完善水旱、地质、森林草原、气象、地震、农业等灾害监测感知手段&#xff0c;形成空、天、地一体化全覆盖的自然灾害监测感知网络体系。 基于空、天、地全覆盖…

Segment Anything:突破边界的图像分割新技术解析

Segment Anything论文地址&#xff1a;https://arxiv.org/pdf/2304.02643.pdf Segment Anything&#xff1a;突破边界的图像分割新技术解析 论文背景Segment Anything任务方法Segment Anything 模型架构图像编码器&#xff08;Image Encoder&#xff09;提示编码器&#xff08;…

黑马微服务课程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] …

ElasticSearch - 批量更新bulk死锁问题排查 | 京东云技术团队

一、问题系统介绍 监听商品变更MQ消息&#xff0c;查询商品最新的信息&#xff0c;调用BulkProcessor批量更新ES集群中的商品字段信息; 由于商品数据非常多&#xff0c;所以将商品数据存储到ES集群上&#xff0c;整个ES集群共划分了256个分片&#xff0c;并根据商品的三级类目…

Elasticsearch脚本查询

Elasticsearch脚本查询 什么/为什么 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能&#xff0c;ES支持多种脚本语言&#xff0c;如painless&#xff0c;其语法类似于Java,也有注释、关键字、类型、变量、函数等&#xff0c;其就要相对…

AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通

本文收集于教程合集&#xff1a;AIGC从入门到精通教程汇总 我是小梦&#xff0c;以浅显易懂的方式&#xff0c;与大家分享那些实实在在可行之宝藏。 历经耗时数十个小时&#xff0c;总算将这份Stable Diffusion的使用教程整理妥当。 从最初的安装与配置&#xff0c;细至界面…

fdisk和df -h的区别以及如何看懂和提取信息

前几天要查看linux系统磁盘大小&#xff0c;但是发现fdisk和df -h出来的大小和信息不一样&#xff0c;了解了一下linux的磁盘分区和内存大小&#xff0c;查阅了相关资料&#xff0c;总结以下信息&#xff1a; 一、相关理念 在计算机中&#xff0c;存放信息的主要存储设备就是…

天猫数据分析工具(天猫实时数据)

后疫情时代&#xff0c;聚会、聚餐与送礼热度上涨&#xff0c;酒类产品既作为送礼首选又作为佐餐饮品的热门选手也受此影响迎来消费小高峰。在此背景下&#xff0c;白酒市场也开始复苏并不断加快速度。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年1月份至4月…

小程序 事件委托给父元素scrollview 获取不到子元素view的绑定的dataset值

点击事件委托到父元素&#xff1a;scrollview 减少多次循环绑定 &#xff1a; 通过点击事件的dataset判断了点击哪个子元素。 常能见到e.target或者e.currentTarget。 简单来说&#xff0c;currentTarget就是当前对象&#xff0c;target就是整个对象&#xff08;包含子元素&…