Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

pxtorem-css

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pxtorem-css

A PostCSS plugin and CLI tool that converts px to rem/em/vw/vh units

latest
Source
npmnpm
Version
2.0.2
Version published
Weekly downloads
9
800%
Maintainers
1
Weekly downloads
 
Created
Source

pxtorem-css

A modern PostCSS plugin & CLI to convert px → rem, em, vw, vh and more

npm version downloads license typescript

✨ Features

  • 🎯 Multiple Units — Convert to rem, em, vw, vh, vmin, vmax, %
  • Fast & Lightweight — Zero dependencies (except postcss)
  • 🔧 Highly Configurable — Per-property settings, custom transforms
  • 💬 Comment Control — Disable conversion with inline comments
  • 📊 Conversion Reports — Track what was converted
  • 🖥️ CLI Included — Convert files from command line
  • TypeScript — Full type definitions included

📦 Installation

# npm
npm install pxtorem-css postcss --save-dev

# yarn
yarn add pxtorem-css postcss -D

# pnpm
pnpm add pxtorem-css postcss -D

🚀 Quick Start

PostCSS Config

// postcss.config.js
module.exports = {
  plugins: [
    require('pxtorem-css')({
      baseSize: 16,
      properties: ['*'],
    }),
  ],
};

CLI

# Convert a file
npx pxtorem style.css

# With options
npx pxtorem style.css -b 16 -u rem --min-value 2

📖 Usage Examples

Vite
// vite.config.js
import { defineConfig } from 'vite';
import pxtorem from 'pxtorem-css';

export default defineConfig({
  css: {
    postcss: {
      plugins: [
        pxtorem({
          baseSize: 16,
          properties: ['*'],
        }),
      ],
    },
  },
});
Next.js
// postcss.config.js
module.exports = {
  plugins: {
    'pxtorem-css': {
      baseSize: 16,
      properties: ['*'],
    },
  },
};
Webpack
// postcss.config.js
module.exports = {
  plugins: [
    require('pxtorem-css')({
      baseSize: 16,
      properties: ['*'],
      minValue: 2,
    }),
    require('autoprefixer'),
  ],
};
Node.js Script
const fs = require('fs');
const postcss = require('postcss');
const pxtorem = require('pxtorem-css');

const css = fs.readFileSync('input.css', 'utf8');

postcss([pxtorem({ baseSize: 16 })])
  .process(css)
  .then((result) => {
    fs.writeFileSync('output.css', result.css);
  });

⚙️ Options

OptionTypeDefaultDescription
baseSizenumber | function16Base font size for conversion
toUnitstring'rem'Target unit (rem, em, vw, vh, vmin, vmax, %)
fromUnitstring'px'Source unit to convert
precisionnumber5Decimal precision
propertiesstring[]['*']Properties to convert (supports wildcards)
skipSelectors(string | RegExp)[][]Selectors to skip
minValuenumber0Skip values below this
maxValuenumberInfinitySkip values above this
convertMediaQueriesbooleanfalseConvert in media queries
replaceOriginalbooleantrueReplace vs add fallback
propertyBaseSizeobject{}Per-property base sizes
convertfunctionnullCustom conversion function
verbosebooleanfalseLog conversions

🎨 Advanced Examples

Property Wildcards

pxtorem({
  properties: ['font*', '*margin*', '!border*'],
  // ✓ font-size, font-weight, margin, margin-top
  // ✗ border, border-width
});

Per-Property Base Size

pxtorem({
  baseSize: 16,
  propertyBaseSize: {
    'font-size': 14,
    'line-height': 20,
  },
});

Custom Transform

pxtorem({
  convert: (px, property, selector) => {
    // Skip small values
    if (px < 4) return false;

    // Use CSS variable
    if (px === 16) return 'var(--base-size)';

    // Round to 0.25rem
    return Math.round((px / 16) * 4) / 4;
  },
});

Viewport Units (Mobile-First)

pxtorem({
  toUnit: 'vw',
  baseSize: 3.75, // 375px / 100vw
  properties: ['*'],
});

💬 Comment Control

Disable conversion with inline comments:

.element {
  font-size: 16px; /* → 1rem */
  padding: 20px; /* pxtorem-disable-line */ /* → 20px (skipped) */

  /* pxtorem-disable */
  margin: 32px; /* → 32px (skipped) */
  border: 1px solid; /* → 1px (skipped) */
  /* pxtorem-enable */

  width: 100px; /* → 6.25rem */
}
CommentEffect
/* pxtorem-disable-line */Skip current line
/* pxtorem-disable-next-line */Skip next line
/* pxtorem-disable */Disable until enable
/* pxtorem-enable */Re-enable

🖥️ CLI Reference

pxtorem [options] <input>
OptionDescription
-o, --output <path>Output file/directory
-b, --base-size <n>Base font size
-u, --to-unit <unit>Target unit
-p, --precision <n>Decimal precision
--properties <list>Comma-separated properties
--skip-selectors <list>Comma-separated selectors to skip
--min-value <n>Min px value
--max-value <n>Max px value
--media-queriesConvert in media queries
--no-replaceAdd fallback instead of replacing
-v, --verboseVerbose output
-h, --helpShow help

CLI Examples

# Basic conversion
pxtorem style.css

# Custom options
pxtorem style.css -b 16 -u rem -p 5 --min-value 2

# Different output
pxtorem -o dist/styles.css src/styles.css

# Directory conversion
pxtorem -o dist/css src/css

# Filter properties
pxtorem style.css --properties "font-size,margin,padding"

📘 TypeScript

import pxtorem, { Options, ConversionReport, TargetUnit } from 'pxtorem-css';

const options: Options = {
  baseSize: 16,
  toUnit: 'rem',
  onConversionComplete: (report: ConversionReport) => {
    console.log(`Converted: ${report.convertedDeclarations}`);
  },
};

📄 License

MIT © Rashed Iqbal

Keywords

postcss

FAQs

Package last updated on 20 Feb 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts