π English β« O'zbek
PostcSS Sort Qedia Queries is a powerful and flexible PostCSS plugin for sorting and combining CSS media queries using mobile-first or desktop-first methodologies. It helps maintain a clean, predictable stylesheet structure, improves readability, and prevents unexpected style overrides.
A key advantage of this plugin is its full support for nested media queries, ensuring correct processing and ordering even in complex, deeply structured stylesheets. This makes it perfectly suited for modern CSS workflows that rely on nesting via PostCSS or preprocessor-like patterns.
In addition, the plugin fully supports CSS Media Queries Level 4, including modern range syntax.
Sorting works based on OlehDutchenko/sort-css-media-queries.
- Install
- Usage
- Options
- Online demo
- Examples (with nested media queries)
- Changelog
- License
- Other PostCSS plugins
- Thanks πͺ
npm install postcss postcss-sort-media-queries --save-dev
Check you project for existed PostCSS config: postcss.config.js
in the project root, "postcss" section in package.json
or postcss in bundle config.
// CJS
let sortCssMq = require('postcss-sort-media-queries');
// ESM
import sortCssMq from 'postcss-sort-media-queries';If you already use PostCSS, add the plugin to plugins list:
module.exports = {
plugins: [
+ require('postcss-sort-media-queries')({
+ sort: 'mobile-first' | 'desktop-first' | function // default ('mobile-first')
+ }),
]
}or with custom sort function
module.exports = {
plugins: [
+ require('postcss-sort-media-queries')({
+ sort: function(a, b) {
+ // custom sorting function
+ }
+ }),
]
}If you do not use PostCSS, add it according to official docs and set this plugin in settings.
Sorting works based on OlehDutchenko/sort-css-media-queries
This option support string or function values.
{string}'mobile-first'- (default) mobile first sorting{string}'desktop-first'- desktop first sorting{function}your own sorting function
postcss([
sortMediaQueries({
sort: 'mobile-first' | 'desktop-first' // default (mobile-first)
})
]).process(css);postcss([
sortMediaQueries({
function(a, b) {
return a.localeCompare(b);
}
})
]).process(css);In this example, all your media queries will sort by A-Z order.
This sorting function is directly passed to Array#sort() method of an array of all your media queries.
By this configuration you can control sorting behaviour.
postcss([
sortMediaQueries({
configuration: {
unitlessMqAlwaysFirst: true, // or false
}
})
]).process(css);Or alternatively create a sort-css-mq.config.json file in the root of your project. Or add property sortCssMQ: {} in your package.json.
And here is the Online Demo
root
β
βββ (min-width: 1400px)
βββ (min-width: 1200px)
β
βββ @layer reset
β
βββ (min-width: 1200px)
β βββ (min-width: 992px)
β βββ (min-width: 768px)
β
βββ (min-width: 768px)
βββ (min-width: 640px)
βββ (min-width: 320px)root
β
βββ @layer reset
β β
β βββ (min-width: 768px)
β β βββ (min-width: 320px)
β β βββ (min-width: 640px)
β β
β βββ (min-width: 1200px)
β βββ (min-width: 768px)
β βββ (min-width: 992px)
β
βββ (min-width: 1200px)
βββ (min-width: 1400px)Before
root
β
βββ (width < 640px)
βββ (min-width: 760px)
βββ (width < 640px)
βββ (min-width: 1280px)
βββ (max-width: 760px)
βββ (max-width: 640px)After
root
β
βββ (min-width: 760px)
βββ (max-width: 640px)
βββ (width < 640px)
βββ (max-width: 760px)
βββ (min-width: 1280px)See Releases history
postcss-momentum-scrolling- plugin for adding momentum style scrolling behavior (-webkit-overflow-scrolling:touch) for elements with overflow (scroll, auto) on iOS (deprecated for modern Safari)
- Andrey Sitnik @ai
- Oleh Dutchenko @OlehDutchenko
- Jakub Caban @Lustmored
- Dmytro Symonov @Kassaila
- Kai Falkowski @SassNinja
- Khayot Razzakov @Khayotbek1
- ReindDooyeweerd @ReindDooyeweerd
- msev @msev