Контекст: У меня есть проект Vue CLI, состоящий из двух основных частей: 1) то, что видят клиенты, и 2) то, что видит администратор.Клиентская часть использует Bootstrap CSS, а другая - Vue Material. Несмотря на то, что я планирую переписать часть материала Vue в Vuetify, проблема, скорее всего, сохранится.
Проблема: Bootstrap CSS конфликтует с VueМатериал CSS.Когда Bootstrap CSS применяется к разделу Vue Material, он выглядит испорченным.И наоборот.Когда CSS Vue Material применяется к разделу Bootstrap, он выглядит испорченным.
Есть ли какой-нибудь способ, которым я мог бы сделать эту работу?
Этот проект Vue раньше был инкапсулирован в проекте Laravel, интенсивно используя Laravel Mix.Затем я мог бы использовать файл микширования для компиляции всего Bootstrap CSS в один пакет.На этот пакет ссылаются на странице индекса, используя следующую строку:
<link rel="stylesheet" href="bootstrap-bundle.css" id="bootstrap-stylesheet">
<link rel="stylesheet" href="vue-material-bundle.css" id="vue-material-stylesheet">
Используя два компонента макета в Vue, я мог бы затем переключать таблицы стилей следующим образом:
// The Bootstrap layout component:
created() {
document.getElementById('bootstrap-stylesheet').disabled = false;
document.getElementById('vue-material-stylesheet').disabled = true;
}
// The Vue-Material layout component:
created() {
document.getElementById('bootstrap-stylesheet').disabled = true;
document.getElementById('vue-material-stylesheet').disabled = false;
}
Возможно, это не очень хорошее решение, но оно работает.Также работает в большинстве браузеров.
Однако теперь я использую Vue CLI вместо Laravel & Laravel Mix.Это означает, что я больше не могу назвать сгенерированный вывод так просто.
Я уже пробовал использовать глубокий селектор CSS: /deep/
& >>>
.Но это работает не полностью, так как bootstrap также устанавливает стили для элементов :root
, html
& body
.Поэтому при использовании глубокого селектора в CSS с областью видимости эти стили не применяются, потому что конечный результат будет выглядеть примерно так:
.customers-container {
body {
// bootstrap adds style to the body
}
}
Выше не работает, потому что тело не является потомком customers-container
но наоборот.
Я чувствую, что может быть решение с использованием имен пакетов или имен чанков или чего-то еще из конфигурации Webpack или Vue.Но моих знаний в Webpack недостаточно, чтобы решить это самостоятельно, и я не могу найти ответ в Интернете.