Как правильно использовать новый синтаксис Media Query в CSS
Реализация нового синтаксиса Media Queries Level 4
уже появилась во всех браузерах, а конкретнее в Firefox 63+, Chrome 104+.
Зачем нам ещё один синтаксис?
Для начала сравним оба синтаксиса:
Старый:
.teaser__image {
width: 100%;
}
@media (max-width: 619px) {
.teaser__image {
width: 100px;
}
}
@media (min-width: 620px) and (max-width: 768px) {
.teaser__image {
width: 180px;
}
}
Новый:
.teaser__image {
width: 100%;
}
@media (width < 620px) {
.teaser__image {
width: 100px;
}
}
@media (620px <= width <= 768px) {
.teaser__image {
width: 180px;
}
}
Как мы видим, старый синтаксис довольно громоздкий, и не такой интуитивный. Новый синтаксис простой и компактный, а также близок к математическим операциям сравнения.
Новый синтаксис можно описать в схеме:
Что делать со старыми браузерами?
Здесь на помощь придёт PostCSS
.
PostCSS
— инструмент, написанный на Node.js Андреем Ситником для автоматизации рутинных операций CSS
. PostCSS
ещё называют Post-processor
, так как его обычно запускают уже после начальной компиляции стилей. Возможности PostCSS
можно расширять с помощью плагинов.
Самый известный плагин — это autoprefixer
, который используют многие, но не многие знают, что он разработан именно как плагин к PostCSS
.
Множество плагинов PostCSS
позволяют нам писать код, используя новейшие возможности CSS
, на выходе компилируя всё это в код, понятный старым браузерам.
Подключаем новый синтаксис
Устанавливаем плагин PostCSS
:
npm i -D postcss postcss-media-minmax
Создаём файл postcss.config.js
для конфигурации PostCSS
.
const mediaMinMax = require('postcss-media-minmax');
module.exports = {
plugins: [mediaMinMax],
};
Дальше подключаем PostCSS
. Это уже зависит от используемого сборщика.
Eleventy
Например для генератора статических сайтов Eleventy
(на котором работает этот блог) код подключения будет:
npm i -D eleventy-postcss-extension
И добавляем в .eleventy.js
:
const pluginCSS = require('eleventy-postcss-extension')
eleventyConfig.addPlugin(pluginCSS)
Gulp
Для Gulp
нужно будет дополнительно установить:
npm i -D gulp-postcss
И затем добавить в pipeline:
const postcss = require('gulp-postcss');
// gulp code here
.pipe(postcss())
Плагины будут подключены из конфигурационного файла, который мы написали ранее.
Nuxt
Nuxt поддерживает PostCSS
из коробки. Поэтому для подключения плагинов нужно просто добавить их в соответствующую секцию конфигурационного файла nuxt.config.js
:
export default defineNuxtConfig({
...
postcss: {
plugins: {
'postcss-media-minmax': {},
},
},
...
})
Ссылки: