文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue项目适配大屏端的方法

2023-06-20 19:36

关注

本篇内容主要讲解“vue项目适配大屏端的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue项目适配大屏端的方法”吧!

浅析rem

首先rem是css单位,相比于px固定的像素单位,rem更加的灵活,还有现在也比较好的vm。如果从未了解过,可以先过过眼

rem自适应。CSS3的REM设置字体大小

font size of the root element.

简单来说,rem就是根据html元素的字体大小来计算单位的。我们的需求就是说,根据不同的分辨率,我们元素的大小能够有所对应的变化,在视觉上能够做到很舒服的效果。想想我们在做pc端的时候,一般都是中间固定比如1200px像素,然后最小1200px,两边留白,这样我们无论放大缩小都不会影响效果。但是现在移动端各种屏幕的出现,适应性就更加的强烈。根据分辨率的不同让html的字体大小变化,我们在页面中写rem,由于rem是相对于根元素字体大小来计算的,那么就可以实现自适应的效果。

1.适配方式

适配方案采用rem布局, 根据屏幕分辨率大小不同,调整根元素html的font-size, 从而达到每个元素宽高自动变化,适配不同屏幕

2.使用 postcss-px2rem-exclude 插件

安装 npm install postcss-px2rem-exclude --save-dev

在项目根目录创建 postcss.config.js 文件

module.exports = {  plugins: {    autoprefixer: {},    'postcss-px2rem-exclude': {      remUnit: 192      // exclude: /node_modules|folder_name/i,    }  }}

3.安装 flexible.js (建议放到本地)

安装命令  npm install lib-flexible

(function(win, lib) {  var doc = win.document  var docEl = doc.documentElement  var metaEl = doc.querySelector('meta[name="viewport"]')  var flexibleEl = doc.querySelector('meta[name="flexible"]')  var dpr = 0  var scale = 0  var tid  var flexible = lib.flexible || (lib.flexible = {})  if (metaEl) {    console.warn('将根据已有的meta标签来设置缩放比例')    var match = metaEl      .getAttribute('content')      // eslint-disable-next-line no-useless-escape      .match(/initial\-scale=([\d\.]+)/)    if (match) {      scale = parseFloat(match[1])      dpr = parseInt(1 / scale)    }  } else if (flexibleEl) {    var content = flexibleEl.getAttribute('content')    if (content) {      // eslint-disable-next-line no-useless-escape      var initialDpr = content.match(/initial\-dpr=([\d\.]+)/)      // eslint-disable-next-line no-useless-escape      var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/)      if (initialDpr) {        dpr = parseFloat(initialDpr[1])        scale = parseFloat((1 / dpr).toFixed(2))      }      if (maximumDpr) {        dpr = parseFloat(maximumDpr[1])        scale = parseFloat((1 / dpr).toFixed(2))      }    }  }  if (!dpr && !scale) {    // var isAndroid = win.navigator.appVersion.match(/android/gi);    var isIPhone = win.navigator.appVersion.match(/iphone/gi)    var devicePixelRatio = win.devicePixelRatio    if (isIPhone) {      // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案      if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {        dpr = 3      } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {        dpr = 2      } else {        dpr = 1      }    } else {      // 其他设备下,仍旧使用1倍的方案      dpr = 1    }    scale = 1 / dpr  }  docEl.setAttribute('data-dpr', dpr)  if (!metaEl) {    metaEl = doc.createElement('meta')    metaEl.setAttribute('name', 'viewport')    metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no')    if (docEl.firstElementChild) {      docEl.firstElementChild.appendChild(metaEl)    } else {      var wrap = doc.createElement('div')      wrap.appendChild(metaEl)      doc.write(wrap.innerHTML)    }  }  function refreshRem() {    var width = docEl.getBoundingClientRect().width    if (width / dpr > 540) {      width = width * dpr    }    var rem = width / 10    docEl.style.fontSize = rem + 'px'    flexible.rem = win.rem = rem  }  win.addEventListener(    'resize',    function() {      clearTimeout(tid)      tid = setTimeout(refreshRem, 300)    },    false  )  win.addEventListener(    'pageshow',    function(e) {      if (e.persisted) {        clearTimeout(tid)        tid = setTimeout(refreshRem, 300)      }    },    false  )  if (doc.readyState === 'complete') {    doc.body.style.fontSize = 12 * dpr + 'px'  } else {    doc.addEventListener(      'DOMContentLoaded',      function() {        doc.body.style.fontSize = 12 * dpr + 'px'      },      false    )  }  refreshRem()  flexible.dpr = win.dpr = dpr  flexible.refreshRem = refreshRem  flexible.rem2px = function(d) {    var val = parseFloat(d) * this.rem    if (typeof d === 'string' && d.match(/rem$/)) {      val += 'px'    }    return val  }  flexible.px2rem = function(d) {    var val = parseFloat(d) / this.rem    if (typeof d === 'string' && d.match(/px$/)) {      val += 'rem'    }    return val  }})(window, window['lib'] || (window['lib'] = {}))

上面的代码与安装的flexible.js不同

修改了

  function refreshRem() {    var width = docEl.getBoundingClientRect().width    if (width / dpr > 540) {      width = width * dpr    }    var rem = width / 10    docEl.style.fontSize = rem + 'px'    flexible.rem = win.rem = rem  }

在main.js中引入

import '路径/flexible.js'

到此,相信大家对“vue项目适配大屏端的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯