Vue2實(shí)現(xiàn)自適應(yīng)屏幕大小的兩種方法詳解
甲方爸爸之前的需要只是要PC端訪問(wèn),沒(méi)有做不同屏幕的自適應(yīng)尺寸,這個(gè)年代誰(shuí)的屏幕沒(méi)有1980.然后經(jīng)過(guò)幾個(gè)月的頁(yè)面修改好現(xiàn)在需要適應(yīng)各式各樣的屏幕,做自適應(yīng)。關(guān)鍵項(xiàng)目寫(xiě)完了,一個(gè)個(gè)改費(fèi)時(shí)費(fèi)心費(fèi)力。經(jīng)過(guò)不段的探索有兩個(gè)方案可行,一個(gè)方案有個(gè)bug,一個(gè)完美適配
方案一
1.安裝npm i lib-flexible --save npm install postcss-pxtorem -D lib-flexible庫(kù)的新版本:github.com/amfe/lib-fl…
2.在項(xiàng)目入口文件main.js中引入lib-flexible
import 'lib-flexible/flexible.js'
3.在項(xiàng)目根目錄的index.html 頭部刪除自動(dòng)生成的meta標(biāo)簽, lib-flexible會(huì)根據(jù)屏幕自動(dòng)生成相對(duì)于的meta標(biāo)簽
// 刪除 <meta name="viewport" content="width=device-width, initial-scale=1.0">
4.在項(xiàng)目根新建postcss.config.js
//另一種可以新建postcss.config.js,寫(xiě)入如下代碼
module.exports = {
plugins: {
// 兼容瀏覽器,添加前綴
autoprefixer: {
overrideBrowserslist: [
"Android 4.1",
"iOS 7.1",
"Chrome > 31",
"ff > 31",
"ie >= 8",
"last 10 versions", // 所有主流瀏覽器最近10版本用
],
grid: true,
},
"postcss-pxtorem": {
rootValue: 16, //結(jié)果為:設(shè)計(jì)稿元素尺寸/16,比如元素寬320px,最終頁(yè)面會(huì)換算成 20rem
propList: ["*"], //是一個(gè)存儲(chǔ)哪些將被轉(zhuǎn)換的屬性列表,這里設(shè)置為['*']全部,假設(shè)需要僅對(duì)邊框進(jìn)行設(shè)置,可以寫(xiě)['*', '!border*']
unitPrecision: 5, //保留rem小數(shù)點(diǎn)多少位
//selectorBlackList: ['.radius'], //則是一個(gè)對(duì)css選擇器進(jìn)行過(guò)濾的數(shù)組,比如你設(shè)置為['fs'],那例如fs-xl類(lèi)名,里面有關(guān)px的樣式將不被轉(zhuǎn)換,這里也支持正則寫(xiě)法。
replace: true, //這個(gè)真不知到干嘛用的。有知道的告訴我一下
mediaQuery: false, //媒體查詢( @media screen 之類(lèi)的)中不生效
minPixelValue: 12, //px小于12的不會(huì)被轉(zhuǎn)換
},
},
};
// 藍(lán)湖上設(shè)計(jì)稿自定義為375px 測(cè)量值直接寫(xiě)入即可 若設(shè)計(jì)稿為750px 則rootValue: 32
在vue.config.js內(nèi)配置
// 配置pc端適配
css: {
loaderOptions: {
postcss: {
postcssOptions: { #加上此配置,網(wǎng)上很多是沒(méi)有,運(yùn)行會(huì)報(bào)錯(cuò)
plugins: [
require('postcss-pxtorem')({
rootValue : 16, // 換算的基數(shù)
minPixelValue: 2,
selectorBlackList : [], // 忽略轉(zhuǎn)換正則匹配項(xiàng) 列入一些ui庫(kù), ['.el'] 就是忽略elementUI庫(kù)
propList : ['*'],
}),
]
}
}
}
}此方案不打開(kāi)控制臺(tái)或不改變?yōu)g覽器的顯示區(qū)域?qū)捀?,?huì)自動(dòng)把html的fontsize改變?cè)斐蓸邮阶兓?,每次都要手?dòng)刷新下才正常,此bug暫時(shí)沒(méi)找到解決方法,感覺(jué)不是很好。
方案二(完美解決)
1.在自己項(xiàng)目utils下新建rem.js文件
// rem等比適配配置文件
// 基準(zhǔn)大小
const baseSize = 16
// 設(shè)置 rem 函數(shù)
function setRem () {
// 當(dāng)前頁(yè)面屏幕分辨率相對(duì)于 1920寬的縮放比例,可根據(jù)自己需要修改
const scale = document.documentElement.clientWidth / 1920
// 設(shè)置頁(yè)面根節(jié)點(diǎn)字體大小(“Math.min(scale, 2)” 指最高放大比例為2,可根據(jù)實(shí)際業(yè)務(wù)需求調(diào)整)
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
}
// 初始化
setRem()
// 改變窗口大小時(shí)重新設(shè)置 rem
window.onresize = function () {
setRem()
}2.在main.js中引入適配文件
import '@/utils/rem.js'
3.安裝postcss-pxtorem
npm i postcss-pxtorem
如果有報(bào)錯(cuò)版本太高可以試下低版本
npm i postcss-pxtorem@5.1.1 -D
在vue.config.js內(nèi)配置
// 配置pc端適配
css: {
loaderOptions: {
postcss: {
postcssOptions: { #加上此配置,網(wǎng)上很多是沒(méi)有,運(yùn)行會(huì)報(bào)錯(cuò)
plugins: [
require('postcss-pxtorem')({
rootValue : 16, // 換算的基數(shù)
minPixelValue: 2,
selectorBlackList : [], // 忽略轉(zhuǎn)換正則匹配項(xiàng) 列入一些ui庫(kù), ['.el'] 就是忽略elementUI庫(kù)
propList : ['*'],
}),
]
}
}
}
}PostCSS Loader被用來(lái)處理Less文件,并且在loaderOptions中配置了PostCSS插件,但是PostCSS Loader的選項(xiàng)對(duì)象中沒(méi)有包含plugins屬性。// 使用postcssOptions屬性來(lái)配置PostCSS插件 postcssOptions
忽略不轉(zhuǎn)換
1、 就是配置上面vue.config.js的selectorBlackList
2、 就是把px設(shè)置為PX就不會(huì)轉(zhuǎn)換, 例如: min-width: 800PX
到此這篇關(guān)于Vue2實(shí)現(xiàn)自適應(yīng)屏幕大小的兩種方法詳解的文章就介紹到這了,更多相關(guān)Vue2自適應(yīng)屏幕大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于 Vue.js 之 iView UI 框架非工程化實(shí)踐記錄(推薦)
為了快速體驗(yàn) MVVM 模式,我選擇了非工程化方式來(lái)起步,并選擇使用 Vue.js,以及基于它構(gòu)建的 iView UI 框架。本文給大家分享基于 Vue.js 之 iView UI 框架非工程化實(shí)踐記錄,需要的朋友參考下吧2017-11-11
前端實(shí)現(xiàn)不同角色登入展示不同頁(yè)面效果實(shí)例
要實(shí)現(xiàn)不同角色登錄跳轉(zhuǎn)不同的前端頁(yè)面,可以在登錄成功后,根據(jù)用戶的角色信息,使用路由跳轉(zhuǎn)到不同的頁(yè)面,這篇文章主要給大家介紹了關(guān)于前端實(shí)現(xiàn)不同角色登入展示不同頁(yè)面效果的相關(guān)資料,需要的朋友可以參考下2024-08-08
利用nginx部署vue項(xiàng)目的全過(guò)程
今天要用到服務(wù)器nginx,還需要把自己的vue的項(xiàng)目部署到服務(wù)器上去所以就寫(xiě)一下記錄下來(lái),下面這篇文章主要給大家介紹了關(guān)于利用nginx部署vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2022-03-03
vant中field組件label屬性兩端對(duì)齊問(wèn)題及解決
這篇文章主要介紹了vant中field組件label屬性兩端對(duì)齊問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Element的el-tree控件后臺(tái)數(shù)據(jù)結(jié)構(gòu)的生成以及方法的抽取
這篇文章主要介紹了Element的el-tree控件后臺(tái)數(shù)據(jù)結(jié)構(gòu)的生成以及方法的抽取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

