温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

vue项目适配大屏端的方法

发布时间:2021-08-02 19:28:06 来源:亿速云 阅读:274 作者:chen 栏目:开发技术

本篇内容主要讲解“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项目适配大屏端的方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue
AI