Да, вы правильно определили проблему. Решение состоит в том, чтобы сделать ваш стиль глобальным с помощью псевдо-селектора :global
magi c ( docs ).
<style>
/* this will not be removed, and not scoped to the component */
:global(.foo) { ... }
/* this will not be removed, but still scoped to divs inside _this_ component */
div :global(.bar) { ... }
</style>
CSS определение объема в Svelte реализовано путем добавления уникального Класс для CSS селекторов, как вы их создали. Например, если вы напишите .foo
, компилятор превратит его в .svelte-a3bmb2.foo
.
Чтобы это работало, компилятору также необходимо добавить этот класс ко всем элементам, соответствующим селектору .foo
. Он может сделать это для элементов, которые он видит в разметке. Но он не может сделать это для элементов, которые динамически создаются во время выполнения.
Вот почему (я полагаю) Svelte удаляет CSS правил, которые ничего не соответствуют в разметке компонента. Когда это происходит, компилятор обычно выдает предупреждения, например «неиспользуемый CSS селектор».
Если вы сделаете стили глобальными, компилятору больше не нужно их расширять, поэтому проблема решена.