Как я могу исправить свою конфигурацию postcss, чтобы плагин «: has» работал?

Я использую postcss с vue 3 (vite). Вот моя конфигурация:

пакет.json

    "postcss-preset-env": "^7.8.3",

postcss.config.js

const postcssPresetEnv = require("postcss-preset-env");

module.exports = {
  plugins: [
    postcssPresetEnv({
      features: {
        "nesting-rules": true,
        "has-pseudo-class": true,
      },
    }),
  ],
};

Вложение работает, как и ожидалось, поэтому я думаю, что моя конфигурация верна.

has-pseudo-class ничего не делает в Firefox 107

Я знаю, что это не работает, потому что следующий код создает фиолетовую рамку в Chromium (который изначально поддерживает :has), но ничего не делает в Firefox 107:

.draggable:has(div) {
  border: 1px solid purple !important;
}

Что я делаю не так? Я неправильно понял, что делает плагин или как его использовать?

🤔 А знаете ли вы, что...
JavaScript имеет множество встроенных объектов, таких как Array, Date и Math.


3
108
2

Ответы:

Firefox не поддерживает псевдокласс :has, поэтому он не будет его заполнять.

Состояние документов Mozilla CSS «Начиная с версии 103: эта функция находится за настройками layout.css.has-selector.enabled (должно быть установлено значение true). Чтобы изменить настройки в Firefox, посетите страницу about:config».

См. характеристики браузера здесь


Решено

Это не сработало, потому что мне нужно было импортировать и загрузить полифил браузера.

Чтобы решить эту проблему, я добавил следующий код в свой HTML-заголовок.

<script src = "https://unpkg.com/[email protected]/dist/browser-global.js"></script>
<script>cssHasPseudo(document, { hover: true })</script>

Обратите внимание, что вам нужно сопоставить полифилл браузера с версией postcss-preset-env, которую вы используете.

Большое спасибо очень полезным людям из postcss discord chan за помощь в устранении этой неполадки.