詳解Vue如何實(shí)現(xiàn)響應(yīng)式布局
前提準(zhǔn)備:響應(yīng)式布局有兩種方法,看自己想要哪種。
方法一:百分比
用百分比去寫元素的寬度,然后讓子元素?fù)纹鸶冈氐母叨?/p>
.parent {
width: 50%;
}
.child {
width:100%;
height:100px;
}方法二:vh、vw
vw、vh是基于視口的布局方案,所以這個(gè)meta元素的視口必須聲明。(解決寬高自動(dòng)適配)
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
.box{
width:50vw;
height: 20vh;
line-height: 20vh;
font-size: 1.5rem;
background-color: yellow;
}50vw的意思是占視口寬度的一半,20vh占視口高度的20%,隨著視口的變化自適應(yīng)。
在所需頁(yè)面中選擇合適的方法,然后開始進(jìn)行下面的配置
開始配置(不使用媒體查詢)
使用postcss-px2rem----修改單位(包括第三方組件)
幫我們自動(dòng)將px單位轉(zhuǎn)換成rem單位(主要是轉(zhuǎn)換不是我們自己寫的頁(yè)面尺寸,比如elementUI中的尺寸就會(huì)改變,除了行內(nèi))
注意:UI框架部分組件使用JavaScript將css作為內(nèi)聯(lián)樣式直接寫在html標(biāo)簽內(nèi),打包適配時(shí)不會(huì)讀取相關(guān)css,所以要配置相關(guān)樣式,在style中需要" !important "進(jìn)行樣式覆蓋。
使用postcss-px2rem-exclude---修改單位(不包括第三方組件)
幫我們自動(dòng)將px單位轉(zhuǎn)換成rem單位(此插件的功能是為了排除 node_modules 中的所有第三方插件,所以第三方組件庫(kù)的樣式就不會(huì)被受到影響。比如elementUI就不會(huì)轉(zhuǎn)換單位了)
我們使用postcss-plugin-px2rem-----指定某一文件下所以css文件不進(jìn)行單位轉(zhuǎn)換(推薦)
第一步:npm下載插件
幫我們自動(dòng)將px單位轉(zhuǎn)換成rem單位(配置 是否對(duì) 某個(gè)文件夾下的所有css文件不進(jìn)行從px到rem的轉(zhuǎn)換)
npm i postcss-plugin-px2rem
第二步:配置vue.config.js
devserve:{},
css: {
loaderOptions: {
postcss: {
postcssOptions: {
plugins: [
require('postcss-plugin-px2rem')({
rootValue: 80, //換算基數(shù), 默認(rèn)100 ,這樣的話把根標(biāo)簽的字體規(guī)定為1rem為50px,這樣就可以從設(shè)計(jì)稿上量出多少個(gè)px直接在代碼中寫多上px了。
// unitPrecision: 5, //允許REM單位增長(zhǎng)到的十進(jìn)制數(shù)字。
//propWhiteList: [], //默認(rèn)值是一個(gè)空數(shù)組,這意味著禁用白名單并啟用所有屬性。
// propBlackList: [], //黑名單
exclude: /(node_module)/, //默認(rèn)false,可以(reg)利用正則表達(dá)式排除某些文件夾的方法,例如/(node_module)/ 。如果想把前端UI框架內(nèi)的px也轉(zhuǎn)換成rem,請(qǐng)把此屬性設(shè)為默認(rèn)值
// selectorBlackList: [], //要忽略并保留為px的選擇器
// ignoreIdentifier: false, //(boolean/string)忽略單個(gè)屬性的方法,啟用ignoreidentifier后,replace將自動(dòng)設(shè)置為true。
// replace: true, // (布爾值)替換包含REM的規(guī)則,而不是添加回退。
mediaQuery: false, //(布爾值)允許在媒體查詢中轉(zhuǎn)換px。
minPixelValue: 3 //設(shè)置要替換的最小像素值(3px會(huì)被轉(zhuǎn)rem)。 默認(rèn) 0
})
]
}
}
}
},第三步:屏幕自適應(yīng)
使用flexible.js+vscode的插件cssrem----屏幕自適應(yīng)大小
第一步,在src中新建util目錄下新建flexible.js(原版是分成10等分,這里我分成了24等分)
(function flexible(window, document) {
var docEl = document.documentElement
var dpr = window.devicePixelRatio || 1
// adjust body font size
function setBodyFontSize() {
if (document.body) {
document.body.style.fontSize = (12 * dpr) + 'px'
}
else {
document.addEventListener('DOMContentLoaded', setBodyFontSize)
}
}
setBodyFontSize();
// set 1rem = viewWidth / 10 原版是10等分,這里把屏幕平均劃分為24等分 1920
function setRemUnit() {
var rem = docEl.clientWidth / 24
docEl.style.fontSize = rem + 'px'
}
setRemUnit()
// reset rem unit on page resize
window.addEventListener('resize', setRemUnit)
window.addEventListener('pageshow', function (e) {
if (e.persisted) {
setRemUnit()
}
})
// detect 0.5px supports
if (dpr >= 2) {
var fakeBody = document.createElement('body')
var testElement = document.createElement('div')
testElement.style.border = '.5px solid transparent'
fakeBody.appendChild(testElement)
docEl.appendChild(fakeBody)
if (testElement.offsetHeight === 1) {
docEl.classList.add('hairlines')
}
docEl.removeChild(fakeBody)
}
}(window, document))最后,在main.js中引入文件; import '../flexible' //自適應(yīng)
第四步,再配合cssrem插件使用進(jìn)行伸縮適配
因?yàn)槭前凑?920設(shè)計(jì)稿寫的,而且我把flexible修改了24等分,所以1920/24=80,這里的基準(zhǔn)改為80。你們可以按照自己的要求來(lái)寫。


第五步 設(shè)計(jì)稿上是多少px 代碼里寫多少px 即可
.cus_tbox {
width: 100%;
height: 394px;
border: 1px solid red;
margin-bottom: 16px;
}
.cus_bbox {
width: 100%;
height: 563px;
border: 1px solid yellow;
}以上就是詳解Vue如何實(shí)現(xiàn)響應(yīng)式布局的詳細(xì)內(nèi)容,更多關(guān)于Vue響應(yīng)式布局的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element-plus按需引入后ElMessage與ElLoading在頁(yè)面中的使用
這篇文章主要介紹了element-plus按需引入后ElMessage與ElLoading在頁(yè)面中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
Vue開發(fā)項(xiàng)目中如何使用Font Awesome 5
Font Awesome是一套流行的圖標(biāo)字體庫(kù),我們?cè)趯?shí)際開發(fā)的過(guò)程中會(huì)經(jīng)常遇到需要使用圖標(biāo)的場(chǎng)景,對(duì)于一些常用的圖標(biāo),我們可以直接在Font Awesome中找到并且使用,這篇文章主要給大家介紹了關(guān)于Vue開發(fā)項(xiàng)目中如何使用Font Awesome5的相關(guān)資料,需要的朋友可以參考下2021-11-11
淺析vue 函數(shù)配置項(xiàng)watch及函數(shù) $watch 源碼分享
這篇文章主要介紹了vue 函數(shù)配置項(xiàng)watch及函數(shù) $watch 源碼分享 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
Vue多層數(shù)據(jù)結(jié)構(gòu)響應(yīng)式失效,視圖更新失敗問(wèn)題
這篇文章主要介紹了Vue多層數(shù)據(jù)結(jié)構(gòu)響應(yīng)式失效,視圖更新失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
element-ui表格合并span-method的實(shí)現(xiàn)方法
這篇文章主要介紹了element-ui表格合并span-method的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
多個(gè)vue項(xiàng)目復(fù)用一個(gè)node_modules的問(wèn)題
這篇文章主要介紹了多個(gè)vue項(xiàng)目復(fù)用一個(gè)node_modules的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
Vue引用第三方datepicker插件無(wú)法監(jiān)聽(tīng)datepicker輸入框的值的解決
這篇文章主要介紹了Vue引用第三方datepicker插件無(wú)法監(jiān)聽(tīng)datepicker輸入框的值的解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

