@liaoyinglong/postcss-px-to-viewport
v0.0.2
Published
A CSS post-processor that converts px to viewport units (vw, vh, vmin, vmax).
Downloads
1
Maintainers
Readme
postcss-px-to-viewport
- A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units.
- fork from evrone/postcss-px-to-viewport
Install
$ npm i @liaoyinglong/postcss-px-to-viewport -D
Usage
If your project involves a fixed width, this script will help to convert pixels into viewport units.
Input/Output
// input
.class {
margin: -10px 0.5vh;
padding: 5vmin 9.5px 1px;
border: 3px solid black;
border-bottom-width: 1px;
font-size: 14px;
line-height: 20px;
}
.class2 {
border: 1px solid black;
margin-bottom: 1px;
font-size: 20px;
line-height: 30px;
}
@media (min-width: 750px) {
.class3 {
font-size: 16px;
line-height: 22px;
}
}
// output
.class {
margin: -3.125vw 0.5vh;
padding: 5vmin 2.96875vw 1px;
border: 0.9375vw solid black;
border-bottom-width: 1px;
font-size: 4.375vw;
line-height: 6.25vw;
}
.class2 {
border: 1px solid black;
margin-bottom: 1px;
font-size: 6.25vw;
line-height: 9.375vw;
}
@media (min-width: 234.375vw) {
.class3 {
font-size: 5vw;
line-height: 6.875vw;
}
}
Example
'use strict';
var fs = require('fs');
var postcss = require('postcss');
var pxToViewport = require('..');
var css = fs.readFileSync('main.css', 'utf8');
var options = {
replace: false
};
var processedCss = postcss(pxToViewport(options)).process(css).css;
fs.writeFile('main-viewport.css', processedCss, function(err) {
if (err) {
throw err;
}
console.log('File with viewport units written.');
});
Options
Default:
{
viewportWidth: 750,
viewportHeight: 1334,
unitPrecision: 3,
viewportUnit: 'vw',
selectorBlackList: ['.ignore'],
minPixelValue: 1,
mediaQuery: false,
}
viewportWidth
(Number) 视窗的宽度,对应的是我们设计稿的宽度,一般是 750viewportHeight
(Number) 视窗的高度,根据 750 设备的宽度来指定,一般指定 1334,也可以不配置。unitPrecision
(Number) 指定px
转换为视窗单位值的小数位数(很多时候无法整除)。viewportUnit
(String) 指定需要转换成的视窗单位,建议使用 vwselectorBlackList
(Array) 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名。- 如果 value 是 string,则检查 selector 是否包含字符串。
['body']
将会匹配.body-class
- 如果 value 是 regexp,它会检查选择器是否与正则表达式匹配。
[/^body$/]
将会匹配body
并不是.body
- 如果 value 是 string,则检查 selector 是否包含字符串。
minPixelValue
(Number) 小于或等于1px
不转换为视窗单位,你也可以设置为你想要的值。mediaQuery
(Boolean) 允许在媒体查询中转换px
exclude
(RegExp) 排除路径不参与转换 eg:/(\/|\\)(node_modules)(\/|\\)/
Use with gulp-postcss
var gulp = require('gulp');
var postcss = require('gulp-postcss');
var pxtoviewport = require('postcss-px-to-viewport');
gulp.task('css', function() {
var processors = [
pxtoviewport({
viewportWidth: 750,
viewportUnit: 'vmin'
})
];
return gulp
.src(['build/css/**/*.css'])
.pipe(postcss(processors))
.pipe(gulp.dest('build/css'));
});