<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        解決vue移動端適配問題

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:02:42
        文檔

        解決vue移動端適配問題

        解決vue移動端適配問題:1,先看看網(wǎng)上關(guān)于移動端適配講解 再聊移動端頁面適配,rem和vw適配方案! 基礎(chǔ)點(diǎn):rem相對根節(jié)點(diǎn)字體的大小。所以不用px; 根字體:字體的大小px; px:你就當(dāng)成cm(厘米)這樣的東西吧; 基準(zhǔn):750設(shè)計(jì)稿; 這是方案的基礎(chǔ)理論,在這個(gè)基礎(chǔ)上,我們還要搞明白
        推薦度:
        導(dǎo)讀解決vue移動端適配問題:1,先看看網(wǎng)上關(guān)于移動端適配講解 再聊移動端頁面適配,rem和vw適配方案! 基礎(chǔ)點(diǎn):rem相對根節(jié)點(diǎn)字體的大小。所以不用px; 根字體:字體的大小px; px:你就當(dāng)成cm(厘米)這樣的東西吧; 基準(zhǔn):750設(shè)計(jì)稿; 這是方案的基礎(chǔ)理論,在這個(gè)基礎(chǔ)上,我們還要搞明白

        1,先看看網(wǎng)上關(guān)于移動端適配講解

        再聊移動端頁面適配,rem和vw適配方案!

        基礎(chǔ)點(diǎn):rem相對根節(jié)點(diǎn)字體的大小。所以不用px;

        根字體:字體的大小px;

        px:你就當(dāng)成cm(厘米)這樣的東西吧;

        基準(zhǔn):750設(shè)計(jì)稿;

        這是方案的基礎(chǔ)理論,在這個(gè)基礎(chǔ)上,我們還要搞明白,到底要干一件什么事情!

        目標(biāo)一、手機(jī)適配:就是頁面上的尺寸,無論高度,還是寬度,還有字體,隨屏幕的寬度變化!這里是屏幕寬度!是不是想到了vw,對,就是這個(gè)意思;——最大程度在各個(gè)尺寸屏幕上還原設(shè)計(jì)稿

        目標(biāo)二、px轉(zhuǎn)換成rem:一般UI給的設(shè)計(jì)稿寬度大小是750,所以,我們想直接寫上面UI標(biāo)記的尺寸;——最大程度減少工作

        為什么選擇rem?

        很久之前沒有vw,怕vw的兼容問題,就用了rem;也就是:rem的兼容性>vw的兼容性;

        還有一種就是自己寫百分比很不優(yōu)雅

        一、理論基礎(chǔ)!

        實(shí)現(xiàn)目標(biāo)一

        用rem就可以了吧!因?yàn)閞em就可以隨根字體大小改變而改變,從而實(shí)現(xiàn)了自適應(yīng)的功能。

        但是,但是,重點(diǎn)來,如果,根字體的大小默認(rèn)是16px;那么,我們的1rem;就永遠(yuǎn)是16px,懂么?也就是如果設(shè)計(jì)稿是750(放大了一倍,iphone是375pt),我們想要個(gè)50%的大小:

        50%*357px/16=11.718rem

        如果我們寫一個(gè)11.718rem的寬度,然而這只能在能iphone6還原設(shè)計(jì)稿,也就是只有在iphone6上這樣的寬度才剛好占一半;

        那么問題來了,如果在每個(gè)屏幕上都是50%呢,直接改變根字體大?。?6px)不就完了么?。?;11.718rem永遠(yuǎn)還是那個(gè)11.718rem,不用擔(dān)心;

        實(shí)現(xiàn)目標(biāo)二、

        用工具,webpack,postcss,postcss-pxtorem

        二、準(zhǔn)備主要工具!

        viewport: 建議自行百度;

        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

        vue-cli: 用這個(gè)主要是用webpack,這個(gè)構(gòu)建工具大大降低了webpack的使用難度;快速構(gòu)建出一個(gè)前端項(xiàng)目。

        postcss: 官網(wǎng)解釋:PostCSS is a tool for transforming styles with JS plugins,就是postcss用js插件幫你轉(zhuǎn)換css樣式的一個(gè)工具。比如,這里的把你的文件里面16px替換成1rem(根大小默認(rèn)16px的情況);這樣你就不用自己去算了!

        postcss-pxtorem: postcss的一個(gè)插件,主要是幫你把px轉(zhuǎn)換成對應(yīng)的rem;

        然后:還要用js代碼去動態(tài)算根目錄應(yīng)該有的字體大小,反正就是一段js代碼去動態(tài)獲取屏幕寬度!

        三、rem——開始干!

        第一步,先用vue-cli快速構(gòu)建出一個(gè)項(xiàng)目,然后,安裝postcss,postcss-pxtorem,postcss-loader,postcss-import,postcss-url;

        第二步,在項(xiàng)目根目錄下添加.postcssrc.js文件,在里面寫上

        module.exports = {
         plugins: { 'postcss-pxtorem':
        	 { rootValue: 32, propList: ['*'], minPixelValue: 2 }
        	 }
        	 };

        rootValue,這里就是根目錄的字體大小是32px,這里為啥設(shè)置成32呢,因?yàn)橐话阍O(shè)計(jì)稿是750,比iphone6的大一倍,所以設(shè)置成16的兩倍,就是32px;proplist就是那些屬性需要轉(zhuǎn)換成rem,這里是全部的意思;

        比如你可選擇設(shè)置; propList: ['font', 'font-size', 'line-height', 'letter-spacing']

        minPixelValue就是最小轉(zhuǎn)換單位,這是最小轉(zhuǎn)換單位是2px的意思;

        第三步,動態(tài)設(shè)置根字體大??!一段簡單的js插入在head里面;

        (function() {
         function autoRootFontSize() {
         document.documentElement.style.fontSize =Math.min(screen.width,document.documentElement.getBoundingClientRect().width) / 750 * 32 + 'px';
         // 取screen.width和document.documentElement.getBoundingClientRect().width的最小值;除以750,乘以32;懂的起撒,就是原本是750大小的32px;如果屏幕大小變成了375px,那么字體就是16px;也就是根字體fontSize大小和屏幕大小成正比變化!是不是很簡單
         }
         window.addEventListener('resize', autoRootFontSize);
         autoRootFontSize();
        })();

        這里,我想說的是完全可以用vw去設(shè)置根字體大小,26px/375px=4.267vw;就不用js去算了!

        html{font-size:4.267vw}; //因?yàn)檫@個(gè)字體大小完全是隨屏幕正比變化;

        四、vw——開始干!

        vw的方案就簡單多了,因?yàn)関w本來就相對屏幕的百分比,所以我們不用再去動態(tài)的改變根字體大小了,只需要把750上的px大小轉(zhuǎn)換成對應(yīng)的vw值就完了,這一步交給postcss工具就可以!

        所以只需要兩步!

        第一步,先用vue-cli快速構(gòu)建出一個(gè)項(xiàng)目,然后,安裝postcss,postcss-pxtorem,postcss-loader,postcss-import,postcss-url

        第二步,在項(xiàng)目根目錄下添加.postcssrc.js文件,在里面寫上

        module.exports = {
         "plugins": {
         "postcss-import": {},
         "postcss-url": {},
         "postcss-aspect-ratio-mini": {},
         "postcss-write-svg": {
         utf8: false
         },
         "postcss-cssnext": {},
         "postcss-px-to-viewport": {
         viewportWidth: 750,
         unitPrecision: 3,
         viewportUnit: 'vw',
         selectorBlackList: ['.ignore', '.hairlines'],
         minPixelValue: 1,
         mediaQuery: false
         },
         "postcss-viewport-units": {},
         }
        }

        viewportWidth是你設(shè)計(jì)稿的大小750,然后unitPrecision是vw值保留的小數(shù)點(diǎn)個(gè)數(shù);

        五、總結(jié)!

        首先明白一件事:px就像cm一樣,1px永遠(yuǎn)是1px;1cm永遠(yuǎn)是1cm;

        那么我們從目標(biāo)再反推一道邏輯:

        我們想要的結(jié)果很簡單: 一個(gè)元素的寬度(px) / 屏幕寬度(px) = 定值 (這個(gè)定值就是設(shè)計(jì)稿上面的值比例定值);

        ——所以要做就是:屏幕變寬,要讓元素寬度就變寬。

        然鵝,我們寫的代碼里面的px是不可能變的(取的750設(shè)計(jì)稿上面的尺寸);那么postcss編譯出來的rem值也是不變的;

        我們是怎么把設(shè)計(jì)稿里面的40px換算成相應(yīng)rem的呢;你只要記住根字體大小的值(瀏覽器的默認(rèn)是16px,現(xiàn)在設(shè)置成的32px)就是1rem;這交給工具同一去算;

        得到:元素的寬度(px) = 元素的寬度(rem) :heavy_multiplication_x:32; 所以這個(gè)32是你必須要設(shè)置在postcss-pxtorem里面的;這樣它就可以幫你算;

        又因?yàn)椋?元素的寬度(rem) :heavy_multiplication_x: 根字體大小(px) = 元素的寬度(px)

        元素的寬度(px) 變大, 元素的寬度(rem) 不變,那就只有改變根字體大?。╬x) ,變大;具體怎么變,上面的js代碼已經(jīng)解釋了;

        ——所以我們做的就是:屏幕變寬,讓根字體大?。╬x) 變寬,元素寬度就變寬。

        750屏幕下是寫的樣式大小是1:1, 所以

        又因?yàn)槲覀兿胍焊煮w大?。╬x) / 屏幕寬度(px) = 32 / 750

        所以: 根字體大?。╬x) = 32 / 750 :heavy_multiplication_x: 屏幕寬度(px)

        一個(gè)元素的寬度(px) / 屏幕寬度(px) = 定值

        → 根字體大?。╬x) :heavy_multiplication_x:元素的寬度(rem)/ 屏幕寬度(px)

        → 32 / 750 :heavy_multiplication_x: 屏幕寬度(px) :heavy_multiplication_x:元素的寬度(rem)/ 屏幕寬度(px) 等于什么??

        得到的的是一個(gè)與屏幕大小無關(guān)的定值!

        化簡: 元素的寬度(rem):heavy_multiplication_x:32 / 750 = 元素的寬度(px) / 750 ——不就是設(shè)計(jì)稿上面的比例么?。?!

        驗(yàn)證以上操作出來的結(jié)果是否符合預(yù)期也很簡單:

        比如一個(gè)img的寬,高,在iphone6上的尺寸(審查元素的大??!px單位):

        根字體:16px; postcss算出來的rem值是2.5rem; 2.5

        16=40px; 實(shí)際上也是40px;

        ——得到元素實(shí)際大小 40:heavy_multiplication_x:40(px), 屏寬是375;比例是40/375=0.10667;

        在iphone5上的尺寸(審查元素的大?。x單位):

        13.6533=34.13px; 實(shí)際上也是34.13px;

        ——得到元素實(shí)際大小 34.13:heavy_multiplication_x:34.13(px), 屏寬是320;比例是34.13/320=0.10665;

        2,自己項(xiàng)目適配配置(實(shí)踐)

        上的文章講的理論和方法是可行的,自己項(xiàng)目的解決方案和他大同小異(主要用rem):

        1,插件:amfe-flexible + postcss-px2rem

        amfe-flexible:自動根據(jù)不同設(shè)備改變data-dpr的值,這樣就可以根據(jù)不同的data-dpr設(shè)置字體大小不變,僅放大相應(yīng)倍數(shù)。

        postcss-px2rem:打包的時(shí)候把項(xiàng)目里面的px統(tǒng)一轉(zhuǎn)換成rem,轉(zhuǎn)換的基準(zhǔn)值根據(jù)配置設(shè)置的(.postcssrc.js)

        / 因?yàn)槲沂且?50px(iphone6)寬度為基準(zhǔn),所以remUnit為37.5 /

        經(jīng)過試驗(yàn)結(jié)果:

        postcss-px2rem:只負(fù)責(zé)把項(xiàng)目里面的px按照基準(zhǔn)值轉(zhuǎn)換成rem,并不負(fù)責(zé)根節(jié)點(diǎn)動態(tài)font-size的計(jì)算。

        例如,代碼里面有個(gè)高度固定:180px, 基準(zhǔn)值是:37.5, 那最后界面上的rem=180/37.5=4.8rem

        不管換不同客戶端手機(jī),不同分辨率,界面上都是固定4.8rem【rem的值是固定的,根據(jù)根節(jié)點(diǎn)的font-size不同,在界面顯示的px也不同】,界面上顯示的px = 16(沒有設(shè)置font-size的話默認(rèn)是16px)* 4.8rem = 76.8px

         

        【那么這個(gè)基準(zhǔn)值:37.5怎么來的:

        rem基準(zhǔn)值計(jì)算

        關(guān)于rem的基準(zhǔn)值,也就是上面那個(gè)37.5px其實(shí)是根據(jù)我們所拿到的視覺稿來決定的,主要有以下幾點(diǎn)原因:

        1.由于我們所寫出的頁面是要在不同的屏幕大小設(shè)備上運(yùn)行的,所以我們在寫樣式的時(shí)候必須要先以一個(gè)確定的屏幕來作為參考,這個(gè)就由我們拿到的視覺稿來定;假如我們拿到的視覺稿是以iphone6的屏幕width=375px為基準(zhǔn):

        var docEl = document.documentElement;
        var width = docEl.getBoundingClientRect().width;
        var rem = width / 10;
        

        這樣計(jì)算出來的rem基準(zhǔn)值就是37.5(iphone6的視覺稿),這里為什么要除以10呢,其實(shí)這個(gè)值是隨便定義的,因?yàn)椴幌胱宧tml的font-size太大,當(dāng)然也可以選擇不除,只要在后面動態(tài)js計(jì)算時(shí)保證一樣的值就可以

        上面的組件只負(fù)責(zé)轉(zhuǎn)換rem,并沒有根據(jù)不同設(shè)備設(shè)置font-size,下面再加入這個(gè)組件amfe-flexible:

        不同設(shè)備下的font-size不同。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        解決vue移動端適配問題

        解決vue移動端適配問題:1,先看看網(wǎng)上關(guān)于移動端適配講解 再聊移動端頁面適配,rem和vw適配方案! 基礎(chǔ)點(diǎn):rem相對根節(jié)點(diǎn)字體的大小。所以不用px; 根字體:字體的大小px; px:你就當(dāng)成cm(厘米)這樣的東西吧; 基準(zhǔn):750設(shè)計(jì)稿; 這是方案的基礎(chǔ)理論,在這個(gè)基礎(chǔ)上,我們還要搞明白
        推薦度:
        標(biāo)簽: VUE 解決 適配
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 黄页网站在线免费观看| 亚洲国产欧美一区二区三区| 亚洲免费视频一区二区三区| 免费在线观看理论片| 免费很黄无遮挡的视频毛片| 亚洲AV成人精品日韩一区18p| 黄色毛片免费在线观看| gogo全球高清大胆亚洲| 免费国产草莓视频在线观看黄| 无码欧精品亚洲日韩一区夜夜嗨 | www.亚洲成在线| 91成年人免费视频| 亚洲AV日韩综合一区尤物| 永久免费视频v片www| 人成免费在线视频| 亚洲AV午夜成人影院老师机影院| 91福利免费视频| 国产成人精品日本亚洲11| 国产又长又粗又爽免费视频| 黄色a级免费网站| 亚洲国产精彩中文乱码AV| 我们的2018在线观看免费高清| 亚洲精品一二三区| 亚洲国产精品自在拍在线播放| 伊人免费在线观看| 亚洲成人动漫在线观看| 日本免费人成视频播放| 一级全免费视频播放| 亚洲视频在线不卡| 永久免费视频v片www| 国产一级一毛免费黄片| 亚洲国产成人久久综合一区| 热久久精品免费视频| 中文字幕乱码一区二区免费| 亚洲国产精品日韩在线| 亚洲A∨精品一区二区三区| 一级毛片免费观看| 久久精品国产亚洲av瑜伽| 国产l精品国产亚洲区在线观看| 国产人在线成免费视频| 国产免费内射又粗又爽密桃视频|