Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
postcss-media-minmax
Advanced tools
Using more intuitive `>=`, `<=`, `>`, `<` instead of media queries min/max prefix.
The postcss-media-minmax npm package allows developers to write more expressive and flexible CSS media queries. Instead of using the traditional min-width and max-width syntax, it enables the use of more intuitive 'width >= x' and 'width <= y' syntax within media queries. This package is part of the PostCSS ecosystem, which is a tool for transforming CSS with JavaScript.
Simplified Media Query Ranges
This feature allows developers to write media queries with a clearer and more intuitive syntax. Instead of using 'min-width: 500px' and 'max-width: 1200px', you can directly specify the range using '>= and <='.
@media (width >= 500px) and (width <= 1200px) { body { background-color: lightblue; } }
Support for Logical Operators
This feature supports logical operators to define media query ranges, making it easier to read and maintain. It simplifies the process of setting styles for specific device sizes or orientations.
@media (500px <= width < 1200px) { body { font-size: 16px; } }
This package allows you to define custom aliases for media queries, which can be reused throughout your stylesheets. It differs from postcss-media-minmax by focusing on custom named media queries rather than enhancing the syntax of media condition expressions.
This package automates responsive typography. It provides functionality to adjust font sizes, line heights, and other typography-related CSS properties based on viewport sizes. While it also deals with responsive design, it is more specialized compared to the broad syntax enhancements offered by postcss-media-minmax.
Writing simple and graceful media queries!
The min-width
, max-width
and many other properties of media queries are really confusing. I want to cry every time I see them. But right now according to the new specs, you can use more intuitive <=
or >=
to replace the min-
/max-
prefixes in media queries.
V2.1.0 began to support >
or <
symbol.
This is a polyfill plugin which supports CSS Media Queries Level 4 and gives you access to the new features right away. Mom will never worry about my study any more. So amazing!
$ npm install postcss-media-minmax
Example 1:
var fs = require('fs')
var postcss = require('postcss')
var minmax = require('postcss-media-minmax')
var css = fs.readFileSync('input.css', 'utf8')
var output = postcss()
.use(minmax())
.process(css)
.css
console.log('\n====>Output CSS:\n', output)
Or just:
var output = postcss(minmax())
.process(css)
.css
input.css:
@media screen and (width >= 500px) and (width <= 1200px) {
.bar {
display: block;
}
}
You will get:
@media screen and (min-width: 500px) and (max-width: 1200px) {
.bar {
display: block;
}
}
<mf-range> = <mf-name> [ '<' | '>' ]? '='? <mf-value>
| <mf-value> [ '<' | '>' ]? '='? <mf-name>
| <mf-value> '<' '='? <mf-name> '<' '='? <mf-value>
| <mf-value> '>' '='? <mf-name> '>' '='? <mf-value>
PostCSS Media Minmax hasn't implemented syntax such as 200px > = width
or 200px < = width
currently because its readability is not good enough yet.
The special values:
The value type is a positive (not zero or negative) followed by optional whitespace, followed by a solidus ('/'), followed by optional whitespace, followed by a positive . s can be ordered or compared by transforming them into the number obtained by dividing their first by their second .
@media screen and (device-aspect-ratio: 16 / 9) {
/* rules */
}
/* equivalent to */
@media screen and (device-aspect-ratio: 16/9) {
/* rules */
}
The value type is an with the value 0 or 1. Any other integer value is invalid. Note that -0 is always equivalent to 0 in CSS, and so is also accepted as a valid value.
@media screen and (grid: -0) {
/* rules */
}
/* equivalent to */
@media screen and (grid: 0) {
/* rules */
}
In Example 1, if a feature has both >=
and <=
logic, it can be written as follows:
@media screen and (500px <= width <= 1200px) {
.bar {
display: block;
}
}
/* Or */
@media screen and (1200px >= width >= 500px) {
.bar {
display: block;
}
}
Which will output:
@media screen and (min-width: 500px) and (max-width: 1200px) {
.bar {
display: block;
}
}
Note: When the media feature name is in the middle, we must ensure that two <=
or >=
are in the same direction, otherwise which will not be converted.
E.g. in the example below, width
is greater than or equal to 500px and is greater than or equal to 1200px, which is the wrong in both grammar and logic.
@media screen and (1200px <= width >= 500px) {
.bar {
display: block;
}
}
The following properties support the min-
/max-
prefixes in the specifications at present, and will be automatically converted by PostCSS Media Minmax.
width
height
device-width
device-height
aspect-ratio
device-aspect-ratio
color
color-index
monochrome
resolution
@custom-media
& Node Watchvar fs = require('fs')
var chokidar = require('chokidar')
var postcss = require('postcss')
var minmax = require('postcss-media-minmax')
var customMedia = require('postcss-custom-media')
var src = 'input.css'
console.info('Watching…\nModify the input.css and save.')
chokidar.watch(src, {
ignored: /[\/\\]\./,
persistent: true
}).on('all',
function(event, path, stats) {
var css = fs.readFileSync(src, 'utf8')
var output = postcss()
.use(customMedia())
.use(minmax())
.process(css)
.css;
fs.writeFileSync('output.css', output)
})
input.css:
@custom-media --foo (width >= 20em) and (width <= 50em);
@custom-media --bar (height >= 300px) and (height <= 600px);
@media (--foo) and (--bar) {
}
output.css:
@media (min-width: 20em) and (max-width: 50em) and (min-height: 300px) and (max-height: 600px) {
}
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
postcss: {
options: {
processors: [
require('autoprefixer-core')({ browsers: ['> 0%'] }).postcss, //Other plugin
require('postcss-media-minmax')(),
]
},
dist: {
src: ['src/*.css'],
dest: 'build/grunt.css'
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-postcss');
grunt.registerTask('default', ['postcss']);
}
var gulp = require('gulp');
var rename = require('gulp-rename');
var postcss = require('gulp-postcss');
var selector = require('postcss-media-minmax')
var autoprefixer = require('autoprefixer-core')
gulp.task('default', function () {
var processors = [
autoprefixer({ browsers: ['> 0%'] }), //Other plugin
minmax()
];
gulp.src('src/*.css')
.pipe(postcss(processors))
.pipe(rename('gulp.css'))
.pipe(gulp.dest('build'))
});
gulp.watch('src/*.css', ['default']);
$ git clone https://github.com/postcss/postcss-media-minmaxs.git
$ git checkout -b patch
$ npm install
$ npm test
Thank the author of PostCSS Andrey Sitnik for giving us such simple and easy CSS syntax analysis tools.
Thank Tab Atkins Jr. for writing the specs of Media Queries Level 4.
Thank ziyunfei for suggestions and help of this plugin.
5.0.0 2021-01-12
FAQs
Using more intuitive `>=`, `<=`, `>`, `<` instead of media queries min/max prefix.
The npm package postcss-media-minmax receives a total of 2,848,344 weekly downloads. As such, postcss-media-minmax popularity was classified as popular.
We found that postcss-media-minmax demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.