Blazor CSS 隔离要点

玖亖伍
2024-08-23 / 0 评论 / 14 阅读 / 正在检测是否收录...
ASP.NET Core Blazor CSS 隔离

起因

在 Blazor 组件(Components)/页面(Pages)中, 难免有自定义的样式需要设置,查询 ASP.NET Core Blazor 文档后,发现了 CSS 隔离,但是反复尝试终不生效。

解决

经过多方搜索后,找到了解决方案,发现是使用方式不对,Blazor CSS 隔离 要求 使用 css class 的组件必须在 HTML 原生 Tag 内,所以需要将 Blazor 放到原生 HTML Tag 中。

完整步骤如下:

以基于 MudBlazor 的项目为例, 假设项目名为 WebUI
  1. 创建 Page (例: Components/Pages/Demo.razor)

    @page "/demo"
    
    <PageTitle>Demo</PageTitle>
    
    <MudText Typo="Typo.body2" class="custom-text">Vector</MudText>
  2. 创建 隔离 CSS 文件 (例: Components/Pages/Demo.razor.css)

    ::deep .custom-text {
     color: #fa1;
     font-size: 1.5rem;
    }
  3. Components/App.razor<head> </head> 之间添加如下代码, 引用 CSS 隔离 bundle 文件:

    <link href="@(nameof(WebUI)).styles.css" rel="stylesheet" />
  4. 这是发现是无效的,需要将 Page 中的 <MudText class="custom-text" ... 放到 HTML Tag 中(比如 div`), 修改后如下:

    @page "/demo"
    
    <PageTitle>Demo</PageTitle>
    
    <div>
    <MudText Typo="Typo.body2" class="custom-text">Vector</MudText>
    <div>

    再次运行即可生效。

注意: 编辑 css 文件后若重新运行未生效,可以尝试 Ctrl + F5 刷新缓存。

参考

MudAutoComplete - CSS Isolation of .mudpopover #1606

As I told you, you need to wrap the component in an html element, for example, in a div

<div>
  <MudPaper>
      <MudAutocomplete/>
  </MudPaper>
</div>

And then in your MyComponent.razor.css file, put your css code with deep

::deep .mud-popover {
    width: 600px !important;
    background-color: aliceblue !important;
}
1

评论 (0)

取消