8.1.0 • Published 4 months ago

postcss-logical v8.1.0

Weekly downloads
3,668,737
License
MIT-0
Repository
github
Last release
4 months ago

PostCSS Logical Properties and Values

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 and 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.

ignoreCustomProperties

The ignoreCustomProperties option allows you to ignore any properties containing var().
postcss-logical assumes that all custom properties are single value (e.g. --foo: 10px;) and will assign these to physical properties as fallbacks for logical properties.

This will produce broken declarations when your custom properties contain multiple values instead (e.g. --foo: 1px 2px;).

:root {
	--inset-a: 10px;
}

.foo {
	inset: var(--inset-a);
}

:root {
	--inset-b: 1px 2px 3px 4px;
}

.bar {
	inset: var(--inset-b);
}

/* becomes */

:root {
	--inset-a: 10px;
}

.foo {
	top: var(--inset-a);
	right: var(--inset-a);
	bottom: var(--inset-a);
	left: var(--inset-a);
}

:root {
	--inset-b: 1px 2px 3px 4px;
}

.bar {
	top: var(--inset-b);
	right: var(--inset-b);
	bottom: var(--inset-b);
	left: var(--inset-b);
}

With ignoreCustomProperties set to true:

:root {
	--inset-a: 10px;
}

.foo {
	inset: var(--inset-a);
}

:root {
	--inset-b: 1px 2px 3px 4px;
}

.bar {
	inset: var(--inset-b);
}

/* becomes */

:root {
	--inset-a: 10px;
}

.foo {
	inset: var(--inset-a);
}

:root {
	--inset-b: 1px 2px 3px 4px;
}

.bar {
	inset: var(--inset-b);
}
postcss-preset-env@infinitebrahmanuniverse/nolb-postcss-lsklif-ui-kitsklif-api@everything-registry/sub-chunk-2461telegram-ui-tempsklif-uitest-iki-mini-appstories-fsstories-react-bd@digitalnative/postcss-preset-env@csstools/csstools-cli@digitalnativeinc/postcss-preset-envjulien-easy-modalk0ng_d1nosaur_quenak0ng_d1nosaur_quenbk0ng_d1nosaur_quenck0ng_d1nosaur_quendk0ng_d1nosaur_quenek0ng_d1nosaur_quenfk0ng_d1nosaur_quengk0ng_d1nosaur_quenhk0ng_d1nosaur_quenik0ng_d1nosaur_quenjk0ng_d1nosaur_quenkk0ng_d1nosaur_quennk0ng_d1nosaur_quenok0ng_d1nosaur_quenpk0ng_d1nosaur_quenqk0ng_d1nosaur_quenrk0ng_d1nosaur_quenlk0ng_d1nosaur_quenmk0ng_d1nosaur_quensk0ng_d1nosaur_quentk0ng_d1nosaur_quenuk0ng_d1nosaur_quenvk0ng_d1nosaur_quenwk0ng_d1nosaur_quenxk0ng_d1nosaur_quenyk0ng_d1nosaur_quenzstyle-guide-mainspacex_cycl3_roamospacex_cycl3_roampspacex_cycl3_roamqspacex_cycl3_roamrspacex_cycl3_roamsspacex_cycl3_roamtspacex_cycl3_roamuspacex_cycl3_roamvspacex_cycl3_roamwspacex_cycl3_roamxspacex_cycl3_roamyspacex_cycl3_roamzspacex_j4vaa_c3qmspacex_j4vad_c3qmspacex_j4vae_c3qmspacex_j4vaf_c3qmspacex_j4vag_c3qmspacex_j4vah_c3qmspacex_j4vai_c3qmspacex_j4vaj_c3qmspacex_j4vajk_c3qmspacex_j4vajl_c3qmspacex_java_c3qcspacex_java_c3qdspacex_java_c3qespacex_java_c3qfspacex_java_c3qgspacex_java_c3qhspacex_java_c3qispacex_java_c3qjspacex_java_c3qkspacex_java_c3qlspacex_java_c3qmspacex_java_c3qnspacex_java_c3qospacex_java_c3qpspacex_java_c3qrspacex_java_c3qsspacex_java_c3qtspacex_java_c3quspacex_java_c3qvspacex_java_c3qwspacex_j4vajzb_c3qmspacex_j4vajzc_c3qmspacex_j4vajzm_c3qmspacex_j4vajzn_c3qmspacex_j4vajzv_c3qmspacex_j4vajzx_c3qmspacex_j4vao_c3qmspacex_j4vap_c3qmspacex_j4vaq_c3qmspacex_j4var_c3qmspacex_j4vas_c3qmspacex_j4vat_c3qmspacex_j4vau_c3qmspacex_j4vaw_c3qmspacex_j4vay_c3qmspacex_java_c3qspacex_java_c3qa
8.1.0

4 months ago

8.0.0

10 months ago

7.0.1

1 year ago

7.0.0

2 years ago

6.2.0

2 years ago

6.1.0

2 years ago

6.0.1

2 years ago

6.0.0

2 years ago

5.0.4

3 years ago

5.0.3

3 years ago

5.0.2

3 years ago

5.0.1

4 years ago

5.0.0

4 years ago

4.0.2

6 years ago

4.0.1

6 years ago

4.0.0

6 years ago

3.0.0

7 years ago

2.0.0

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.2

8 years ago

1.0.0

8 years ago