tcstory / postcss-px-to-viewport

MIT License
6 stars 4 forks source link

postcss-px-to-viewport

codecov

English

A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units.

This is a fork version of postcss-px-to-viewport, which compatible with postcss 8.x.

Demo

If your project involves a fixed width, this script will help to convert pixels into viewport units.

Input

.class {
  margin: -10px .5vh;
  padding: 5vmin 9.5px 1px;
  border: 3px solid black;
  border-bottom-width: 1px;
  font-size: 14px;
  line-height: 20px;
}

.class2 {
  padding-top: 10px; /* px-to-viewport-ignore */
  /* px-to-viewport-ignore-next */
  padding-bottom: 10px;
  /* Any other comment */
  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 .5vh;
  padding: 5vmin 2.96875vw 1px;
  border: 0.9375vw solid black;
  border-bottom-width: 1px;
  font-size: 4.375vw;
  line-height: 6.25vw;
}

.class2 {
  padding-top: 10px;
  padding-bottom: 10px;
  /* Any other comment */
  border: 1px solid black;
  margin-bottom: 1px;
  font-size: 6.25vw;
  line-height: 9.375vw;
}

@media (min-width: 750px) {
  .class3 {
    font-size: 16px;
    line-height: 22px;
  }
}

Getting Started

Installation

Add via npm

$ npm install @tcstory/postcss-px-to-viewport --save-dev

or yarn

$ yarn add -D @tcstory/postcss-px-to-viewport

Usage

Default Options:

{
  unitToConvert: 'px',
  viewportWidth: 320,
  unitPrecision: 5,
  propList: ['*'],
  viewportUnit: 'vw',
  fontViewportUnit: 'vw',
  selectorBlackList: [],
  minPixelValue: 1,
  mediaQuery: false,
  replace: true,
  exclude: undefined,
  include: undefined,
  landscape: false,
  landscapeUnit: 'vw',
  landscapeWidth: 568
}

exclude and include can be set together, and the intersection of the two rules will be taken.

Ignoring

You can use special comments for ignore conversion of single lines:

Example:

/* example input: */
.class {
  /* px-to-viewport-ignore-next */
  width: 10px;
  padding: 10px;
  height: 10px; /* px-to-viewport-ignore */
  border: solid 2px #000; /* px-to-viewport-ignore */
}

/* example output: */
.class {
  width: 10px;
  padding: 3.125vw;
  height: 10px;
  border: solid 2px #000;
}

There are several more reasons why your pixels may not convert, the following options may affect this: propList, selectorBlackList, minPixelValue, mediaQuery, exclude, include.

Overriding

you can use special comments for overriding some options in a css file. the current supported options are as follows:

  1. landscapeWidth
  2. viewportWidth

Example:

/* px-to-viewport-define landscapeWidth=600, viewportWidth=480 */
.rule {
  font-size: 15px;
  height: 50px;
}

Use with PostCss configuration file

add to your postcss.config.js

module.exports = {
  plugins: {
    // ...
    "@tcstory/postcss-px-to-viewport": {
      // options
    }
  }
}

Running the tests

In order to run tests, you need to install dev-packages:

$ npm install

Then run the tests via npm script:

$ npm run test

Changelog

The changelog is here.

License

This project is licensed under the MIT License.