vue-cli3项目中使用flexible和rem适配移动端的一些踩坑

2023-10-27

最近在做一个移动端的项目,需要做一些适配处理,其实以前一直都是浑水摸鱼式的,虽然看了很多关于移动端适配的方案,感觉都很厉害,但一直迟迟不曾实践。(ps:好像大部分中小公司对这方面都没啥要求啊)╯▽╰

在网上找了一番后,发现手淘的flexible+rem的方案居多,决定试试这个。

好了,废话不多说,下面开始正式的采坑之旅。

首先构建vue-cli项目,这个基本就是按照官方文档一步步操作就可以了。 这里以最新的vue-cli3.0为例:

1.安装vue-cli

npm install -g @vue/cli

2.创建项目

vue create your-project

此处注意,对于win7的小伙伴,当你在创建项目中,需要进行一些选项的选择,当发现键盘上下键没法进行选项操作时,一定要多瞅两眼官方文档的这段话:

3.安装相关插件

npm install amfe-flexible postcss-px2rem-exclude --save-dev

注意:这里的px转rem的插件我用的是postcss-px2rem-exclude,而非postcss-px2rem,主要是前者可以排除一些第三方ui文件,不进行rem转换,后者则不行。

坑一
这里有一点比较模糊的,就是关于amfe-flexible的版本问题,有些地方叫lib-flexible,其实都是一个东西,之前一直傻傻分不清楚。这个js其实做的工作只有一个就是通过js动态修改meta,给html设置相应的font-size等,当然如果不用它的话我们也可以根据需要手动修改。

坑二
这里要说的是在使用过程中比较容易混淆的一点:字体大小适配问题。因为字体用rem的话会有缩放问题,视觉上不太友好,所有还是用px处理,根据不同的dpr来处理。
引入postcss-px2rem-exclude后,我们可以在css中这样写:

.selector {
    font-size: 28px; /*px*/
}

编译后:

[data-dpr="1"] .selector {
    font-size: 14px;
}
[data-dpr="2"] .selector {
    font-size: 28px;
}
[data-dpr="3"] .selector {
    font-size: 42px;
}

这里我们看到编译后每个选择器前都多了一个属性选择器data-dpr,分别适配不同dpr下的屏幕。(ps:dpr即devicePixelRatio设备的像素比,想了解更多的小伙伴可以自行百度下)

那么配合ame-flexible使用的时候,它会根据当前设备的dpr动态的给html加上属性data-pr值,这样就可以使之前编译后的css生效了,但是实际项目发现,flexible压根就没有给html添加data-dpr呀,是我配置错了,哪里编译错了,还是到底哪儿错了…一顿捯饬后发现,flexible的源码里压根就没有这段处理啊!!! ̄□ ̄||

然后去github仓库里一看,我去,竟然版本不一样,npm包默认安装的是2.0分支的版本,这个版本里压根就木有这段处理,而master的版本里才是网上广为流传的那个版本。细看一番,发现作者的一段话:

此时的我,感觉自己太out了…

不过已经入坑了,而且这个方案目前应该也不会那么快就淘汰吧,继续采坑吧!

一番折腾后,继续,发现master版本里会根据不同的dpr对initial-scale进行缩放,缩放值是1/dpr,对于上面说的css的3个data-dpr,可以发现是成倍数关系的,那么通过缩放后字体视觉上就是正常大小。但是这样折腾一番字体好像没必要啊。果断决定不用这种方案,还是继续用2.0分支的版本,该版本仅仅是给html动态设置font-size大小,对于字体大小适配问题处理如下:
手动添加meta标签:

<meta name="viewport" content="width=device-width,initial-scale=1.0 maximum-scale=1.0, user-scalable=0" />

a.对于大标题或者slogan类的,直接用rem;
b.对于段落类的,描述性的,用px;
c.px不转rem的话,可以这么写

font-size: 24px; /*no*/

4.js动态设置容器高度问题
有些页面需要计算容器的高度,从而实现滚动加载等效果,但是在rem这种方案下,行内样式px是不会转化的。这时候该怎么办呢?
项目里暂时性的解决方案是用css的calc()处理,但是兼容性不好处理,只能后续有好的方案再改进吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue-cli3项目中使用flexible和rem适配移动端的一些踩坑 的相关文章

  • 基于mybatis拦截器实现数据权限

    需求场景 业务要求对列表查询功能添加数据权限控制 比如 给用户A针对某些订单模块设置一些查询条件 比如地址 山东 运输方式 空运 商品大类 家电 当用户访问订单模块时 只能访问满足这些条件的数据 需求分析 要实现动态条件拼接 需要在执行查询

随机推荐

  • 解析LDO的基本原理与主要参数

    低压差线性稳压器 LDO 的基本电路如图1 1所示 该电路由串联调整管VT 取样电阻R1和R2 比较放大器A组成 取样电压加在比较器A的同相输入端 与加在反相输入端的基准电压Uref相比较 两者的差值经放大器A放大后 控制串联调整管的压降
  • 过滤器实现网站访问计数

    创建一个过滤器 实现网站访问计数器的功能 并在web xml文件的配置中将网站访问量的初始值设置为5000 创建名称为CountFilter的类 创建名称为CountFilter的类 该类实现javax servlet Filter接口 是
  • tf-faster-rcnn config.py 参数详解

    import os import os path as osp import numpy as np pip install easydict if you don t have it from easydict import EasyDi
  • Django 项目学习

    目录 一 环境问题 1 python环境安装 2 django安装 3 IDE选择 二 Django命令 实际使用在后面文章中介绍 三 Django项目和应用的关系 1 Django项目中目录介绍 3 Django应用中目录介绍 四 Dja
  • 嵌入式开发——uboot如何启动内核(以zImage详解)

    1 vmlinuz vmlinux Image zImage与uImage的区别 参考博客 vmlinuz vmlinux Image zImage与uImage的区别 uboot启动内核的大致步骤 1 首先uboot要通过读取SD卡 fl
  • 单路服务器芯片组的发展

    服务器的质保一般为3到5年 但是有的服务器会使用超过十年 所以学习服务器硬件知识 不仅要学习新的知识 还要学习老的 旧的知识 一 单路服务器芯片组发展简介 Q3 06 英特尔发布了3000系列芯片组 其中包括3000和3010芯片组 使用7
  • Android框架BRVAH使用指南

    BRVAH BaseRecyclerViewAdapterHelper 是一个强大并且灵活的RecyclerViewAdapter 集成了大部分列表常用需求解决方案 1 框架引入 将JitPack存储库添加到您的构建文件中 项目根目录下bu
  • Recat 鼠标移动实时显示坐标

    一 React实时显示鼠标坐标事件 从react解构两种方法 import useState useEffect from react 定义方法 状态管理 function useOnMouse var page setPage useSt
  • 机器学习之KNN和决策树

    1 K 临近算法 KNN算法 一 优缺点和适用范围 1 优点 精度高 对异常值不敏感 无数据输入假定 2 缺点 计算复杂度高 空间复杂度高 3 适用数据范围 数值型和标称型 二 原理和算法思想 原理 训练样本集中每个数据都存在标签 输入没有
  • 最新版校园招聘进大厂系列----------(5)百度篇 -----未完待续

    哈喽 大家好 我是 奇点 江湖人称 singularity 刚工作几年 想和大家一同进步 一位上进心十足的 Java ToB端大厂领域博主 喜欢java和python 平时比较懒 能用程序解决的坚决不手动解决 如果有对 java 感兴趣的
  • H264标准学习-base1

    参考博文 https blog csdn net xiexingshishu article details 39323515 https blog csdn net fanbird2008 article details 47122091
  • go使用excelize导出excel

    由于xlsx库两年没有更新了 所以今天又写了个使用excelize到处excel 传参格式仍可参照用xlsx格式 go语言使用tealeg xlsx导出excel 借我三行代码的博客 CSDN博客 type UserData struct
  • SpringBoot2.0 Actuator 监控参数说明

    基于SpringBoot2 0 Actuator metrics的监控 基于Oracle JDK9 G1 引言 SpringBoot2在spring boot actuator中引入了micrometer 对1 x的metrics进行了重构
  • 基于YOLOv5的光学遥感图像舰船目标检测算法

    源自 系统工程与电子技术 作者 成倩 李佳 杜娟 摘 要 针对YOLO you only look once v5算法在应用于光学遥感图像舰船目标检测任务时所面临的小目标误检率 漏检率较高的情况 提出一种基于YOLOv5改进的光学遥感图像舰
  • linux 关闭防火墙 及mysql 无密码登陆

    Linux中怎么去关闭防护墙和mysql的无密码登陆及修改密码 做为一个自己参考的记录 CentOS 防火墙关闭 关闭防火墙命令 systemctl stop firewalld service 开启防火墙 systemctl start
  • 统计某个班男女生人数_sql练习题

    Code 1 有如下表格和数据 2 ID Name Class Sex 3 4 1 张1 一班 男 5 2 张2 一班 男 6 3 张3 二班 女 7 4 张4 一班 男 8 5 张5 二班 女 9
  • kettle案例——数据清洗与校验(完全去重)

    1 源数据预览 2 打开kettle新建一个转换并添加下述步骤然后用跳连接 3 双击CSV文件输入进行配置 点击浏览导入文件 然后点击获取字段 最后点击预览看数据是否抽取进来 4 双击唯一行 哈希值 进行配置 在用来比较的字段处 添加要去重
  • matlab 海岸线绘制,m_map1.4 matlab中

    m map1 4 m map Contents m m map1 4 m map map html m map1 4 m map m coast m m map1 4 m map m contour m m map1 4 m map m c
  • 利用linux内核将多个文件编译成一个ko文件

    利用linux内核将多个文件编译成一个ko文件 1 如果一个驱动直接编译进内核 直接按照以下方式书写 obj y generic serial o vme scc o obj y a o 2 如果一个驱动要编译成模块 且一个模块由1个源文件
  • vue-cli3项目中使用flexible和rem适配移动端的一些踩坑

    最近在做一个移动端的项目 需要做一些适配处理 其实以前一直都是浑水摸鱼式的 虽然看了很多关于移动端适配的方案 感觉都很厉害 但一直迟迟不曾实践 ps 好像大部分中小公司对这方面都没啥要求啊 在网上找了一番后 发现手淘的flexible re