Переопределение изолированного css в библиотеке компонентов blazor путем использования приложения

#blazor #scss-mixins #bootstrap-sass #razor-class-library

#blazor #scss-mixins #bootstrap-sass #razor-class-library

Вопрос:

Я настроил библиотеку компонентов blazor, которая определяет несколько компонентов blazor изолированные файлы CSS. Эти файлы css загружаются из файлов sass, в которых я указываю сеточную систему начальной загрузки с использованием миксинов начальной загрузки, например @include make-col-ready(); или @include make-col(4); .

Все это работает хорошо, и компоненты CSS и blazor могут использоваться моим приложением blazor webassembly, которое я настроил с зависимостью ссылки проекта от библиотеки компонентов.

Теперь идеальной ситуацией было бы, если бы я мог использовать изолированный CSS в библиотеке компонентов в качестве стиля по умолчанию, но я могу переопределить этот стиль (а также загрузочные микшеры) в потребляющем приложении. В идеале я хотел бы иметь !переменные sass по умолчанию, настроенные в моей библиотеке компонентов, которые используются для определения, использовать ли css по умолчанию или не включать его вообще. Я попробовал что-то вроде следующего фрагмента кода (просто краткий набросок, не следует воспринимать слишком серьезно), но, насколько я понимаю, невозможно переопределить эти переменные до того, как они будут скомпилированы в css для импорта потребляющего приложения.

 /* Component css */
$defaultComponentCss: true !defau<


@mixin foobar($defaultComponentCss) {
    @if($defaultComponentCss) {
        border-radius: 10px;
        background-color: red;
        border-top-right-radius: 83px;
    }
}

.main-content {
    @include foobar($defaultComponentCss);
}

/* SCSS file in the consuming application*/
$defaultComponentCss: false;

/*[non-default styling]*/
 

TL; DR;
Есть ли способ настроить библиотеку компонентов blazor, чтобы потребляющее приложение могло переопределять существующий изолированный css (в библиотеке компонентов), чтобы можно было использовать разные микшеры bootstrap grid?

Надеюсь, я предоставил достаточно контекста, если нет, я был бы рад предоставить больше.

Заранее спасибо!

Ответ №1:

Изоляция Blazor CSS добавляет случайный идентификатор области, начинающийся с b-, к вашему компоненту во время компиляции. Итак, пример HTML выглядит примерно так:

 <div class="ocblCalendarDay selectedDate" b-9qatbelgxs>13</div>
 

Обратите внимание на b-9qatbelgxs

Поскольку это случайное, вам нужно переопределить это и присвоить ему имя. Откройте ваш файл .csproj для вашей библиотеки компонентов и добавьте это:

 <ItemGroup>
    <None Update="*.razor.css" CssScope="my-scope" />
</ItemGroup>
 

Если у вас много компонентов или они находятся во вложенных папках, я бы рекомендовал создать область CSS для каждого из них. Вот мой пример просмотра календаря:

 <ItemGroup>
    <None Update="Calendar/CalendarDataView.razor.css" CssScope="ocbl-calendardataview-css" />
</ItemGroup> 
 

Скомпилируйте свою библиотеку компонентов, и теперь имя области будет установлено:

 <div class="ocblCalendarDay selectedDate" ocbl-calendardataview-css="">13</div>
 

Теперь в вашем проекте CSS (а не в вашей библиотеке компонентов) вы можете переопределить стиль следующим образом:

 .ocblCalendarDay.selectedDate[ocbl-calendardataview-css] {
    background-color: #FF0000;
}
 

Убедитесь, что ваша ссылка на CSS находится после ссылки на CSS bundle.