当前位置:网站首页 > 技术博客 > 正文

移动端ui框架(一篇文章搞懂!vue中pc端与移动端适配解决方案(亲测有效))



当涉及屏幕适配方案时,我们常常,如postcss-pxtorem、postcss-px2rem、px2rem-loader、postcss-plugin-px2rem等。然而,在实际测试中,由于不同的Vue和Webpack版本,很多这些方式已经无法使用,反而带来了更多麻烦。

为了尽快解决问题,我们应该始终以解决问题为导向,首先采用那些已经获得验证并能产生效果的方法。对于上述列举的方案,虽然没有一一测试过,但我们需要明确的是,抓住解决问题的关键。

针对移动端和PC端适配,我建议将两者进行拆分并进行工程化配置,以避免整体框架调整后在某些页面上出现轻微不协调。在某些情况下,你可能会注意到笔记本电脑上显示比例缩放后的细微差异,这可以通过插入【整体缩放自适应解决方案(阿里团队高清方案)的JS代码】来解决。

💡 欢迎加入「🌍独立全栈开发交流群」,一起学习交流前端和Node端技术

1.1 基础概念

viewport即视窗、视口,用于显示网页部分的区域,在PC端视口即是浏览器窗口区域,在移动端,为了让页面展示更多的内容,视窗的宽度默认不为设备的宽度,在移动端视窗有三个概念:布局视窗、视觉视窗、理想视窗。

  • 布局视窗:在浏览器窗口css的布局区域,布局视口的宽度限制css布局的宽。为了能在移动设备上正常显示那些为pc端浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或其他值,一般都比移动端浏览器可视区域大很多,所以就有横向滚动条。
  • 视觉视窗:终端设备显示网页的区域。
  • 理想视窗:针对当前设备最理想的展示页面的视窗,不会出现横向滚动条,页面刚好全部展现在视窗内,理想视窗即终端屏幕的宽度。

viewport详细设置:

  • 通过设置viewport可以设置页面大小,通过meta标签可以设置viewport信息。
  • viewport有以下几个属性:
    • width:视口的宽度,正整数或设备宽度device-width(width=device-width)
    • height:视口高度,正整数或device-height
    • initial-scale(initial-scale=1.0):网页初始缩放值,小数缩小,反之放大(initial-scale=1.0)
    • maximum-scale(maximum-scale=1.0):设置页面的最大缩放比例
    • minimum-scale(minimum-scale=1.0): 设置页面的最小缩放比例
    • user-scaleble(user-scalable=no):用户是否可以缩放

移动端默认会缩放大尺寸的页面的,当我们把上述代码去掉之后,就会随着移动端缩放的比例走,而且还可以自由放大。

1.1.1 解决方案一viewport缩放

方案统计:

  1. 设置viewport进行缩放

    PC端适配移动端可以通过html标签重meta name="viewport"调整视口比例,进行页面缩放。 不过有部分同学使用过程中反应缩放会导致有些页面元素会糊的情况。

代码原理:

  1. 根据设备屏幕的DPR(设备像素比,比如dpr=2时,表示1个CSS像素由2X2个物理像素点组成) 动态设置 html 的font-size
  2. 同时根据设备DPR调整页面的缩放值,进而达到高清效果。
 
  1. 根据设备屏幕的DPR,自动设置最合适的高清缩放。保证了不同设备下视觉体验的一致性。 旧方案,屏幕越大,元素也越大,新方案,屏幕越大,看到的越多 看得越多的理解: 比如,一篇很长的文章在ip4上,一屏盛不了那么多内容,而在ip6plus上,可以全部看清楚,这是因为,新方案会根据dpr来缩放视口,大屏小屏的手机上,显示的字体大小都是一致的,当然在大屏上看到的东西就多咯~
  2. 有效解决移动端真实1px问题(这里的1px 是设备屏幕上的物理像素)

【7】  移动端开发自适应解决方案(阿里团队高清方案)

1.1.2 解决方案二—两套页面

同时兼任pc和移动适配

通过配置两套不同路由和判断是否是移动端实现

核心代码:(区分路由)

1.1.3 解决方案三—postcss-pxtorem、amfe-flexible

搭配工程化,可以参考第二章【PC端适配方案】

 

vue项目使用element-ui框架Rem适配(postcss-pxtorem、amfe-flexible),自动转换px为rem,解决响应式问题

1366 * 768 : 普通液晶显示器 1920 * 1080: 高清液晶显示器 2560 * 1440: 2K高清显示器 4096 * 2160: 4K高清显示器 1280 * 720: 笔记本(1920*1080分辨率下系统默认推荐150%缩放比产生的尺寸)

大屏数据可视化项目通常用于放在电视或广告屏上展示用,而不允许出现滚动条

2.1. 适配痛点难点

设计稿按照1920*1080的分辨率,16:9的比例设计, 实际开发中,document窗口不足16:9(高度减掉顶部tab及导航栏,地址栏等) 不同分辨率:实际应用场景中,显示场景不同,不能固定写死px单位 不同比例:不同的显示器宽高比与设计稿不一致

2.2. 什么是rem

rem是CSS3新增的相对长度单位,是指相对于根元素html的font-size计算值的大小。简单可理解为屏幕宽度的百分比。 但是,项目中常见尺寸绘制采用的均是px,要改用rem一时半会缓不过来,而且可能还要换算转换,所以使用rem还是比较麻烦的,但是,我们可以通过插件,能够将项目中的px转换为rem,还可以自定义基数。

2.3. 安装依赖

 
 

2.3. 引入amfe-flexible

由于 viewport 单位得到众多浏览器的兼容,lib-flexible 这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用 viewport 来替代此方。()

amfe-flexible是lib-flexible的升级版

flexible就是根据不同的屏幕算出html的font-size,通过js来动态写meta标签

实上他做了这几样事情:

  • 动态改写标签
  • 给元素添加属性,并且动态改写的值
  • 给元素添加属性,并且动态改写的值

在main.js中引入amfe-flexible

 

amfe-flexible 等价代码

 

2.4. 配置vue.config.js

配置postcss-pxtorem ,可在vue.config.js、postcsssrc.js、postcss.config.js、其中之一配置,权重从左到右降低,没有则新建文件,只需要设置其中一个即可.

 
 

2.5. 总结

2.5.1 注意事项:

对于行内样式,阿里手淘并不能将px转rem,所以对于需要自适应的样式,如font-size、width、height等请不要写在行内。同理,对于不需要转化的样式可以写在行内,或者使用PX(大写)作为单位。

暂未找到可以转行内rem的插件,可根据下面地址的方式自己实现(未验证是否可行)。blog.csdn.net/weixin_3961…

我们都知道chrome的最小显示的字体是12px,如果字体用rem,计算出来小于12px,那么就也会以12px显示,而且我们不希望出现13px或者15px这样的奇葩尺寸,所以字体最好是用PX(大写)来表示,至于适应,我们可以写媒体查询。

 
2.5.2 测试反馈:

已测试屏幕尺寸:1920*1080 、1366 * 768

问题:屏幕缩小,网页缩放,效果与原1920*1080不一致

 
2.5.3其他问题
  1. 如果没效果,查看根元素是否添加上了fongt-size,为添加的话查看css预处理器,如果是sass改成node-sass;我这边使用的版本为:
 

【1】  移动端、后台管理、大屏可视化等项目rem适配(postcss-pxtorem、amfe-flexible)。已自测推荐

【2】  手把手教你实现VuePC端,移动端适配简单版

【3】  amfe-flexible+postcss-px2rem

【4】   移动端布局适配的方案

【5】  固定版心宽度—浅谈-web屏幕适配的解决方案

【6】  手机端页面自适应解决方案—rem布局进阶版(附源码示例)

【7】  移动端开发自适应解决方案(阿里团队高清方案)

【8】  VUE 移动端适配——px2rem 和 postcss-pxtorem

【9】  vue中使用rem布局解析+大屏自适应

  • 上一篇: getchar gets
  • 下一篇: 多线程编程有什么用途
  • 版权声明


    相关文章:

  • getchar gets2024-12-11 12:30:04
  • python安装win322024-12-11 12:30:04
  • c++ map和multimap2024-12-11 12:30:04
  • 创建用户并指定uid2024-12-11 12:30:04
  • ssh远程执行shell脚本2024-12-11 12:30:04
  • 多线程编程有什么用途2024-12-11 12:30:04
  • cp-i命令2024-12-11 12:30:04
  • 逻辑回归 pytorch2024-12-11 12:30:04
  • java课程设计模板内容2024-12-11 12:30:04
  • python加密程序设计2024-12-11 12:30:04