vue-cli中使用postcss-px-to-viewport 将px转换成vw
移动端适配方案中,可以使用vw作为页面中各元素的单位,以此来完成适配效果。下面我们来讲怎样在vue-cli 项目中使用 postcss-px-to-viewport插件。前言先来认识一下postcss,postcss是一个用 JavaScript 工具和插件转换 CSS 代码的工具。postcss的作用:兼容各个内核的浏览器,增强代码的可读性。autoprefixer 插件可以自动获取浏...
移动端适配方案中,可以使用vw作为页面中各元素的单位,以此来完成适配效果。下面我们来讲怎样在vue-cli 项目中使用 postcss-px-to-viewport插件。
前言
先来认识一下postcss,postcss是一个用 JavaScript 工具和插件转换 CSS 代码的工具。
postcss的作用:
- 兼容各个内核的浏览器,增强代码的可读性。autoprefixer 插件可以自动获取浏览器的流行度和能够支持的属性,并根据这些数据自动为 CSS 规则添加前缀。
- 解析浏览器不兼容的css新语法。postcss-preset-env 插件可以将现代 CSS 语法转换成大多数浏览器都能理解的东西。
- 避免全局css样式。通过使用postcss-modules ,不用担心命名太大众化而造成冲突太普通,只要用最有意义的名字就行了。
- 避免css代码中的错误。通过使用 stylelint 插件避免样式表中的错误,stylelint 是一个现代化 CSS 代码检查工具。它支持最新的 CSS 语法,包括类似 CSS 的语法,例如 SCSS 。
- 强大的网格系统。lostgrid 插件利用 calc() 和你所定义的分割方式来创建网格系统,无需传递大量参数。
postcss-px-to-viewport
postcss-px-to-viewport,可以将px单位自动转换成viewport单位(vw表示屏幕的1%)。
1. 安装
npm install postcss-px-to-viewport --save-dev
或者使用yarn安装
yarn add postcss-px-to-viewport -D
2. 配置
在vue-cli 项目根目录下新建vue.config.js配置文件,在该文件中写入如下内容
const pxtovw = require('postcss-px-to-viewport');
module.exports={
css:{
loaderOptions:{
sass:{
//给sass-loader传递选项
},
css:{
//给css-loader传递选项
},
postcss:{
//给postcss-loader传递选项
plugins:[
new pxtovw({
unitToConvert: 'px', //需要转换的单位,默认为"px";
viewportWidth: 375, //设计稿的视口宽度
unitPrecision: 5, //单位转换后保留的小数位数
propList: ['*'], //要进行转换的属性列表,*表示匹配所有,!表示不转换
viewportUnit: 'vw', //转换后的视口单位
fontViewportUnit: 'vw', //转换后字体使用的视口单位
selectorBlackList: [], //不进行转换的css选择器,继续使用原有单位
minPixelValue: 1, //设置最小的转换数值
mediaQuery: false, //设置媒体查询里的单位是否需要转换单位
replace: true, //是否直接更换属性值,而不添加备用属性
exclude: [/node_modules/] //忽略某些文件夹下的文件
})
]
}
}
}
}
设置配置文件后,需要重新启动项目。
可能遇到的问题:
插件会将所有样式的px转换成vw,如果引入了第三方UI,也会被转化。可以使用selectorBlackList 属性来进行过滤。如果个别地方不想转换为vw,可以简单的使用大写的PX或者Px或者pX。
3. 效果
使用前:
npm run serve 启动项目,就可以看到项目中的单位全部转换成了vw
4. 配置参数详解:
- unitToConvert (String),需要转换的单位,默认为"px"
- viewportWidth (Number),设计稿的视口宽度
- unitPrecision (Number),单位转换后保留的精度
- propList (Array),能转化为vw的属性列表
- 传入特定的CSS属性;
- 可以传入通配符""去匹配所有属性,例如:[’’];
- 在属性的前或后添加"*",可以匹配特定的属性. (例如[‘position’] 会匹配 background-position-y)
- 在特定属性前加 “!”,将不转换该属性的单位 . 例如: [’*’, ‘!letter-spacing’],将不转换letter-spacing
- “!” 和 ""可以组合使用, 例如: [’’, ‘!font*’],将不转换font-size以及font-weight等属性
- viewportUnit (String),希望使用的视口单位
- fontViewportUnit (String),字体使用的视口单位
- selectorBlackList (Array),需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
- 如果传入的值为字符串的话,只要选择器中含有传入值就会被匹配
- 例如 selectorBlackList 为 [‘body’] 的话, 那么 .body-class 就会被忽略
- 如果传入的值为正则表达式的话,那么就会依据CSS选择器是否匹配该正则
- 例如 selectorBlackList 为 [/^body$/] , 那么 body 会被忽略,而 .body 不会
- minPixelValue (Number),设置最小的转换数值,如果为1的话,只有大于1的值会被转换
- mediaQuery (Boolean),媒体查询里的单位是否需要转换单位,@keyframes和media里的px默认是不转化的,设置该属性为true,则媒体查询里的单位会转成vw。
- replace (Boolean),是否直接更换属性值,而不添加备用属性
- exclude (Array or Regexp),忽略某些文件夹下的文件或特定文件,例如 ‘node_modules’ 下的文件
- 如果值是一个正则表达式,那么匹配这个正则的文件会被忽略
- 如果传入的值是一个数组,那么数组里的值必须为正则
- landscape (Boolean) 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
- landscapeUnit (String) 横屏时使用的单位
- landscapeWidth (Number) 横屏时使用的视口宽度
更多推荐
所有评论(0)