Home

Awesome

postcss-ref Build Status

PostCSS plugin to refer properties from another rule (@ref rule)

Spec

Abstract

This specification defines the @ref rule, which allows an author to refer properties in another style rule.

Using @ref rule

@ref = @ref <selector-name>, <reffered-property-name>( ,<new-property-name>)

Example

.foo {
  font-size: 12px;
  color: #333;
}

.bar {
  @ref .foo, font-size;
  color: #444;
}

ref() notation (with atRule option)

You can pass an option to postcss-ref which lets you use ref as a function (ref()) instead of an atRule (@ref)

ref() = ref(<selector-name>, <reffered-property-name>)

Example

.foo {
  font-size: 12px;
  color: #333;
}

.bar {
  font-size: ref(.foo, font-size);
  color: #444;
}

with media queries

It also works with @media rules

.foo {
  font-size: 10px;
}

@media (min-width: 1602px) {
  .foo {
    font-size: 12px;
    color: #333;
  }
}

.bar {
  @ref @media (min-width: 1602px) .foo, font-size;
}

or

.bar {
  font-size: ref(@media (min-width: 1602px) .foo, font-size);
}

This allows you to be more verbose with what you are doing.

Installation

$ npm install postcss-ref

How to use postcss-ref

in Node.js

// dependencies
var fs = require("fs")
var postcss = require("postcss")
var ref = require("postcss-ref")

// css to be processed
var css = fs.readFileSync("input.css", "utf8")

// process css
var output = postcss()
  .use(ref()) // If using the function way change it to `ref({ atRule: false })`
  .process(css)
  .css

Example

Input:

.foo {
  font-size: 12px;
  color: #333;
}

.bar {
  @ref .foo, font-size;
  color: #444;
}

Output:

.foo {
  font-size: 12px;
  color: #333;
}

.bar {
  font-size: 12px;
  color: #444;
}

Works well with custom properties

Input:

.foo {
  --font-m: 12px;
  color: #333;
}

.bar {
  @ref .foo, --font-m, font-size;
}

Output:

.foo {
  --font-m: 12px;
  color: #333;
}

.bar {
  font-size: var(--font-m);
}

Input:

.foo {
  --font-m: 12px;
  color: #333;
}

.bar {
  font-size: ref(.foo, --font-m);
}

Output:

.foo {
  --font-m: 12px;
  color: #333;
}

.bar {
  font-size: var(--font-m);
}

License

The MIT License (MIT)

Copyright (c) 2016 Masaaki Morishita