移动端布局方案,简单高效,完美适配各种机型

本文介绍了一种使用lib/flexible和rem布局实现移动端页面适配的方法,并利用postcss-px2rem-exclude插件简化开发流程,同时解决了ipad兼容性问题。

1:使用淘宝的lib/flexible+rem布局

原理:

  rem布局:使用rem作为元素大小的单位,rem=fount-size,根据不同的屏幕宽度设置不同的fount-size值,这样元素也会跟着屏幕变大或变小

    lib/flexible:

    通过js查询屏幕大小,设置viewport标签的同时始终将fount-size设置为屏幕宽度的1/10。

    我们也应该将设计稿分成1/10与之对相应,

    由此得到1rem=屏幕宽度的1/10=设计稿的1/10

    如果设计稿大小为750px,则1rem=75px,

    比如在设计稿上量到一个宽度为150的元素,可以通过150/75得到此元素在设备中的宽度为2rem

用法:

     去掉html中的viewport标签,vue项目在public/index.html中操作

   vue项目中在main.js中引入flexible

   import ' lib/flexible/flexible.js '

引入后就实现了动态设置fount-size和viewport标签了,接下来我们只要在项目中以rem为单位写样式就可以了,但是每次都要手动计算rem太麻烦,可以使用插件postcss-px2rem-exclude

*2*:使用postcss-px2rem-exclude将px转换为rem(建议)

    使用此插件后,它会将px按照我们配置的比例来转换成rem

用法:

  安装:cnpm install postcss-px2rem-exclude -S

  配置:安装插件后在package.json添加如下代码   

 "postcss": {
     "plugins": {
     "autoprefixer": {},
     "postcss-px2rem-exclude":{
      "remUnit": 75,              
//你的设计稿的宽度的1/10为多少px此处就填多少,一般设计稿为750px
              "exclude":"/node_modules|floder_name/i"  
//如果你使用了第三放ui库,将它添加到此处,以免冲突
          }
        }
      },

  使用:

    1、需要使用rem单位的直接写px即可

    2、强制使用px为单位如fount-size:

      font-size: 28px; /*px*/  编译后会生成适应三种dpr的大小

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

    3、不需要转换的如1像素边框:border: 1px solid #ddd; /*no*/

到此我们就可以按照设计稿的大小以px为单位进行开发了,不过flexible不兼容ipad,所以我们还要加一部

3:在html的head中加入适配ipad的script标签

    直接赋值粘贴就行

<script>
/(iPhone|iPad|iPhone OS|Phone|iPod|iOS)/i.test(navigator.userAgent)&&(head=document.getElementsByTagName('head'),viewport=document.createElement('meta'),viewport.name='viewport',viewport.content='target-densitydpi=device-dpi, width=480px, user-scalable=no',head.length>0&&head[head.length-1].appendChild(viewport));
</script>
 

这样下来几乎所有的移动端都能适配了

### 1280rpx 被认为适合移动端布局的原因及原理 #### 小程序专用单位 rpx 的特性 在微信小程序中,`rpx` 是一种专门为移动端适配设计的尺寸单位。它的基本概念是将屏幕宽度视为固定值 **750rpx**,从而使得开发者可以根据设计稿的比例轻松转换元素的实际尺寸[^4]。因此,当提到 `1280rpx` 这一数值时,实际上已经经过了基于设计稿比例的换算。 #### 响应式设计理念的支持 响应式是一种让界面能够适应多种设备分辨率的技术手段。虽然响应式不仅仅局限于移动端,但它确实提供了强大的支持来处理不同分辨率下的展示问题[^1]。通过采用像 `rpx` 或其他类似的自适应单位(如 `rem`, `vw/vh`),可以有效应对各种屏幕尺寸的变化。 #### 物理像素与 CSS 像素的区别 不同于传统的 `px` 单位,后者代表固定的 CSS 像素而不随设备密度改变,`rpx` 则依据当前设备的真实 DPI 动态调整其映射关系。这意味着即使在同一逻辑尺寸下 (`1280rpx`) ,由于各款手机具有不同的 PPI 参数 (Pixels Per Inch),最终呈现出的效果依然保持一致性和美观度[^2]。 #### 实现机制分析 以常见的 iPhone X 屏幕为例,其分辨率为 375pt × 812pt(对应于 @3x 下真实的物理像素为 1125×2436)。按照前述公式计算得出: \[ \text{实际宽度} = (\frac{\text{设计图宽度}}{\text{标准宽度}}) \times 当前屏幕宽度\] 假设我们的设计图为宽高比相同的正方形区域,并且该区域内某对象占据整屏高度的一半位置,则有如下推导过程: - 若设计稿规定此对象高度为 \( H_{design}=640px\); - 那么对于任意一款智能手机而言, ```javascript let actualHeightInRpx = Math.floor((H_design / StandardWidth) * CurrentScreenWidth); // 对于iPhoneX来说就是 let actualHeightInRpx = Math.floor((640/750)*375)=320; ``` 由此可见,选择接近两倍于常规可视范围内的长度作为默认参数值是非常合理的做法之一 —— 它既不会显得过于紧凑也不会过分拉伸画面内容[^5]。 --- ### 结论总结 综上所述,之所以选用 `1280rpx` 作为某一特定组件的高度设定,主要是因为它兼顾到了以下几个方面的要求:一是遵循了现代 Web 开发领域普遍推崇的最佳实践原则即“移动优先”理念;二是充分利用了诸如 WeChat Mini Program 提供的独特功能优势——灵活易控又精确可靠的相对定位体系;三是综合考量目标受众群体所使用的主流机型规格特征之后作出的经验判断结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈子米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值