postcss-logical

v6.2.0
Use logical properties and values in CSS
align block border css dir directional directions end flow and 16 more...

PostCSS Logical Properties and Values PostCSS Logo

npm install postcss-logical --save-dev

PostCSS Logical Properties and Values lets you use logical, rather than physical, direction and dimension mappings in CSS, following the CSS Logical Properties and Values specification.

.element {
    block-size: 100px;
    max-inline-size: 400px;
    inline-size: 200px;
    padding-block: 10px 20px;
    margin-inline: auto;
    border-block-width: 2px;
    border-block-style: solid;
}

/* becomes */

.element {
    height: 100px;
    max-width: 400px;
    width: 200px;
    padding-top: 10px;
    padding-bottom: 20px;
    margin-left: auto;
    margin-right: auto;
    border-top-width: 2px;
    border-bottom-width: 2px;
    border-top-style: solid;
    border-bottom-style: solid;
}

Usage

Add PostCSS Logical Properties and Values to your project:

npm install postcss postcss-logical --save-dev

Use it as a PostCSS plugin:

const postcss = require('postcss');
const postcssLogical = require('postcss-logical');

postcss([
    postcssLogical(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);

Options

blockDirection & inlineDirection

The blockDirection and inlineDirection options allow you to specify the direction of the block and inline axes. The default values are top-to-bottom and left-to-right respectively, which would match any latin language.

You should tweak these values so that they are specific to your language and writing mode.

postcssLogical({
    blockDirection: 'right-to-left',
    inlineDirection: 'top-to-bottom'
})
.element {
    block-size: 100px;
    max-inline-size: 400px;
    inline-size: 200px;
    padding-block: 10px 20px;
    margin-inline: auto;
    border-block-width: 2px;
    border-block-style: solid;
}

/* becomes */

.element {
    width: 100px;
    max-height: 400px;
    height: 200px;
    padding-right: 10px;
    padding-left: 20px;
    margin-top: auto;
    margin-bottom: auto;
    border-right-width: 2px;
    border-left-width: 2px;
    border-right-style: solid;
    border-left-style: solid;
}

Each direction must be one of the following:

  • top-to-bottom
  • bottom-to-top
  • left-to-right
  • right-to-left

You can't mix two vertical directions or two horizontal directions so for example top-to-bottom and right-to-left are valid, but top-to-bottom and bottom-to-top are not.

Please do note that text-align won't be transformed if inlineDirection becomes vertical.

Metadata

  • CC0-1.0
  • ^14 || ^16 || >=18
  • Unknown
  • released 5/19/2023

Downloads