本文引用至[碼云](https://gitee.com/yzfgits/vue3.x_vw_layout)
[參考文章](https://segmentfault.com/a/1190000013948219)
# vuecli3vw
# 總體思路
- 你可以參考此文檔完成`vw`布局適配移動端,適用于`vuecli3.x`搭建的項目
- 此文檔是帶領你完成一項具體任務,而不是教你如何編程
## 1. 使用`vuecli3`搭建項目
## 2. 在項目根目錄的`postcss.config.js`文件中增加配置項
## 3. 使用`npm`下載相關包
## 4. 在`index.html`引入js插件并使用該插件
## 5. 在`App.vue`組件中嘗試使用vw布局
## 6. 運行項目,驗證是否成功
# 操作流程
### 1. 使用`vuecli3.x`創建項目
```
vue create vuecli3vw
```
- 具體操作步驟參考一下gif圖片,此項目勾選了 vue-router, vuex, babel
```
需要注意的是: 詢問配置 PostCSS 時需要選擇的是 `In dedicated config files` 在專用配置文件中
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? (Use arrow keys)
> In dedicated config files
In package.json
```
### 2. 在項目根目錄的`postcss.config.js`文件中增加配置項
- `postcss.config.js`全部內容
```
//https://github.com/michael-ciniawsky/postcss-load-config
// module.exports = {
// plugins: {
// autoprefixer: {}
// }
// }
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
"postcss-aspect-ratio-mini": {},
"postcss-write-svg": {
utf8: false
},
"postcss-cssnext": {},
"postcss-px-to-viewport": {
viewportWidth: 750, // 視窗的寬度,對應的是我們設計稿的寬度,一般是750
viewportHeight: 1334, // 視窗的高度,根據750設備的寬度來指定,一般指定1334,也可以不配置
unitPrecision: 3, // 指定`px`轉換為視窗單位值的小數位數(很多時候無法整除)
viewportUnit: 'vw', // 指定需要轉換成的視窗單位,建議使用vw
selectorBlackList: ['.ignore', '.hairlines'], // 指定不轉換為視窗單位的類,可以自定義,可以無限添加,建議定義一至兩個通用的類名
minPixelValue: 1, // 小于或等于`1px`不轉換為視窗單位,你也可以設置為你想要的值
mediaQuery: false // 允許在媒體查詢中轉換`px`
},
"postcss-viewport-units":{},
"cssnano": {
preset: "advanced",
autoprefixer: false,
"postcss-zindex": false
},
}
}
```
### 3. 使用`npm`下載相關包
```
npm i cssnano postcss-aspect-ratio-mini postcss-cssnext postcss-px-to-viewport postcss-viewport-units postcss-write-svg -S
npm i cssnano-preset-advanced -D
npm i postcss-import postcss-url autoprefixer -D
```
### 4. 在`index.html`引入js插件并使用該插件
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>vuecli3vw</title>
</head>
<body>
<noscript>
<strong>We're sorry but vuecli3vw doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="//g.alicdn.com/fdilab/lib3rd/viewport-units-buggyfill/0.6.2/??viewport-units-buggyfill.hacks.min.js,viewport-units-buggyfill.min.js"></script>
<script>
window.onload = function () {
window.viewportUnitsBuggyfill.init({
hacks: window.viewportUnitsBuggyfillHacks
});
}
</script>
</body>
</html>
```
### 5. 在`App.vue`組件中嘗試使用vw布局
```
<template>
<div id="app">
<div class='box'>
使用 vw 布局
</div>
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<router-view/>
</div>
</template>
<style>
html,body{
margin: 0;
padding: 0;
}
.box{
width: 750px;
height: 1000px;
background-color: #ccc;
color: darkred;
font-size: 40px;
}
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
</style>
```
### 6. 運行項目,驗證是否成功
```
npm run serve
```
- 查看`.box`的`css px`是否成功轉為`vw`
- 如果成功轉為`vw`,恭喜你成功啦!
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
相關文件參考
[vw](https://www.cnblogs.com/jinsuo/p/8533269.html)
[vw2](https://note.52admin.net/2018/09/03/Vue-js-%E7%A7%BB%E5%8A%A8%E7%AB%AF%E9%80%82%E9%85%8D%E4%B9%8B-vw-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/)
- 1.vue
- 第一章 起步
- 第1節 開發環境配置
- 第2節 hello world
- 第3節 開發todolist
- 1.使用全局組件開發todolist
- 2.使用局部組件
- 第4節 組件的模板寫在html中
- 第5節 子組件自定事件,向父組件傳遞參數
- 第6節 vue-temp
- 第二章 基本
- 第1節實例,掛載點,模板
- 第2節 vue的生命周期
- 2-1 數據改變執行的生命周期函數
- 第3節 v-text/v-html
- 第4節 計算屬性,方法,偵聽器
- 第5節 計算屬性的get,set方法
- 5-1 set
- 第6節 樣式綁定
- 第7節 條件渲染
- 第8列表渲染
- 第9節 Vue.set
- 第10節 vue點擊事件獲取元素的內容
- 第三章 vue組件
- 3-1 使用組件細節
- 3-1-1 組件中的data要是函數
- 3-1-2 ref屬性操作DOM
- 3-2 父子組件傳值
- 3-2-1 對兩個組件的值求和
- 3-3 組件參數校驗與非props特性
- 3-4 給組件綁定原生事件@click.native
- 3-5 非父子組件傳值
- 3-6 slot
- 3-6-1 使用多個slot
- 3-7 作用域slot
- 3-8 動態組件
- 第四章 動畫
- 4-1動畫基礎
- 4-1-0 動畫原理
- 4-1-1 實現一個簡單的漸隱漸現動畫
- 4-1-2 使用animation實現簡單動畫
- 4-1-3 自定義v-enter-active,v-leave-active
- 4-1-4 animate.css
- 4-2 vue中使用過渡和動畫
- 4-2-1 加載進來就有動畫
- 4-2-2 transition和animate.css混用
- 4-3 JS動畫與Velocity.js
- 4-3-1 velocity.js
- 4-4 多個元素或組件的過渡
- 4-4-1 組件之間的切換
- 4-5 列表過渡
- 4-6vue中動畫的封裝
- 4-6-1 使用JS和組件封裝一個簡單的動畫
- 第五章 項目基本配置
- 5-1 vue-cli構造項目的文件介紹
- router.js
- 進行一個簡單的路由配置
- App.vue
- 路徑
- 5-2 vue-cli中使用vm
- 5-3 樣式重置,fastclick,border.css的配置
- 5-4 vue-rem 實現適配
- 第六章 項目開發
- 6-1 在項目中引入iconfont
- 6-2 代碼優化
- 6-2-3 設置alias
- 6-3 輪播的開發
- 6-3-1得到一個等比例的div
- 6-3-2 設置swiperList
- 6-3-3 使用swiper控制臺報錯的解決
- 6-4 圖片區域的開發
- 6-4-1 一個簡單的算法
- 6-5 使用axios獲取首頁數據
- 6-5-1 封裝一個簡單的axios
- 6-5-2 axios跨域
- 第七章 列表頁的開發
- 7-1 better-scroll
- 7-2 兄弟組件間聯動
- 7-3輸入框不能正常輸出
- 7-4 項目部署
- 7-5 vuex實現數據共享
- 7-5-1 使用事件向vuex傳遞數據
- 7-5-2 this.$store.commit
- 7-6 路由
- 7-7 使用localStorage
- 7-8 vuex-state-mutations的切割
- 7-9keep-alive
- 第八章vuex
- 第九章 詳情頁開發
- 9-1實現動態路由
- 9-2 跳轉頁面接收傳遞的參數
- 9-3 全局事件的解綁
- 9-4 遞歸組件
- 9-5 exclude
- 9-6 解決多個頁面相互滾動影響
- 9-7 異步組件
- 9-8 動畫插槽
- 2.vue-cube
- 第一章 配置
- 1-1 本地mock數據
- 1-2 路徑配置
- 第二章 模塊
- 2-1 create-api
- 3.vant-ui
- 第一章 起步
- 第一節 安裝
- 第二節 List踩坑記
- 4.weex
- 第一章 開發環境搭建
- 第一節 weex-ui
- 第二節 jdk,sdk配置
- 第二章 內置組件
- 第一節 基礎組件
- 第二節 weex的跳轉
- 第一節 如何兼容三端
- 5.mpvue
- 第一章 開發環境配置
- 6.問題解決