首页 > 其他分享 >vue3微信公众号商城项目实战系列(5)页面适配手机屏幕

vue3微信公众号商城项目实战系列(5)页面适配手机屏幕

时间:2023-04-15 14:35:06浏览次数:33  
标签:微信 适配 px 像素 宽度 vue3 屏幕 375px 页面

上一篇完成了2个页面之间的跳转,在浏览器中也可以正常浏览和跳转,但这2个页面并没有为适配手机屏幕设计,

如果我们用 chrome 浏览器模拟手机屏幕的大小后再看,结果如下图:

(注:用 chrome 模拟手机屏幕只需要在正常情况下按下 F12 键,然后点击 红框2 处的小图标就可以了

,改变模拟屏幕的大小可在 红框1 处修改数字,也可以鼠标按住边框的双线拖动大小,尺寸的单位是像素)

 

模拟的手机屏幕尺寸是 375像素 x 628像素,看上去是正常的。

但如果我们浏览之前的 HelloWorld.vue页面,内容就被遮住了,如下图:

(注:我们考虑屏幕大小的时候只需关注宽度,因为手机屏幕高度是可以自动带滚动条往下滑动来浏览页面的,这符合用户的使用习惯,

如果横向带滚动条,这样的设计就非常奇怪,而且从手机本身的物理尺寸上来看,高度远大于宽度,纵向的可视范围更大,

所以手机端应用在设计页面的时候一般只考虑屏幕宽度就可以了)

自然地 , 我们会想到在<template>中编写页面的时候就限制页面宽度统一为375像素是否可行呢?大部分情况是可以的

,因为现在的手机像素已经很高了,宽度一般都在375像素以上,完全够显示375像素宽的页面而没有遮挡

,但可能带来另外一个问题,就是当手机屏幕宽度大于500像素,甚至1000像素的时候,页面内容会变得非常小。

为了展示这样的效果 , 我们先把全局样式修改一下,如下图(加上1px的红色边框是为了有更好的参照):

然后再给 Welcome.vue 定义一个固定宽度 375px,如下:

<template>
    <div class="welcome">
        <span>欢迎回来</span>
        <router-link to="/home">浏览进入</router-link>
    </div>    
</template>


<style>
.welcome{
    width: 375px;
    border: solid 1px blue;
}
</style>

同时我们修改 src/assets/main.css 这个全局样式,把页面预设的 padding和margin全部置0,确保 .vue 页面能完全占满屏幕不留空隙,修改如下:

 

html,body{
  margin: 0;
  padding: 0;
}
body{
  border:solid 1px red;
}

 

body元素也加上了边框便于对比效果。

 

在浏览器中刷新页面,结果如下:

看上去一切都好 。 然后把模拟屏幕的宽度调到500px,高度等比例放大到837px ,刷新页面后效果如下:

可以看到页面宽度已经不能占满屏幕了,右侧出现了空白,如果把宽度再调大一点,空白区域势必会更大。

而现在用户的手机屏幕宽度绝大部分是超过375px,如果一个商城网站按 375px 排版

,那不同的手机尺寸展示出来的商品页面布局会五花八门,这不但给用户体验不好,而且浪费了寸土寸金的屏幕空间

, 有没有可能让375px排版好的页面在不同手机屏幕自动缩放从而填满整个屏幕宽度呢 ? 

答案是:有的。

目前有两种解决方案:

方案1. 使用 postcss-px2rem 这个js包 ,它能将 px 自动转化成 rem 单位 ,而 rem 是相对根元素字体大小的单位,从而达到自动缩放的效果。

方案2. 使用 postcss-px-to-viewport 包,它是将 px 自动转化成 vw 单位 , 1vw=1%屏幕宽度,即不管屏幕实际有多少个像素,1vw就占用

屏幕宽度的 1% ,100vw自然就占满屏幕了。

-----------------------------------------------------------------------------------------------------------------------------

本系列采用方案2,这样我们就很好的解决了布局的问题,设计稿只要定义一个宽度,比如 375px(定义成535px 、750px等任意值都可以)

,所有页面元素在设置px大小的时候只要保证这些元素宽度之和=375px(即设计稿定义的宽度) , 那页面就可以在任意尺寸的手机上

呈现和设计稿上一样的效果,不再有留白或遮挡,一切都在掌握中。

注:为了尽可能在不同分辨率的手机上浏览时保证图片的清晰度和字体大小适中,我们定义设计稿的宽度为 375px 。

使用 postcss-px-to-viewport 非常简单:

第1步 ,安装包,指令:npm install postcss-px-to-viewport

第2步,在vite.config.js中配置参数,如下:

添加引用

 

import postcsspxtoviewport from 'postcss-px-to-viewport'

 

添加配置

css: {
    postcss: {
      plugins: [
        postcsspxtoviewport({
          unitToConvert: 'px', // 要转化的单位
          viewportWidth: 375, // UI设计稿的宽度
          unitPrecision: 6, // 转换后的精度,即小数点位数
          propList: ['*'], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
          viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vw
          fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vw
          selectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,
          minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
          mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
          replace: true, // 是否转换后直接更换属性值 
          exclude: [],// 设置忽略文件,用正则做目录名匹配
          landscape: false // 是否处理横屏情况
        })
      ]
    }
  }

刷新页面,效果如下:

可以看到,虽然调大了屏幕宽度(图1),页面仍然占满了屏幕(图2),元素的单位也自动变成了 vw(图3),实现了想要的效果。

注:图3的宽度是 98.666667, 是因为笔者把宽度改成了370的缘故(如下),实际项目中建议稍稍留一点安全间隙,防止有些机型布局错乱。

<style>
.welcome{
    width: 370px;
    margin: 0 auto;
    border: solid 1px blue;
}
</style>

 

标签:微信,适配,px,像素,宽度,vue3,屏幕,375px,页面
From: https://www.cnblogs.com/pfm33/p/17320535.html

相关文章

  • 网页版微信抓包和IPAD微信抓包 Wireshark
    #在51CTO的第一篇博文#本来想抓普通网页版微信,但是换了好几个微信号说安全问题无法登陆,,,只能去QQ浏览器的微信(应该是插件)。只是熟悉了一下过程,并没有深入分析微信传输协议(其实是不会)。网页版微信一:实验目标1.认识web端微信通过TCP建立连接和使用SSL/TLS协议进行数据加密的过程。2.......
  • vue3 父子组件共享响应式对象
    父组件<templatelang=""><div><divclass="greetings">按钮值:{{num}}</div><div><button@click="num++">按钮</button></div><div>iamparent</div&......
  • typescript vue3 VueDraggable 报错 Uncaught TypeError: Cannot read properties of
    UncaughtTypeError:Cannotreadpropertiesofnull(reading'element')nnotreadpropertiesofnull(reading'index')错误写法就是说子组件需要用div包着,你用其他东西,他无法添加key,然后就会报错。<template#item="{element}"><Todo:detail=......
  • vue3微信公众号商城项目实战系列(4)第一个页面
    在开始写第一个页面之前,先简单看下index.html、App.vue、main.js、HelloWorld.vue、TheWelcome.vue、WelcomeItem.vue这几个页面及文件是怎么运作的,然后再新建2个页面,完成从一个页面跳转到另一个页面这个最简单的操作。 index.html和main.js代码如下:index.html文件的......
  • 经纬恒润AUTOSAR成功适配旗芯微国产车规级芯片
        近日,经纬恒润AUTOSAR基础软件产品INTEWORK-EAS-CP成功适配旗芯微的FC4150产品家族。同时,经纬恒润完成了对旗芯微开发板的MCAL软件适配和工程集成,为旗芯微提供了全套AUTOSAR解决方案。基于旗芯微FC4150适配经纬恒润AUTOSAR     通过本次合作,旗芯微的芯片产......
  • Vue3 Vite H5 手写一个横向展开的多级树列表
    最近写h5要做那种稍微复杂一点的树,没找到现成的UI组件库可用,vant的树只有两级不满足,只能自己写ps.选框的选择/反选/半选对父子选项的影响还有bug,留到脑子好的时候再优化效果代码框架是Vue3+Vite+Vant4。复选框用的vant的checkbox,应该也可以换别的或者原生。模板<templ......
  • 使用vscode开发微信小程序
    1.安装插件  2.文件-打开文件夹-将新建的微信小程序导入,代码会有高亮的效果 3.编辑内容,查看效果,如果有就说明插件引入成功。 ......
  • 使用VS Code开发微信小程序
    使用VSCode开发微信小程序微信开发工具结构缺点VSCodeVSCode下载插件Chinese小程序开发助手Easylessminappvscodewxmlwechat-snippet中文乱码处理配置Easyless说明 微信开发工具说归说,但是开发微信小程序的时候,这个微信开发工具......
  • 全新适配鸿蒙生态,Cocos引擎助力3D应用开发
     一、适配HarmonyOS背景HarmonyOS3.1版本自发布以来,备受广大开发者的好评,同时也吸引了鸿蒙生态众多伙伴的青睐。鸿蒙生态所强调的智慧全场景、多端联动与跨设备流转等能力,与Cocos所具有的跨平台、低功耗、高性能三大核心特点不谋而合。Cocos作为内容开发工具,将在鸿蒙生态中......
  • vue3微信公众号商城项目实战系列(3)项目初始文件及文件夹简介
    首先我们来看下项目的文件结构图,如下: 各个文件及文件夹作用如下:文件或文件夹名称作用.vscodeVisualStudioCode开发工具的配置信息存放目录,从这个目录可以看出vue3确实是推荐使用vscode作为开发工具的。node_modules项目中用到的包存放目录,当我们用"npminstall......