移动端适配

1、根据dpr设置viewport

根据js动态设置viewport的缩放比,从而达到设备独立像素等于物理像素

const scale = 1/window.devicePixelRatio
const viewport = document.querySelector('meta[name="viewport"]')
if (!viewport) {
  viewport = document.createElement('meta')
  viewport.setAttribute('name', 'viewport')
  window.document.head.appendChild(viewport)
}
viewport.setAttribute('content', `width=device-width,initial-scale=${scale },minmun-scale=${scale },maxmum-scale=${scale },user-scalable=no`)
2、rem适配

rem是相对于根元素来做计算的

(function (doc, win) {
  var docEl = doc.documentElement,
      dpr = window.devicePixelRatio || 1,
      resizeEvt = 'onorientationchange' in window ? 'onorientationchange' : 'resize',
      recalc = function () {
          var clientWidth = docEl.clientWidth;
          if (!clientWidth) return;
          if(clientWidth>=750){
              docEl.style.fontSize = '100px';
          }else{
              docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
          }
      };

  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  recalc();
})(document, window);
3、vw和vh适配

vh、vw方案即将视觉视口宽度 window.innerWidth和视觉视口高度 window.innerHeight 等分为 100 份。
如果视觉视口为375px, 1vw = 3.75px
这个换算关系有点复杂,在vue项目中,可以使用postcss插件辅助计算,书写css时按照设计稿尺寸正常书写即可

4.横屏检测

4.1 js检测

window.addEventListener('resize', ()=> {
  if (window.orientation === 180 || window.origntation ===0) {
    console.log('竖屏')
  }
  if (window.orientation === 90 || window.origntation ===-90 {
    console.log('横屏')
  }
})

4.2 css检测

@media screen and (origentataion: portrait) {
  // 竖屏
}

@media screen and (origentation: landscape) {
  // 横屏
}
5. 图片模糊问题

根据dpr不同,显示不同的位图

@media screen and (-webkit-min-decive-pixel-ratio: 2) {
  //显示@2x位图
}
@media screen and (-webkit-min-decive-pixel-ratio: 3) {
  //显示@3x位图
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不知不觉做前端已经两年了,从PC端,移动端,微信小程序一路走来到今天刚刚开放注册的快应用(手机厂商对抗小程序的新技...
    是ADI呀阅读 3,152评论 0 10
  • 本文首发于 https://blog.lenconda.top/posts/2018/04/11/mobile_a...
    Lenconda阅读 1,287评论 0 5
  • 前言:这周工作碰到了移动端1px的问题。以前一直写样式也没有特别注意着一点。还有就是rem的原理。这些其实就是比较...
    奋斗的香蕉阅读 453评论 0 1
  • 谁有一颗玲珑剔透的心,他就会知道何时心碎。图片来源网络 foreword 这篇总结了我个人所知道的一些关于移...
    aichisuan阅读 30,871评论 2 33
  • 集中适配方案的总结: 项目: https://github.com/Aluka-w/mobile-terminal...
    我的钱包瘪瘪的阅读 1,633评论 0 0