目标
- 能使用 Vue CLI 创建项目
- 了解 Vant 组件库的导入方式
- 掌握制作使用字体图标的方式
- 掌握如何在 Vue 项目中处理 REM 适配
- 理解 axios 请求模块的封装
05-项目初始化-导入图标素材:07:41可以暂停,实现图标制作并获取代码
设计师为我们单独提供了设计稿中的图标,为了方便使用,我们在这里把它制作为字体图标。
制作字体图标的工具有很多,在这里我们推荐大家使用:https://www.iconfont.cn/。
第三方登录即可
在styles目录下创建icon.less,将对应的图标样式代码复制过来
在index.lee中引用图标样式
// 全局样式文件
// 加载图标样式图标
@import './icon.less';
在App.vue中使用字体图标
<div id="app">
<router-view/>
<i class="toutiao toutiao-lishi">i>
div>
将资料中的素材图片复制到自己项目的assets文件夹中,并将favicon.ico剪切到public目录下,替换默认的ico
Vant 中的样式默认使用 px
作为单位,如果需要使用 rem
单位,推荐使用以下两个工具:
下面我们分别将这两个工具配置到项目中完成 REM 适配。
一、使用 lib-flexible 动态设置 REM 基准值(html 标签的字体大小)
1、安装
# yarn add amfe-flexible
npm i amfe-flexible
2、然后在 main.js
中加载执行该模块
import 'amfe-flexible'
最后测试:在浏览器中切换不同的手机设备尺寸,观察 html 标签 font-size
的变化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wAdw8hJW-1599786240601)(assets/1582034718723-500ef407-af66-4770-8fdd-33d0fc3ef9ed.png)]
例如在 iPhone 6/7/8 设备下,html 标签字体大小为 37.5 px
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dcQ75ky-1599786240610)(assets/1582034950176-868d5875-3496-45d3-8a61-e556e1cc1f90.png)]
例如在 iPhone 6/7/8 Plus 设备下,html 标签字体大小为 41.4 px
二、使用 postcss-pxtorem 将 px
转为 rem
1、安装
# yarn add -D postcss-pxtorem
# -D 是 --save-dev 的简写
npm install postcss-pxtorem -D
2、然后在项目根目录中创建 .postcssrc.js
文件
module.exports = {
plugins: {
'autoprefixer': {
browsers: ['Android >= 4.0', 'iOS >= 8']
},
'postcss-pxtorem': {
rootValue: 37.5,
propList: ['*']
}
}
}
3、** 配置完毕,重新启动服务**
最后测试:刷新浏览器页面,审查元素的样式查看是否已将 px
转换为 rem
。
** 需要注意的是:**
px
,例如 `
.postcssrc.js
配置文件10:33秒暂停
postCss基本介绍,解决项目运行报错问题
19:43建议暂停
rootValue的作用,以及项目和vant的冲突问题
module.exports = {
plugins: {
'autoprefixer': {
browsers: ['Android >= 4.0', 'iOS >= 8']
},
'postcss-pxtorem': {
rootValue: 37.5,
propList: ['*']
}
}
}
.postcssrc.js
是 PostCSS 的配置文件。
(1)PostCSS 介绍
PostCSS 是一个处理 CSS 的处理工具,本身功能比较单一,它主要负责解析 CSS 代码,再交由插件来进行处理,它的插件体系非常强大,所能进行的操作是多种多样的,例如:
目前 PostCSS 已经有 200 多个功能各异的插件。开发人员也可以根据项目的需要,开发出自己的 PostCSS 插件。
PostCSS 一般不单独使用,而是与已有的构建工具进行集成。
Vue CLI 默认集成了 PostCSS,并且默认开启了 autoprefixer 插件。
Vue CLI 内部使用了 PostCSS。
你可以通过
.postcssrc
或任何 postcss-load-config 支持的配置源来配置 PostCSS。也可以通过vue.config.js
中的css.loaderOptions.postcss
配置 postcss-loader。我们默认开启了 autoprefixer。如果要配置目标浏览器,可使用
package.json
的 browserslist 字段。
(2)Autoprefixer 插件的配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGOvH79N-1599786321556)(assets/image-20200319104557718.png)]
autoprefixer 是一个自动添加浏览器前缀的 PostCss 插件,browsers
用来配置兼容的浏览器版本信息,但是写在这里的话会引起编译器警告。
Replace Autoprefixer browsers option to Browserslist config.
Use browserslist key in package.json or .browserslistrc file.
Using browsers option can cause errors. Browserslist config
can be used for Babel, Autoprefixer, postcss-normalize and other tools.
If you really need to use option, rename it to overrideBrowserslist.
Learn more at:
https://github.com/browserslist/browserslist#readme
https://twitter.com/browserslist
警告意思就是说你应该将 browsers
选项写到 package.json
或 .browserlistrc
文件中。
[Android]
>= 4.0
[iOS]
>= 8
具体语法请参考这里。
(3)postcss-pxtorem 插件的配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p00rlBRa-1599786321562)(assets/image-20200319105610557.png)]
rootValue
:表示根元素字体大小,它会根据根元素大小进行单位转换propList
用来设定可以从 px 转为 rem 的属性
*
就是所有属性都要转换,width
就是仅转换 width
属性rootValue
应该如何设置呢?
如果你使用的是基于 lib-flexable 的 REM 适配方案,则应该设置为你的设计稿的十分之一。
例如设计稿是 750 宽,则应该设置为 75。
大多数设计稿的原型都是以 iphone6 为原型,iphone6 设备的宽是 750,我们的设计稿也是这样。
但是 Vant 建议设置为 37.5,为什么呢?
因为 Vant 是基于 375 写的,所以如果你设置为 75 的话,Vant 的样式就小了一半。
所以如果设置为 37.5
的话,Vant 的样式是没有问题的,但是我们在测量设计稿的时候都必须除2才能使用,否则就会变得很大。
这样做其实也没有问题,但是有没有更好的办法呢?我就想实现测量多少写多少(不用换算)。于是聪明的你就想,可以不可以这样来做?
rootValue
设置为 37.5 来转换rootValue
来转换通过查阅文档我们可以看到 rootValue
支持两种参数类型:
所以我们修改配置如下:
/**
* PostCSS 配置文件
*/
module.exports = {
// 配置要使用的 PostCSS 插件
plugins: {
// 配置使用 autoprefixer 插件
// 作用:生成浏览器 CSS 样式规则前缀
// VueCLI 内部已经配置了 autoprefixer 插件
// 所以又配置了一次,所以产生冲突了
// 'autoprefixer': { // autoprefixer 插件的配置
// // 配置要兼容到的环境信息
// browsers: ['Android >= 4.0', 'iOS >= 8']
// },
// 配置使用 postcss-pxtorem 插件
// 作用:把 px 转为 rem
'postcss-pxtorem': {
rootValue ({ file }) {
return file.indexOf('vant') !== -1 ? 37.5 : 75
},
propList: ['*']
}
}
}
配置完毕,把服务重启一下,最后测试,very good。
和之前项目一样,这里我们还是使用 axios 作为我们项目中的请求库,为了方便使用,我们把它封装为一个请求模块,在需要的时候直接加载即可。
1、安装 axios
npm i axios
2、创建 src/utils/request.js
/**
* 封装 axios 请求模块
*/
import axios from "axios"
const request = axios.create({
baseURL: "http://ttapi.research.itcast.cn/" // 基础路径
})
export default request
3、如何使用
Vue.prototype
原型对象中,然后在组件中通过 this.xxx
直接访问在我们的项目中建议使用方式二,更推荐(在随后的业务功能中我们就能学到)。