#html #css
#HTML #css
Вопрос:
Я разрабатываю компонент React / MaterialUI, который будет встроен в существующие веб-сайты.
Чтобы свести к минимуму работу, необходимую на существующей странице для встраивания моего компонента, я объединяю свой компонент в app.js и единственное изменение, запрошенное для существующей страницы, это что-то вроде:
<div id="embedded-component"></div>
<script type="text/javascript" src="https://example.com/app.js"></script>
мой компонент находит div по идентификатору и затем монтирует этот элемент.
В основном все работает, но у меня возникают проблемы с CSS-конфликтами между CSS-файлами на исходной странице (которые я не могу изменить) и элементами моего приложения.
Например, исходная страница использует элементы ввода текста с рамкой / отступом / цветом, которые я не хочу, чтобы мой компонент «наследовал». Я хочу, чтобы мой компонент отображался одинаково, независимо от того, на какой странице он встроен.
Есть ли какая-либо стратегия / инструмент для использования в этом случае, чтобы классы CSS на существующей странице не влияли на элементы моего встроенного компонента?
Пытаясь найти решение этой проблемы, я наткнулся на Shadow DOM (например https://medium.com/rate-engineering/winning-the-war-of-css-conflicts-through-the-shadow-dom-de6c797b5cba ) но я не уверен, насколько широко это поддерживается в разных браузерах.
Есть ли какое-либо решение для этого, которое широко поддерживается всеми основными браузерами?
Я не могу использовать iframes и иметь полный контроль над своими файлами js / css, но не могу контролировать существующую страницу, кроме «монтируемого» div.
Комментарии:
1. Вы пытались перезаписать свойства, с которыми у вас возникли конфликты?
2. Возможно, вы захотите просмотреть таблицы стилей сброса: meyerweb.com/eric/tools/css/reset Вам придется выполнить сброс с той же спецификацией, с которой они были первоначально объявлены.
3. Спасибо. Я пытаюсь не перезаписывать конфликты CSS явно, поскольку мой компонент будет встроен во множество разных веб-страниц, для которых потребуется другая / специфическая логика перезаписи для каждой страницы. Я использую CSSBaseline от MaterialUI, который, если я правильно понимаю, должен иметь некоторые сбросы CSS.
4. @user2987504 вы нашли решение своей проблемы? У меня похожая проблема.
5. в итоге мне пришлось использовать iframes, хотя я пытался этого не делать. Возможно, это поможет: medium.com/@ryanseddon /…