詳解Vue如何實現(xiàn)響應(yīng)式布局
前提準(zhǔn)備:響應(yīng)式布局有兩種方法,看自己想要哪種。
方法一:百分比
用百分比去寫元素的寬度,然后讓子元素撐起父元素的高度
.parent { width: 50%; } .child { width:100%; height:100px; }
方法二:vh、vw
vw、vh是基于視口的布局方案,所以這個meta元素的視口必須聲明。(解決寬高自動適配)
<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)。
在所需頁面中選擇合適的方法,然后開始進行下面的配置
開始配置(不使用媒體查詢)
使用postcss-px2rem----修改單位(包括第三方組件)
幫我們自動將px單位轉(zhuǎn)換成rem單位(主要是轉(zhuǎn)換不是我們自己寫的頁面尺寸,比如elementUI中的尺寸就會改變,除了行內(nèi))
注意:UI框架部分組件使用JavaScript將css作為內(nèi)聯(lián)樣式直接寫在html標(biāo)簽內(nèi),打包適配時不會讀取相關(guān)css,所以要配置相關(guān)樣式,在style中需要" !important "進行樣式覆蓋。
使用postcss-px2rem-exclude---修改單位(不包括第三方組件)
幫我們自動將px單位轉(zhuǎn)換成rem單位(此插件的功能是為了排除 node_modules 中的所有第三方插件,所以第三方組件庫的樣式就不會被受到影響。比如elementUI就不會轉(zhuǎn)換單位了)
我們使用postcss-plugin-px2rem-----指定某一文件下所以css文件不進行單位轉(zhuǎn)換(推薦)
第一步:npm下載插件
幫我們自動將px單位轉(zhuǎn)換成rem單位(配置 是否對 某個文件夾下的所有css文件不進行從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ù), 默認100 ,這樣的話把根標(biāo)簽的字體規(guī)定為1rem為50px,這樣就可以從設(shè)計稿上量出多少個px直接在代碼中寫多上px了。 // unitPrecision: 5, //允許REM單位增長到的十進制數(shù)字。 //propWhiteList: [], //默認值是一個空數(shù)組,這意味著禁用白名單并啟用所有屬性。 // propBlackList: [], //黑名單 exclude: /(node_module)/, //默認false,可以(reg)利用正則表達式排除某些文件夾的方法,例如/(node_module)/ 。如果想把前端UI框架內(nèi)的px也轉(zhuǎn)換成rem,請把此屬性設(shè)為默認值 // selectorBlackList: [], //要忽略并保留為px的選擇器 // ignoreIdentifier: false, //(boolean/string)忽略單個屬性的方法,啟用ignoreidentifier后,replace將自動設(shè)置為true。 // replace: true, // (布爾值)替換包含REM的規(guī)則,而不是添加回退。 mediaQuery: false, //(布爾值)允許在媒體查詢中轉(zhuǎn)換px。 minPixelValue: 3 //設(shè)置要替換的最小像素值(3px會被轉(zhuǎn)rem)。 默認 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插件使用進行伸縮適配
因為是按照1920設(shè)計稿寫的,而且我把flexible修改了24等分,所以1920/24=80,這里的基準(zhǔn)改為80。你們可以按照自己的要求來寫。
第五步 設(shè)計稿上是多少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如何實現(xiàn)響應(yīng)式布局的詳細內(nèi)容,更多關(guān)于Vue響應(yīng)式布局的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element-plus按需引入后ElMessage與ElLoading在頁面中的使用
這篇文章主要介紹了element-plus按需引入后ElMessage與ElLoading在頁面中的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09Vue開發(fā)項目中如何使用Font Awesome 5
Font Awesome是一套流行的圖標(biāo)字體庫,我們在實際開發(fā)的過程中會經(jīng)常遇到需要使用圖標(biāo)的場景,對于一些常用的圖標(biāo),我們可以直接在Font Awesome中找到并且使用,這篇文章主要給大家介紹了關(guān)于Vue開發(fā)項目中如何使用Font Awesome5的相關(guān)資料,需要的朋友可以參考下2021-11-11淺析vue 函數(shù)配置項watch及函數(shù) $watch 源碼分享
這篇文章主要介紹了vue 函數(shù)配置項watch及函數(shù) $watch 源碼分享 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11Vue多層數(shù)據(jù)結(jié)構(gòu)響應(yīng)式失效,視圖更新失敗問題
這篇文章主要介紹了Vue多層數(shù)據(jù)結(jié)構(gòu)響應(yīng)式失效,視圖更新失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02element-ui表格合并span-method的實現(xiàn)方法
這篇文章主要介紹了element-ui表格合并span-method的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05多個vue項目復(fù)用一個node_modules的問題
這篇文章主要介紹了多個vue項目復(fù)用一個node_modules的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09Vue引用第三方datepicker插件無法監(jiān)聽datepicker輸入框的值的解決
這篇文章主要介紹了Vue引用第三方datepicker插件無法監(jiān)聽datepicker輸入框的值的解決,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01