移動(dòng)端適配

這篇文件是以應(yīng)用的角度介紹如何使用vue(使用vue-cli創(chuàng)建項(xiàng)目)來(lái)設(shè)置響應(yīng)式布局,讓我們能更便捷使用px去開(kāi)發(fā)還原設(shè)計(jì)圖,不必考慮過(guò)多的單位轉(zhuǎn)換計(jì)算、適配等問(wèn)題

設(shè)置viewport

設(shè)置布局窗口和視覺(jué)窗口一致,縮放比例都設(shè)為1,并且不允許縮放

  • width=device-width: 表示讓 布局視口 的寬度等于設(shè)備寬度
  • initial-scale=1.0: 表示頁(yè)面的初始縮放比例為1,讓 視覺(jué)視口 等于 理想視口
  • maximum-scale=1.0,minimum-scale=1.0:表示頁(yè)面的最大/最小縮放比為1
  • user-scalable=no 表示不允許用戶對(duì)頁(yè)面進(jìn)行縮放操作
<meta name="viewport" 
  content="width=device-width,
  initial-scale=1.0,
  minimum-scale=1.0,
  maximum-scale=1.0,
  user-scalable=no">

移動(dòng)端布局

這里采用的方案是將px轉(zhuǎn)換成rem,在實(shí)戰(zhàn)中,我們要學(xué)會(huì)使用工具來(lái)幫助快速開(kāi)發(fā),這里主要用兩個(gè)插件amfe-flexiblepostcss-pxtorem

  • amfe-flexible:配置可伸縮布局方案,主要是將1rem設(shè)為viewWidth/10
  • postcss-pxtorem:postcss-pxtorempostcss的插件,用于將像素單元生成rem單位。
  1. 在設(shè)置布局前,需要引入 reset.css 文件,用來(lái)消除不同設(shè)備的瀏覽器之間的差異
// main.js
import './assets/resset.css'
  1. 安裝postcss-pxtoremamfe-flexible
    npm install postcss-pxtorem amfe-flexible -D

  2. main.js中引入amfe-flexible

// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
// 引入 amfe-flexible
import 'amfe-flexible/index'
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

  1. vue.config.js文件(如果沒(méi)有,需要自己項(xiàng)目根目錄手動(dòng)創(chuàng)建)中對(duì)postcss-pxtorem配置
    pxtorem的配置項(xiàng)主要是設(shè)置rootValue,也就是根元素字體大小,一般這個(gè)值是根據(jù)設(shè)計(jì)稿來(lái)設(shè)置的,rootValue = 設(shè)計(jì)稿寬度/10,設(shè)計(jì)稿一般是375px750px寬度來(lái)設(shè)計(jì)的
const autoprefixer = require('autoprefixer')
const pxtorem = require('postcss-pxtorem')

module.exports = {
  css: {
    loaderOptions: {
      postcss: {
        plugins: [
          // 這是用來(lái)自動(dòng)添加兼容各瀏覽器的css前綴的,比如--webkit-xxx等
          autoprefixer(),
          // 這是px轉(zhuǎn)換成rem的插件,參數(shù)是一些配置,主要是設(shè)置rootValue
          pxtorem({
            rootValue: 37.5, // 根元素的font-size,這里是針對(duì)375的設(shè)計(jì)稿
            unitPrecision: 5, // 轉(zhuǎn)換成rem后保留的小精準(zhǔn)度
            propList: ['*'], // 作用于哪些屬性
            selectorBlackList: ['vant-'], // 將哪些html元素排除在外,這里添加的是vant
            replace: true,
            mediaQuery: true,
            minPixelValue: 0,
            exclude: /node_modules/
          })
        ]
      }
    }
  }
}
  1. 寫個(gè)測(cè)試demo
<template>
  <div class="content">test h5 layout</div>
</template>

<style>
.content {
  width: 375px;
  background: #eee;
  font-size: 16px;
}
</style>
  1. 在瀏覽器打開(kāi)
    發(fā)現(xiàn)已經(jīng)隨著不同的設(shè)備,htmlbody以及設(shè)置的容器大小、字體已經(jīng)隨之變化,都已經(jīng)轉(zhuǎn)換成對(duì)應(yīng)的rem單位,說(shuō)明設(shè)置沒(méi)問(wèn)題
    image.png

    image.png

可能存在的坑:

PostCSS plugin postcss-pxtorem requires PostCSS 8
原因:安裝的postcss-pxtorem版本太高了,腳手架的postcss版本過(guò)低,不匹配

"postcss-pxtorem": "^6.0.0",

解決:將postcss-pxtorem降級(jí),npm i postcss-pxtorem@5.1.1

后面有時(shí)間的話,會(huì)回來(lái)補(bǔ)充說(shuō)明這兩插件的實(shí)現(xiàn)原理,這里先留個(gè)坑...

參考:
https://blog.csdn.net/m0_47965154/article/details/115380574

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 手機(jī)的分辨率不同,如何在不同的手機(jī)上保持顯示相同的表現(xiàn),常見(jiàn)的方案有兩種: 1: 使用響應(yīng)式布局, (1):通過(guò)媒...
    好名字都讓你們用了閱讀 178評(píng)論 0 0
  • 視口介紹 1、布局視口(layout viewpor) var width=document.documentEl...
    Franklin_7353閱讀 584評(píng)論 0 0
  • 前言 隨著移動(dòng)端的普及,以及手機(jī)尺寸越來(lái)越多,“網(wǎng)頁(yè)內(nèi)容自適應(yīng)屏幕尺寸進(jìn)行顯示的問(wèn)題” 也日漸凸顯出來(lái),下面講一下...
    moofyu閱讀 1,524評(píng)論 0 8
  • 一、設(shè)置加載的幾種方式 使用vant UI庫(kù)的Toast(輕提示)文檔地址:https://youzan.gith...
    Grayly吖閱讀 4,521評(píng)論 1 4
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,814評(píng)論 28 54

友情鏈接更多精彩內(nèi)容