整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          四種實(shí)現(xiàn)頁(yè)面適配的方案(轉(zhuǎn))

          文基于掘金作者kkkkkkkkeep的文章,略作補(bǔ)充修改,文末有版權(quán)申明

          方案一:amfe-flexible+px2rem-loader

          amfe-flexible:根據(jù)設(shè)備寬度,修改根元素html的大小,以適配不同終端
          px2rem-loader:將css中的px轉(zhuǎn)為rem單位,用了它就不用自己計(jì)算rem值了

          注意:amfe-flexible是lib-flexible的優(yōu)化,主要區(qū)別是amfe-flexible不會(huì)改變視口大小

          安裝 + 配置

          1. 安裝amfe-flexible和px2rem-loader

          復(fù)制代碼npm  install -s amfe-flexible
          npm i px2rem-loader --save -dev
          

          2. 配置amfe-flexible

          復(fù)制代碼// 入口文件main.js中引入
          import 'amfe-flexible/index.js'
          
          復(fù)制代碼// 在index.html中修改meta
          <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
          

          amfe-flexible干了什么呢?

          • 給元素動(dòng)態(tài)改寫(xiě)font-size的值
          • 設(shè)置1rem = viewWidth / 10
          • 設(shè)置頁(yè)面刷新時(shí)重置rem
          • 支持0.5px

          3. 配置px2rem-loader

          復(fù)制代碼// build/utils.js
            const px2remLoader = {
              loader: 'px2rem-loader',
              options: {
                remUnit: 75 //默認(rèn)換算為1rem為75px,可根據(jù)你的原型圖修改
              }
            }
          // 在generateLoaders方法中添加px2remLoader
            function generateLoaders (loader, loaderOptions) {
              const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
              if (loader) {
                loaders.push({
                  loader: loader + '-loader',
                  options: Object.assign({}, loaderOptions, {
                    sourceMap: options.sourceMap
                  })
                })
              }
              // Extract CSS when that option is specified
              // (which is the case during production build)
              if (options.extract) {
                return ExtractTextPlugin.extract({
                  use: loaders,
                  fallback: 'vue-style-loader'
                })
              } else {
                return ['vue-style-loader'].concat(loaders)
              }
            }
          

          4. 展示效果

          • iPhoneX(屏幕寬度為375px)

          • iPhone6/7/8 plus(屏幕寬度為375px)

          • iPad(屏幕寬度為768px)

          方案二:vw實(shí)現(xiàn)移動(dòng)端適配

          插件介紹

          1. postcss-aspect-ratio-mini

          主要用來(lái)處理元素容器寬高比。

          如果我們想要做一個(gè)188:246(188是容器寬度,246是容器高度)這樣的比例容器,只需要這樣使用:

          復(fù)制代碼[w-188-246] {
            aspect-ratio: '188:246';
          }
          

          有一點(diǎn)需要特別注意:aspect-ratio屬性不能和其他屬性寫(xiě)在一起,否則編譯出來(lái)的屬性只會(huì)留下aspect-ratio的值。主要是因?yàn)樵诓寮凶隽讼鄳?yīng)的處理,不在每次調(diào)用aspect-ratio時(shí),生成前面指定的默認(rèn)樣式代碼,這樣代碼沒(méi)那么冗余。所以在使用的時(shí)候,需要分開(kāi)來(lái)寫(xiě):

          復(fù)制代碼// 編譯前
          [w-188-246] {
            width: 188px;
            background-color: red;
          }
          [w-188-246] {
            aspect-ratio: '188:246';
          }
          
          復(fù)制代碼// 編譯后
          [w-188-246] {
            width: 25.067vw;
            background-color: red;
          }
          [w-188-246]:before {
            padding-top: 130.85106382978725%;
          }
          

          2. postcss-px-to-viewport

          postcss-px-to-viewport主要用來(lái)把px單位轉(zhuǎn)換為vw、vh、vmin或者vmax這樣的視窗單位。

          目前出視覺(jué)設(shè)計(jì)稿,我們都是使用750px寬度的,那么100vw = 750px,即1vw = 7.5px。在不想要把px轉(zhuǎn)換為vw的時(shí)候,首先在對(duì)應(yīng)的元素(html)中添加配置中指定的類(lèi)名.ignore或.hairlines(.hairlines一般用于設(shè)置border-width:0.5px的元素中)

          復(fù)制代碼// 編譯前
          .test {
            border: .5px solid black;
            border-bottom-width: 4px;
            font-size: 14px;
            line-height: 20px;
            position: relative;
          }
          [w-188-246] {
            width: 188px;
          }
          
          復(fù)制代碼// 編譯后
          .test {
            border: .5px solid #000;
            border-bottom-width: .533vw;
            font-size: 1.867vw;
            line-height: 2.667vw;
            position: relative;
          }
          [w-188-246] {
            width: 25.067vw;
          }
          

          3. postcss-write-svg

          postcss-write-svg插件主要使用的是border-image和background來(lái)做1px的相關(guān)處理。

          • border-image方式:
          復(fù)制代碼// 編譯前
          @svg 1px-border {
            height: 2px;
            @rect {
              fill: var(--color, black);
              width: 100%;
              height: 50%;
            }
          }
          .example {
            border: 1px solid transparent;
            border-image: svg(1px-border param(--color #00b1ff)) 2 2 stretch;
          }
          
          復(fù)制代碼// 編譯后
          .example {
            border: 1px solid transparent;
            border-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='2px'%3E%3Crect fill='%2300b1ff' width='100%25' height='50%25'/%3E%3C/svg%3E") 2 2 stretch;
          }
          
          • background-image方式:
          復(fù)制代碼// 編譯前
          @svg square {
            @rect {
              fill: var(--color, black);
              width: 100%;
              height: 100%;
            }
          }
          
          #example {
            background: white svg(square param(--color #00b1ff));
          }
          
          復(fù)制代碼// 編譯后
          #example {
            background: white url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect fill='%2300b1ff' width='100%25' height='100%25'/%3E%3C/svg%3E");
          }
          

          4. postcss-cssnext

          主要用來(lái)讓我們使用CSS未來(lái)的特性,其會(huì)對(duì)這些特性做相關(guān)的兼容性處理。

          5. cssnano

          cssnano主要用來(lái)壓縮和清理CSS代碼。在Webpack中,cssnano和css-loader捆綁在一起,所以不需要自己加載它。不過(guò)你也可以使用postcss-loader顯式的使用cssnano。

          cssnano集成了一些其他的PostCSS插件,如果你想禁用cssnano中的某個(gè)插件的時(shí)候,可以像下面這樣操作:

          復(fù)制代碼"cssnano": {
            autoprefixer: false,
            "postcss-zindex": false
          }
          

          6. postcss-viewport-units

          postcss-viewport-units插件主要是給CSS的屬性添加content的屬性,配合viewport-units-buggyfill庫(kù)給vw、vh、vmin和vmax做適配的操作。

          安裝 + 配置

          1. 安裝PostCSS插件

          默認(rèn)PostCSS插件(通過(guò)Vue-cli構(gòu)建的項(xiàng)目默認(rèn)安裝了):

          • postcss-import:主要用來(lái)處理@import引入路徑問(wèn)題。
          • postcss-url:主要用來(lái)處理文件,比如圖片文件、字體文件等引用路徑的處理。
          • autoprefixer:主要用來(lái)處理瀏覽器前綴問(wèn)題。
          復(fù)制代碼npm i postcss-import --S
          npm i postcss-url --S   
          npm i autoprefixer --S
          

          其他PostCSS插件:

          • postcss-aspect-ratio-mini:主要用來(lái)處理元素容器寬高比。
          • postcss-px-to-viewport:主要用來(lái)把px單位轉(zhuǎn)換為vw、vh、vmin或者vmax這樣的視窗單位。
          • postcss-write-svg:主要使用的是border-image和background來(lái)做1px的相關(guān)處理。
          • postcss-cssnext:主要用來(lái)讓我們使用CSS未來(lái)的特性,其會(huì)對(duì)這些特性做相關(guān)的兼容性處理。
          • cssnano:主要用來(lái)壓縮和清理CSS代碼。
          • postcss-viewport-units:主要用來(lái)給CSS的屬性添加content的屬性,配合viewport-units-buggyfill庫(kù)給vw、vh、vmin和vmax做適配的操作。
          復(fù)制代碼npm i postcss-aspect-ratio-mini --S
          npm i postcss-px-to-viewport --S   
          npm i postcss-write-svg --S   
          npm i postcss-cssnext --S   
          npm i postcss-viewport-units --S   
          npm i cssnano --S
          

          2. 配置PostCSS插件

          復(fù)制代碼// 根目錄下的.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,      // 視窗的寬度,對(duì)應(yīng)的是我們?cè)O(shè)計(jì)稿的寬度,一般是750
                viewportHeight: 1334,    // 視窗的高度,根據(jù)750設(shè)備的寬度來(lái)指定,一般指定1334,也可以不配置
                unitPrecision: 3,        // 指定`px`轉(zhuǎn)換為視窗單位值的小數(shù)位數(shù)(很多時(shí)候無(wú)法整除)
                viewportUnit: 'vw',      // 指定需要轉(zhuǎn)換成的視窗單位,建議使用vw
                selectorBlackList: ['.ignore', '.hairlines'],  // 指定不轉(zhuǎn)換為視窗單位的類(lèi),可以自定義,可以無(wú)限添加,建議定義一至兩個(gè)通用的類(lèi)名
                minPixelValue: 1,       // 小于或等于`1px`不轉(zhuǎn)換為視窗單位,你也可以設(shè)置為你想要的值
                mediaQuery: false       // 允許在媒體查詢中轉(zhuǎn)換`px`
              } 
              "postcss-viewport-units":{},
              "cssnano": {
                "cssnano-preset-advanced": {
                  zindex: false,
                  autoprefixer: false
                },
              }
            }
          }
          
          復(fù)制代碼// 在index.html中修改meta
          <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
          

          什么情況下適合使用vw呢?

          • 容器適配,可以使用vw
          • 文本的適配,可以使用vw
          • 大于1px的邊框、圓角、陰影都可以使用vw
          • 內(nèi)距和外距,可以使用vw

          3. 展示效果

          • iPhoneX(屏幕寬度為375px)

          • iPhone6/7/8 plus(屏幕寬度為375px)

          • iPad(屏幕寬度為768px)

          方案三:rem + vw (結(jié)合方案一和方案二)

          方案四:postcss-mobile-forever

          https://github.com/wswmsword/postcss-mobile-forever

          一款 PostCSS 插件,用于將固定尺寸的移動(dòng)端視圖轉(zhuǎn)為具有最大寬度的可伸縮的移動(dòng)端視圖。該插件可以轉(zhuǎn)換視口單位(px->vw)、限制視圖最大寬度(min(vw, px))、生成適應(yīng)桌面端和橫屏的媒體查詢(@media)。

          如果您在使用 postcss-px-to-viewport(后簡(jiǎn)稱(chēng) px2vw) 實(shí)現(xiàn)伸縮界面的時(shí)候,不希望界面在大屏設(shè)備上撐滿整個(gè)屏幕而難以瀏覽,希望界面在達(dá)到某一個(gè)合適的寬度后停止伸縮(限制最大寬度),您可以使用本插件。

          您可以在線查看一個(gè)范例,通過(guò)旋轉(zhuǎn)屏幕、改變窗口大小、在不同屏幕查看展示效果。范例頂部的文字會(huì)提示您,當(dāng)前的視圖是移動(dòng)端豎屏(Portrait)、移動(dòng)端橫屏(Landscape)還是桌面端(Desktop)。


          參考文檔

          • 使用 Flexible 實(shí)現(xiàn)手淘 H5 頁(yè)面的終端適配 - 掘金
          • 如何在Vue項(xiàng)目中使用vw實(shí)現(xiàn)移動(dòng)端適配 - 掘金
          • vue移動(dòng)端h5適配解決方案(rem or vw) - 掘金

          作者:kkkkkkkkeep
          鏈接:https://juejin.cn/post/6844903917126434829
          來(lái)源:稀土掘金
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

          、發(fā)送請(qǐng)求

          使用Requests發(fā)送網(wǎng)絡(luò)請(qǐng)求非常簡(jiǎn)單:

          # 導(dǎo)入requests模塊,若未安裝需要先安裝(如: pip install requests)
          import requests
          #
          # GET請(qǐng)求
          r = requests.get('https://api.github.com/events')
          #
          # POST請(qǐng)求
          r = requests.post('http://httpbin.org/post', data={'key': 'value'})
          #
          # DELETE請(qǐng)求
          r = requests.delete('http://httpbin.org/delete')
          #
          # HEAD請(qǐng)求
          r = requests.head('http://httpbin.org/get')
          #
          # OPTION請(qǐng)求
          r = requests.options('http://httpbin.org/get')
          

          二、傳遞URL參數(shù)

          Requests允許使用params關(guān)鍵字參數(shù),以一個(gè)字符串字典來(lái)為URL提供參數(shù):

          # 將參數(shù)以字典形式傳遞給params
          payload = {'key1': 'value1', 'key2': 'value2'}
          r = requests.get('http://httpbin.org/get', params=payload)
          print(r.url)
          #
          # 還可以將一個(gè)列表作為值傳入
          payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
          r = requests.get('http://httpbin.org/get', params=payload)
          print(r.url)
          

          三、響應(yīng)內(nèi)容

          我們能讀取服務(wù)器響應(yīng)的內(nèi)容:

          import requests
          r = requests.get('https://api.github.com/events')
          #
          # 使用r.text時(shí),requests會(huì)自動(dòng)檢測(cè)文本編碼并將內(nèi)容打印出來(lái)
          print(r.text)
          #
          # 我們可以通過(guò)修改r.encoding來(lái)修改編碼方式
          print(r.encoding) # 'utf-8'非常常見(jiàn)
          r.encoding = 'ISO-8859-1'
          #
          # 有些HTML、XML頁(yè)面指定了不同的編碼,我們可以通過(guò)r.content來(lái)找到編碼,然后設(shè)置r.encoding為響應(yīng)的編碼,這樣既可正確解析r.text。
          

          四、二進(jìn)制響應(yīng)內(nèi)容

          對(duì)于非文本請(qǐng)求,我們也能以字節(jié)的方式訪問(wèn)請(qǐng)求響應(yīng)體:

          print(r.content)
          #
          # Requests會(huì)自動(dòng)解碼gzip、deflate傳輸編碼的響應(yīng)數(shù)據(jù)
          # 例如,以請(qǐng)求返回的二進(jìn)制數(shù)據(jù)創(chuàng)建一張圖片:
          from PIL import Image
          from io import BytesIO
          i = Image.open(BytesIO(r.content))
          

          五、JSON響應(yīng)內(nèi)容

          Requests中有一個(gè)內(nèi)置的JSON解碼器,可以幫助我們處理JSON數(shù)據(jù)

          import requests
          r = requests.get('https://api.github.com/events')
          #
          # 使用r.json()來(lái)解析json格式的數(shù)據(jù),若解析失敗,會(huì)拋出一個(gè)異常。
          print(r.json())
          #
          # r.json()調(diào)用成功并不意味著響應(yīng)成功,檢查請(qǐng)求是否成功可以使用如下兩個(gè)方式:
          print(r.raise_for_status())
          print(r.status_code)
          

          六、原始響應(yīng)內(nèi)容

          在罕見(jiàn)的情況下,我們可能想獲取來(lái)自服務(wù)器的原始套接字響應(yīng):

          r = requests.get('https://api.github.com/events', stream=True)
          print(r.raw)
          print(r.raw.read(10))
          #
          # 但一般情況下,我們應(yīng)該先將文本流保存到文件
          with open(filename, 'wb') as writer:
           for chunk in r.iter_content(chunk_size):
           writer.write(chunk)
          

          七、定制請(qǐng)求頭

          如果想為請(qǐng)求添加HTTP頭部,只要簡(jiǎn)單地傳遞一個(gè)dict給headers參數(shù)即可:

          url = 'https://api.github.com/some/endpoint'
          headers = {'user-agent': 'my-app/0.0.1'}
          r = requests.get(url, headers=headers)
          #
          # 定制header的優(yōu)先級(jí)低于某些特定的信息源,如:
          # 1. 如果在.netrc中設(shè)置了用戶認(rèn)證信息,使用headers=設(shè)置的授權(quán)就不會(huì)生效,而如果設(shè)置了auth=參數(shù),.netrc的設(shè)置就無(wú)效了。
          # 2. 如果被重定向到別的主機(jī),授權(quán)header就回被刪除
          # 3. 代理授權(quán)header會(huì)被URL中提供的代理身份覆蓋掉
          # 4. 在我們能判斷內(nèi)容長(zhǎng)度的情況下,header的Content-Length會(huì)被改寫(xiě)。
          

          八、更復(fù)雜的POST請(qǐng)求

          通常,你想要發(fā)送一些編碼為表單形式的數(shù)據(jù)--非常像一個(gè)HTML表單,要實(shí)現(xiàn)這個(gè),只需要簡(jiǎn)單傳遞一個(gè)字典給data參數(shù),它會(huì)自動(dòng)編碼:

          payload = {'key1': 'value1', 'key2': 'value2'}
          r = requests.post('http://httpbin.org/post', data=payload)
          print(r.text)
          #
          # data參數(shù)還接受元組的形式
          payload = (('key1', 'value1'), ('key2', 'value2'))
          r = requests.post('http://httpbin.org/post', data=payload)
          print(r.text)
          #
          # 很多時(shí)候我們想要發(fā)送的數(shù)據(jù)并非編碼為表單形式的,比如我們就是要傳遞string而不是按照dict解析,那么數(shù)據(jù)將會(huì)被直接發(fā)布出去
          import json
          url = 'https://api.github.com/some/endpoint'
          payload = {'some': 'data'}
          r = requests.post(url, data=json.dumps(payload))
          #
          # 除了自行對(duì)dict編碼,還可以使用json參數(shù)直接傳遞:
          r = requests.post(url, json=payload)
          

          九、POST一個(gè)多部分編碼(Multipart-Encoded)的文件

          # 如:上傳xls文件
          url = 'http://httpbin.org/post'
          files = {'file': open('report.xls', 'rb')}
          r = requests.post(url, files=files)
          print(r.text)
          #
          # 我們可以顯式地設(shè)置文件名、文件類(lèi)型和請(qǐng)求頭:
          url = 'http://httpbin.org/post'
          files = {'file': ('report.xls', open('report.xls', 'rb'), \
           'application/vnd.ms-excel', {'Expires': '0'})}
          r = requests.post(url, files=files)
          print(r.text)
          #
          # 我們也可以發(fā)送作為文件來(lái)接收的字符串
          url = 'http://httpbin.org/post'
          files = {'file': ('report.csv', 'some,data,to,send\nanather,row,to,send\n')}
          r = requests.post(url, files=files)
          print(r.text)
          

          十、響應(yīng)狀態(tài)碼

          r = requests.get('http://httpbin.org/get')
          print(r.status_code)
          #
          # 為方便引用,Requests還附帶了一個(gè)內(nèi)置的狀態(tài)碼查詢對(duì)象
          print(r.status_code == requests.codes.ok)
          #
          # 如果發(fā)送了一個(gè)錯(cuò)誤請(qǐng)求(比如一個(gè)4XX客戶端錯(cuò)誤,或者5XX服務(wù)器錯(cuò)誤響應(yīng)),我們可以通過(guò)Response.raise_for_status()來(lái)拋出異常:
          bad_r = requests.get('http://httpbin.org/status/404')
          print(bad_r.status_code)
          bad_r.raise_for_status()
          

          十一、響應(yīng)頭

          # 我們可以查看以字典形式展示的服務(wù)器響應(yīng)頭
          print(r.headers)
          #
          # eg.1 一個(gè)響應(yīng)頭
          {
           'content-encoding': 'gzip',
           'transfer-encoding': 'chunked',
           'connection': 'close',
           'server': 'nginx/1.0.4',
           'x-runtime': '148ms',
           'etag': '"e1ca502697e5c9317743dc078f67693f"',
           'content-type': 'application/json'
          }
          #
          # HTTP頭部是大小寫(xiě)不敏感的,因此如下都是可以的:
          print(r.headers['Content-Type'])
          print(r.headers.get('content-type')
          

          十二、Cookie

          # 通過(guò).cookies可以訪問(wèn)響應(yīng)所包含的cookie
          url = 'http://example.com/some/cookie/setting/url'
          r = requests.get(url)
          print(r.cookies['example_cookie_name'])
          #
          # 要發(fā)送cookies到服務(wù)器,可以使用cookies參數(shù):
          url = 'http://httpbin.org/cookies'
          cookies = dict(cookies_are='working')
          r = requests.get(url, cookies=cookies)
          print(r.text)
          #
          # Cookie的返回對(duì)象是RequestsCookieJar,它的行為和字典類(lèi)似,但接口更完整,適合跨域名和跨路徑使用,我們還可以把Cookie Jar傳到Requests中:
          jar = requests.cookies.RequestsokieJar()
          jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
          jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
          url = 'http://httpbin.org/cookies'
          r = requests.get(url, cookies=jar)
          print(r.text)
          

          十三、重定向與請(qǐng)求歷史

          默認(rèn)情況下,除了HEAD,Requests會(huì)自動(dòng)處理所有重定向。

          可以使用響應(yīng)對(duì)象的history方法來(lái)追蹤重定向,Response.history是一個(gè)Response對(duì)象的列表,這個(gè)對(duì)象列表按照從最老到最近的請(qǐng)求進(jìn)行排序。

          r = requests.get('http://github.com')
          print(r.url)
          print(r.status_code)
          print(r.history)
          #
          # 如果使用的是GET、OPTIONS、POST、PUT、PATCH或者DELETE,那么我們可以通過(guò)allow_redirects參數(shù)禁用重定向處理:
          r = requests.get('http://github.com', allow_redirects=False)
          print(r.status_code)
          print(r.history)
          #
          # 如果使用了HEAD,我們也可以啟用重定向:
          r = requests.head('http://github.com', allow_redirects=True)
          print(r.url)
          print(r.history)
          

          十四、超時(shí)

          timeout參數(shù)用于設(shè)置等待響應(yīng)的最長(zhǎng)時(shí)間,即requests會(huì)在等待該時(shí)間之后停止等待響應(yīng)。若不設(shè)置該參數(shù),程序可能會(huì)永遠(yuǎn)失去響應(yīng):

          requests.get('http://github.com', timeout=0.001)
          

          十五、錯(cuò)誤與異常

          • 遇到網(wǎng)絡(luò)問(wèn)題時(shí),Requests會(huì)拋出一個(gè)ConnectionError異常
          • 如果HTTP請(qǐng)求返回了不成功的狀態(tài)碼,Response.raise_for_status()會(huì)拋出一個(gè)HTTPError異常
          • 若請(qǐng)求超時(shí),則拋出Timeout異常
          • 若請(qǐng)求超過(guò)了設(shè)定的最大重定向次數(shù),則拋出TooManyRedirects異常
          • 所有Requests顯式拋出的異常都繼承自requests.exceptions.RequestException

          一步:

          安裝postcss-px2rem、px2rem-loader

          打開(kāi)命令行工具,輸入以下指令安裝插件

          npm install postcss-px2rem px2rem-loader --save

          安裝完后package.json文件會(huì)多如圖兩個(gè)插件

          第二步:

          在根目錄src中新建utils目錄下新建rem.js等比適配文件

          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()
          }

          第三步:

          在main.js中引入適配文件

          import './utils/rem'

          第四步:

          vue.config.js文件中配置插件


          主站蜘蛛池模板: 在线成人综合色一区| 精品亚洲AV无码一区二区三区| 亚洲国产成人一区二区精品区| 精品久久久久中文字幕一区| 亚洲一区二区三区免费在线观看| 一区二区三区中文字幕| 午夜福利无码一区二区| 曰韩人妻无码一区二区三区综合部 | 日本大香伊一区二区三区| 老湿机一区午夜精品免费福利| 台湾无码AV一区二区三区| 日韩免费视频一区二区| 亚州日本乱码一区二区三区| 欧美日韩一区二区成人午夜电影| 无码aⅴ精品一区二区三区 | 天堂va视频一区二区| 国产品无码一区二区三区在线| 日韩av无码一区二区三区| 国产福利一区二区三区在线观看| 中文字幕日本精品一区二区三区| 福利视频一区二区牛牛 | 亚洲一区二区影院| 亚洲AV日韩综合一区尤物| 中文字幕在线看视频一区二区三区| 国产精久久一区二区三区 | 无码喷水一区二区浪潮AV| 日本一区二区三区免费高清| 在线观看国产一区二区三区| 国产品无码一区二区三区在线蜜桃| 97精品国产福利一区二区三区| 日韩视频在线一区| 一区二区三区在线播放视频| 日韩一区二区在线观看视频| 免费无码一区二区三区蜜桃| 精品一区二区AV天堂| 亚洲熟妇AV一区二区三区宅男| 亚洲美女一区二区三区| jazzjazz国产精品一区二区| 无码一区18禁3D| 亚洲日韩AV一区二区三区四区| 久久国产一区二区|