Как предотвратить удаление логических свойств CSS с помощью postcss-preset-env?

#css #webpack #postcss

#css #webpack #postcss

Вопрос:

При использовании следующего в моей конфигурации Webpack:

 {
  test: /.scss$/i,
  use: [
    'style-loader',
    {
      loader: 'css-loader',
      options: { importLoaders: 1 },
    },
    {
      loader: 'postcss-loader',
      options: {
        postcssOptions: {
          plugins: [
            [
              'postcss-preset-env'
            ],
          ],
        },
      },
    },
    "sass-loader"
  ],
},
  

Я замечаю, что иногда правила CSS, подобные приведенным ниже, удаляются из связанного вывода CSS.

 img {
  margin-inline-end: 1rem;
}
  

При удалении вышеупомянутой конфигурации Webpack, приведенное выше правило применяется, как и ожидалось.

Более конкретно:

  • когда [dir="rtl"] html для элемента установлен атрибут, margin-inline-end: 1rem; стиль существует
  • когда dir атрибут не задан, margin-inline-end: 1rem; стиль не существует в связанном выводе
  • когда 'postcss-preset-env' плагин удаляется, margin-inline-end: 1rem; стиль существует независимо от наличия [dir] атрибута

Что вызывает такое поведение и как я могу отключить его, продолжая использовать postcss-preset-env для других подобных autoprefixer целей?

Ответ №1:

По умолчанию postcss-preset-env выполняется обработка правил этапа 2 , в зависимости от точной версии cssdb was установлен, вам может потребоваться настроить stage параметр при использовании postcss-preset-env на более высокое значение, например stage: 3 .

И похоже, что некоторые логические свойства, такие как margin-inline-end , будут обработаны в

 [dir='ltr'] { margin-right: 1rem } ...
  

Кроме того, правила также могут быть отключены именно в опции :

 {
  /* use stage 2 features   disable logical properties and values rule */
  stage: 2,
  features: {
    'logical-properties-and-values': false
  }
}
  

Это репозиторий vanilla-js-prototype-starter на github webpack PostCSS настроен и работает хорошо, проверьте и посмотрите, может ли это немного помочь.

Комментарии:

1. Удивительно, изменение этапа Nuxt по умолчанию с 2 на 3 позволило включить логические свойства CSS в окончательный пакет CSS. Спасибо!