A plugin for PostCSS that converts px to viewport units or/and rem.
Options
Default:
viewportWidth: 750 remRatio: 10 unitPrecision: 5 minPixelValue: 1 toRem: false toViewport: true handleDpx: false mediaQuery: false exclude: ''
viewportWidth
(Number) The width of the viewport.remRatio
(Number) For generates the root elementfont-size
.unitPrecision
(Number) The decimal numbers to allow the REM units to grow to.minPixelValue
(Number) Set the minimum pixel value to replace.toRem
(Boolean) Whether to convert torem
.toViewport
(Boolean) Whether to convert tovw
.handleDpx
(Boolean) Whether to handle dpx unit, close it can improve efficiency..mediaQuery
(Boolean) Allow px to be converted in media queries.exclude
(String | Regex) file path that excluded.
If you set the toRem
is true. You'll append some codes into your entry file.
documentdocumentElementstylefontSize = documentdocumentElementclientWidth / 10 + 'px'
dpx
About unit It support dpx
to resolve a pixel border problems. You need add some codes into your entry file like this.
if windowdevicePixelRatio && windowdevicePixelRatio >= 2 var fakeBody = document var testElement = document testElementstyleborder = '.5px solid transparent' fakeBody docEl if testElementoffsetHeight === 1 docElclassList docEl
rpx
About unit rpx
will just convert to px
.
handleDpx
If you set options toRem
and handleDpx
to true
. It suggests that you add the below codes into your entry file.
{ var docEl = documentdocumentElement var dpr = windowdevicePixelRatio || 1 // set 1rem = viewWidth / 10 { var rem = docElclientWidth / 10 docElstylefontSize = rem + 'px' } // reset rem unit on page resize window window // detect 0.5px supports if dpr >= 2 var fakeBody = document var testElement = document testElementstyleborder = '.5px solid transparent' fakeBody docEl if testElementoffsetHeight === 1 docElclassList docEl }window document
Example
{} //{}