Эти вопросы похожи на некоторые другие в StackOverflow, но я не смог найти ответа, описывающего мою ситуацию и метод, который не осуждается (и я начинаю думать, что, возможно, не существует какого-либо хорошего решения для этой ситуации) .
Допустим, у нас есть файл main.css, который включает в себя общие стили для кнопок, списков, ссылок и так далее. Так что это просто какой-то стандартный файл .css, который содержит общие стили, которые мы хотим использовать в приложении. И мы хотим применить те же стили к веб-компонентам с Shadow DOM.
Я знаю несколько способов сделать это:
- Использование одного из устаревших подходов: :: shadow, >>>, / deep / selectors. Но эти селекторы уже устарели, так что я думаю, что это плохой подход, чтобы двигаться вперед.
- Использование переменных CSS. Этот подход хорош для настройки, если нам нужно установить несколько свойств. Но это слишком сложно, если мы хотим перенести 10-20 общих стилей из файла main.css.
- Использование оператора @import или тегов "link" внутри Shadow DOM. Это будет работать, но дублирует все стили для каждого компонента. Если у нас будет 10 веб-компонентов, мы получим 10 дубликатов одинаковых стилей. Это не похоже на достаточно хорошее решение тоже. Особенно, если у нас много общих стилей, звучит так, будто это может быть плохим решением с точки зрения производительности.
- Ни в коем случае не используйте Shadow DOM и используйте глобальные стили :) Но это не решение текущей проблемы.
Я также проверил, как эта проблема решена в Angular Framework (я проверил версию 5 Angular). Когда я устанавливаю поведение инкапсуляции в Native, оно просто дублирует стили (как в # 3, описанном выше), что, я думаю, не лучший способ (но, возможно, лучший из существующих в настоящее время).
Итак, кто-нибудь знает, есть ли другой способ решения этой проблемы без описанных выше недостатков? Это звучит так, будто текущие недостатки Shadow DOM приносят еще больше проблем, чем пытаются решить.