Префикс импорта с классами для тематики не работает

Я использую Bootswatch и Bootstrap, чтобы предоставить две темы для приложения Angular. С одной темой, которая используется все время, я могу сделать следующее:

@import "~bootswatch/dist/yeti/variables";
@import "~bootstrap/scss/bootstrap";
@import "~bootswatch/dist/yeti/bootswatch";
@import "./assets/custom.scss";

Моя идея предоставить пользователям возможность переключать темы заключалась в следующем:

.yeti {
    @import "~bootswatch/dist/yeti/variables";
    @import "~bootstrap/scss/bootstrap";
    @import "~bootswatch/dist/yeti/bootswatch";
    @import "./assets/custom.scss";
}

.darkly {
    @import "~bootswatch/dist/darkly/variables";
    @import "~bootstrap/scss/bootstrap";
    @import "~bootswatch/dist/darkly/bootswatch";
    @import "./assets/custom.scss";
}

Затем я могу применить класс yeti или darkly к корневому элементу html, и должна быть применена соответствующая тема, которую легко изменить, поменяв классы местами. Я знаю, что это дважды дублирует CSS Bootstrap 4, я новичок в SASS, так что это лучший способ, который я мог придумать.

Это отлично работает, когда я собираю с ng build --ec, но когда я пытаюсь собрать prod ng build --prod, я получаю следующие ошибки:

WARNING in Unexpected '}' at 7837:43.

WARNING in Unexpected '}' at 15101:43.

WARNING in Invalid property name '.yeti {
        size' at 7820:6. Ignoring.

WARNING in Invalid selector '}
.yeti .navbar' at 7837:43. Ignoring.

WARNING in Invalid property name '.darkly {
        size' at 15084:6. Ignoring.

WARNING in Invalid selector '}
.darkly .bg-primary .navbar-nav .active > .nav-link' at 15101:43. Ignoring.

Это значительно нарушает мою навигационную панель, чего не произошло, когда тот же самый SASS был создан для режима отладки. После некоторого покопания в файлах bootswatch и bootstrap SASS я обнаружил, что .bg-primary .navbar-nav .active > .nav-link является первым правилом в файле bootwatch ~bootswatch/dist/[theme]/bootswatch, что наводит меня на мысль, что существует некоторая проблема при объединении файлов ~bootstrap/scss/bootstrap и ~bootswatch/dist/[theme]/bootswatch с помощью селектора классов темы (либо darkly, либо yeti). Есть ли способ исправить эту ошибку или «игнорировать» ее, как это делает отладочная сборка?

Вы нашли решение ? У меня такая же проблема

Joe Allen 28.02.2020 14:03

@JoeAllen Я нашел решение, но отказался от него из-за большого размера финальной сборки. К сожалению, я не могу вспомнить, как именно я это сделал, но я бы не стал рекомендовать решение, которое придумал.

ashraj98 02.04.2020 21:28
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
2
93
0

Другие вопросы по теме