PostCSS Logical Properties lets you use Logical Properties and Values in CSS, following the CSS Logical Properties and Values Level 1 specification.
.banner {
color: #222222;
inset: logical 0 5px 10px;
padding-inline: 20px 40px;
resize: block;
}
/* used alongside postcss-nesting, postcss-dir-pseudo-class */
.banner {
color: #222222;
top: 0; left: 5px; bottom: 10px; right: 5px;
}
[dir="ltr"] .banner {
padding-left: 20px; padding-right: 40px;
}
[dir="rtl"] .banner {
padding-right: 20px; padding-left: 40px;
}
.banner {
resize: vertical;
}
/* used with { dir: 'ltr' } option */
.banner {
color: #222222;
top: 0; left: 5px; bottom: 10px; right: 5px;
padding-left: 20px; padding-right: 40px;
resize: vertical;
}These shorthand properties set values for physical properties by default.
Specifying the logical keyboard at the beginning of the property value will
transform the flow-relative values afterward into both physical LTR and RTL
properties:
border,border-block,border-block-start,border-block-end,border-inline,border-inline-start,border-inline-end,border-start,border-end,border-color,border-block-color,border-block-start-color,border-block-end-color,border-inline-color,border-inline-start-color,border-inline-end-color,border-start-color,border-end-color,border-style,border-block-style,border-block-start-style,border-block-end-style,border-inline-style,border-inline-start-style,border-inline-end-style,border-start-style,border-end-style,border-width,border-block-width,border-block-start-width,border-block-end-width,border-inline-width,border-inline-start-width,border-inline-end-width,border-start-width,border-end-width
inset,inset-block,inset-block-start,inset-block-end,inset-inline,inset-inline-start,inset-inline-end,inset-start,inset-end
margin,margin-block,margin-block-start,margin-block-end,margin-inline,margin-inline-start,margin-inline-end,margin-start,margin-end
padding,padding-block,padding-block-start,padding-block-end,padding-inline,padding-inline-start,padding-inline-end,padding-start,padding-end
block-size,inline-size
clear: inline-start,clear: inline-end,float: inline-start,float: inline-end,text-align: start,text-align: end
By default, PostCSS Logical Properties changes the selector weight of flow-relative declarations and requires at least one [dir] attribute in your HTML. If you don’t have any [dir] attributes, consider using the following JavaScript:
// force at least one dir attribute (this can run at any time)
document.documentElement.dir=document.documentElement.dir||'ltr';Otherwise, consider using the dir option to transform all logical properties
and values to a specific direction.
require('postcss-logical')({
dir: 'ltr'
});Add PostCSS Logical Properties to your build tool:
npm install postcss-logical --save-devUse PostCSS Logical Properties to process your CSS:
require('postcss-logical').process(YOUR_CSS);Add PostCSS to your build tool:
npm install postcss --save-devUse PostCSS Logical Properties as a plugin:
postcss([
require('postcss-logical')(/* options */)
]).process(YOUR_CSS);Add Gulp PostCSS to your build tool:
npm install gulp-postcss --save-devUse PostCSS Logical Properties in your Gulpfile:
var postcss = require('gulp-postcss');
gulp.task('css', function () {
return gulp.src('./src/*.css').pipe(
postcss([
require('postcss-logical')(/* options */)
])
).pipe(
gulp.dest('.')
);
});Add Grunt PostCSS to your build tool:
npm install grunt-postcss --save-devUse PostCSS Logical Properties in your Gruntfile:
grunt.loadNpmTasks('grunt-postcss');
grunt.initConfig({
postcss: {
options: {
use: [
require('postcss-logical')(/* options */)
]
},
dist: {
src: '*.css'
}
}
});