1.0.0 • Published 6 months ago

postcss-pxv v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
6 months ago

postcss-pxv

This plugin creates a new pixel-viewport unit of measurement called a pxv.

input:

div { width: 150pxv; }

output:

 div { width: clamp(1px, calc(150vw * (100 / var(--siteBasis))), calc(150px * var(--siteMax) / var(--siteBasis))); }

"Wow, that looks insane!" you might say. And you'd be right, but there is very good reason for it all, and we've used this very successfully on some large sites.

When to use

Use this when you want to reach for a px but need it to behave like a vw unit. Rule must support css clamp():

✅ Use with❌ Don't use with
widthfont-size*
height
padding (including neg values)
margin
left, right, top, bottom
  • Note:font-size does support clamp but responsive typography needs a different solution to allow for the browser to still be able to use the zoom functionality. (Please see the 2.0 branch alpha release of kni-scss for this.)

Harnessing the power of css custom props

By using css custom properties we can live inject a new "basis" for the scaling.

The plugin requires two custom properties:

  • --siteBasis - The size at which your layout was designed
  • --siteMax - The size at which you want you comp to stop scaling

In an example implementation you may have a site comped at 1440px, 768px, and 375px for desktop, tablet, andd mobile respectively:

:root {
    --mobile: 375;
    --tablet: 768; 
    --desktop: 1440; 
 
    --mobileMax: 600;
    --tabletMax: 900;
    --desktopMax: 1900;

    --siteBasis: var(--mobileMax); 
    --siteMax: var(--siteMaxMobile);
  }

and in a very simple implementation we can handle 95% of all responsive elements with one media query:

@media (min-width: 768px) {
  * {
    --siteBasis: var(--tablet);
    --siteMax: var(--tabletMax);
  }
}
@media (min-width: 1024px) {
  * {
    --siteBasis: var(--desktop);
    --siteMax: var(--desktopMax);
  }
}

Installation

npm i postcss-pxv --save-dev

How to contribute

for now:

  1. npm i
  2. edit index.js or input.css
  3. process css: node process-css.js
1.0.0

6 months ago

0.8.0

9 months ago

0.7.0

9 months ago

0.2.0

11 months ago