0.1.3 • Published 4 years ago

postcss-convert-unit v0.1.3

Weekly downloads
13
License
MIT
Repository
github
Last release
4 years ago

postcss-convert-unit

npm Actions Status coverage license

中文

Convert values and units in css through custom conversion rules. A new selector can be generated for the converted property.

Install

npm install postcss-convert-unit --save-dev

Usage

simple


postcss config:

// postcss.config.js
module.exports = {
  plugins: {
    "postcss-convert-units": {
      convertConfig: [
        {
          declMatcher: {
            sourceUnit: 'px',
            targetUnit: 'rem'
          },
          declConvertRules: [{
            value: value => value
          }]
        }
      ]
    }
  }
};

input:

.div {
  padding: 20px 0 10px 5em;
}

output:

.div {
  padding: 20rem 0 10rem 5em;
}

px2rem


postcss config:

// postcss.config.js
module.exports = {
  plugins: {
    "postcss-convert-units": {
      convertConfig: [
        {
          declMatcher: {
            sourceUnit: 'px',
            targetUnit: 'rem'
          },
          declConvertRules: [
            {
              value: value => value / 75
            }
          ]
        },
        {
          declMatcher: {
            sourceUnit: 'px',
            targetUnit: 'px',
            afterDeclComment: 'px'
          },
          removeMatchDecl: true,
          declConvertRules: [
            {
              withNewSelector: selector => `[data-dpr="1"] ${selector}`,
              value: value => value / 2
            },
            {
              withNewSelector: selector => `[data-dpr="2"] ${selector}`,
              value: value => value
            },
            {
              withNewSelector: selector => `[data-dpr="3"] ${selector}`,
              value: value => value / 2 * 3
            }
          ]
        }
      ]
    }
  }
};

input:

.selector {
  height: 64px; /*px*/
  font-size: 28px; /*px*/
  border: 1px solid #ddd; /*no*/
  width: 150px;
}

output:

.selector {
  border: 1px solid #ddd; /*no*/
  width: 2rem;
}
[data-dpr="1"] .selector {
  height: 32px;
  font-size: 14px;
}
[data-dpr="2"] .selector {
  height: 64px;
  font-size: 28px;
}
[data-dpr="3"] .selector {
  height: 96px;
  font-size: 42px;
}

Options

// example
{
  convertConfig: [
    {
      declMatcher: {
        sourceUnit: 'px',
        targetUnit: 'rem',
        afterDeclComment: 'rem'
      },
      precision: 5,
      removeMatchDecl: false,
      declConvertRules: [
        {
          value: value => value,
          withNewSelector: selector => selector
        }
      ]
    }
  ]
}
AttributeDescriptionTypeDefaultRequired
convertConfigconvert config listconvertItem[][]yes
  • convertItem
AttributeDescriptionTypeDefaultRequired
declMatchermatch declarationstring-yes
declConvertRulesdeclaration convert rulesconvertRule[]-yes
precisionvalue precisionnumber5no
  • declMatcher
AttributeDescriptionTypeDefaultRequired
sourceUnitsource unitstring-yes
targetUnittarget unitstring-yes
afterDeclCommentcomment after declarationstring-no
  • convertRule

notice: If set withNewSelector, a new selector will be generated for the converted declaration; if not set withNewSelector, values and units will converted in origin declaration. for @keyframes, it will converted in origin declaration. If multiple convertRules are configured, the last configuration will take effect, because the post configuration will override the first configuration.

AttributeDescriptionTypeDefaultRequired
valuevalue convert rulefunction(value),value is matched value,you need implement convert rule,and return converted value-yes
withNewSelectornew selector generated rulefunction(selector), selectoris matched selector,you need implement convert rule,and return new selector-no