首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Blazor应用程序不会向razor类库组件元素添加css隔离范围标识符

基础概念

Blazor 是一个用于构建交互式 Web UI 的框架,使用 C# 和 HTML 来创建丰富的客户端 Web 应用程序。Razor 类库(Razor Class Library, RCL)是一种将 Razor 组件封装成可重用的库的方式。

CSS 隔离范围标识符(CSS Isolation Scope Identifier)用于确保组件的样式不会影响到其他组件或全局样式。

相关优势

  1. 样式隔离:确保组件的样式不会与其他组件或全局样式冲突。
  2. 可重用性:通过 RCL,可以将组件封装成库,方便在不同项目中重用。
  3. 维护性:组件样式隔离使得维护和更新样式更加容易。

类型

Blazor 中的 CSS 隔离主要有两种方式:

  1. Scoped CSS:样式仅应用于当前组件及其子组件。
  2. Shadow DOM:通过 Shadow DOM 技术实现更严格的样式隔离。

应用场景

当你在开发 Blazor 应用程序时,特别是当你需要创建可重用的组件库时,CSS 隔离是非常重要的。它可以防止组件之间的样式冲突,确保每个组件的样式独立。

问题原因

Blazor 应用程序不会向 Razor 类库组件元素添加 CSS 隔离范围标识符的原因可能有以下几种:

  1. 配置问题:可能是因为项目配置中没有正确启用 CSS 隔离。
  2. 版本问题:使用的 Blazor 版本可能不支持某些 CSS 隔离特性。
  3. 代码问题:可能在编写组件时没有正确使用 CSS 隔离的语法。

解决方法

1. 检查项目配置

确保在 *.csproj 文件中启用了 CSS 隔离。例如:

代码语言:txt
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
    <RazorLangVersion>6.0</RazorLangVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="6.0.0" />
  </ItemGroup>

  <ItemGroup>
    <None Update="wwwroot/css/site.css">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>

2. 使用 Scoped CSS

在组件中使用 scoped 属性来确保样式仅应用于当前组件。例如:

代码语言:txt
复制
@page "/scoped-component"
@inject IJSRuntime JSRuntime

<h3>Scoped Component</h3>

<div class="scoped-div">
    This is a scoped component.
</div>

<style scoped>
.scoped-div {
    background-color: lightblue;
    padding: 10px;
    border: 1px solid black;
}
</style>

3. 使用 Shadow DOM

如果需要更严格的样式隔离,可以使用 Shadow DOM。Blazor 支持通过 @implements IJSObjectReferenceIJSRuntime 来与 JavaScript 交互,从而使用 Shadow DOM。

代码语言:txt
复制
@implements IJSObjectReference

<h3>Shadow DOM Component</h3>

<div ref="shadowHost">
    This is a component using Shadow DOM.
</div>

@code {
    private ElementReference shadowHost;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            var shadow = await JSRuntime.InvokeAsync<ShadowRoot>("attachShadow", new object[] { new DotNetObjectReference(this), true });
            await JSRuntime.InvokeVoidAsync("createShadowDOM", shadowHost, shadow);
        }
    }

    [JSInvokable]
    public void UpdateMessage(string message)
    {
        // Handle messages from JavaScript
    }
}

在 JavaScript 中:

代码语言:txt
复制
window.createShadowDOM = function (hostElement, shadowRoot) {
    const div = document.createElement('div');
    div.innerHTML = `
        <style>
            .shadow-div {
                background-color: lightgreen;
                padding: 10px;
                border: 1px solid black;
            }
        </style>
        <div class="shadow-div">
            This is a component using Shadow DOM.
        </div>
    `;
    shadowRoot.appendChild(div);
};

参考链接

通过以上方法,你应该能够解决 Blazor 应用程序不会向 Razor 类库组件元素添加 CSS 隔离范围标识符的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

code,@key,@namespace,@functions中的标记 Blazor指令属性 Blazor应用程序的身份验证和授权支持 Razor中的静态资产 Json.NET不再在项目模板中引用...文件中使用了新的@key指令属性,以指定Blazor diffing算法可用于保留列表中的元素组件的值(任何对象或唯一标识符)。...通过使用@keydiffing算法添加键可以关联新旧元素组件。 @namespace 在*_Imports.razor*文件中使用时,指定生成的或名称空间前缀的名称空间。...要在Razor中包含静态资源,请将一个wwwroot文件夹添加Razor中,并在该文件夹中包含所有必需的文件。...发布应用程序后,所有引用的Razor中的伴随资源将以相同的前缀复制到已发布应用程序的wwwroot文件夹中。

6.7K20

Blazor资源大全,很棒的Blazor(2)

支持Blazor通过Clipboard浏览器API。 CssBuilder - CssBuilder是用于Razor组件CSS的构建器模式。...在本次演讲中,我们将探讨Blazor开发人员面临的各种与CSS相关的架构决策。与会者将学习何时以及如何使用纯CSS、Sass或CSS隔离Blazor。我们将讨论自定义CSS属性等现代CSS技术。...如何构建快速且可重用的 Blazor 代码 - 2023年4月3日 - 微软甚至提供了一个使用 Blazor 构建可重用组件的学习模块,展示了如何构建包含 Blazor 组件Razor ,将 Razor...打包供其他 Blazor 应用程序使用,并在 Blazor 应用程序中引用 Razor 并使用其组件。...使用 Razor ,我们可以在所有 Blazor 类型的项目中使用我们的 Razor 组件,如 Blazor Server、WASM 和 MAUI Hybrid。

77720
  • .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    文件中使用了新的@key指令属性,以指定Blazor diffing算法可用于保留列表中的元素组件的值(任何对象或唯一标识符)。...通过使用@keydiffing算法添加键可以关联新旧元素组件。 @namespace 在_Imports.razor文件中使用时,指定生成的或名称空间前缀的名称空间。...要在Razor中包含静态资源,请将一个wwwroot文件夹添加Razor中,并在该文件夹中包含所有必需的文件。...发布应用程序后,所有引用的Razor中的伴随资源将以相同的前缀复制到已发布应用程序的wwwroot文件夹中。...要尝试使用Razor中的静态资源:创建默认的ASP.NET Core Web App。dotnet new webapp -o WebApp1创建一个Razor并从Web应用程序引用它。

    6K20

    全面的ASP.NET Core Blazor简介和快速入门

    App.razor 为应用的根组件。 Pages 存放应用程序Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。...Shared 存放多个 Razor 页面或组件之间共享的组件、布局和其他视图元素等。 wwwroot 该文件夹包含静态文件,例如图片、字体、图标、CSS 和 JavaScript 文件等。...App.razor应用程序的启动路由页面,里面规定了默认Layout。 Pages 存放应用程序Razor 页面,每个 Razor 页面都对应着一个组件,用于呈现应用程序的 UI 元素。...Shared 存放公共 Razor 页面或组件之间共享的组件、布局和其他视图元素等。 wwwroot 该文件夹包含静态文件,例如图片、字体、图标、CSS 和 JavaScript 文件等。...,所有必要的代码(HTML、JavaScript和CSS)都通过单个页面的加载而检索,或者根据需要(通常是为响应用户操作)动态装载适当的资源并添加到页面页面在任何时间点都不会重新加载,也不会将控制转移到其他页面举个例子来讲就是一个杯子

    1.1K20

    MAUI 与 Blazor 共享一套 UI 实现(五端通用)

    和 XAML 创建本机移动和桌面应用程序, 使用 .net MAUI,可以开发可在 Android、iOS、macOS 上运行的应用,Windows 以及从单个共享代码运行的应用。...文件@code{}中的),那把这部分文件直接提取到中就可以了,那就做吧。...提取UI到Razor 创建Razor:Dotnet9.WebApp 下面开始UI的提取 如上图,将Dotnet9.MAUI项目的Data、Pages、Shared三个目录外加Main.razor...组件相关的代码、路由组件等放在这个工程,供其他项目引用 Dotnet9.Server:Blazor Server模板项目 Dotnet9.Wasm:Blazor WebAssembly项目 Dotnet9....MAUI:MAUI Blazor项目 一句话:将UI封装到RazorDotnet9.WebApp,其他终端工程(Dotnet9.Server、Dotnet9.MAUI、Dotnet9.Wasm)引用此工程即可实现

    3.9K10

    如何使用 Blazor 框架在前端浏览器中导入和导出 Excel

    一个常见的用例是将现有的 Excel 文件导入 Blazor 应用程序,将电子表格数据呈现给用户,并且能够允许进行任何更改,最后将该数据导出回 Excel 文件或将其保存到数据。...以下是在 Blazor 中导入/导出电子表格文件的步骤: 创建 SpreadJS Blazor 组件 创建 Blazor 应用程序Blazor 应用程序中导入 Excel Blazor 应用程序中的...在将 SpreadJS 放入 Blazor 应用程序之前,我们必须首先创建一个 Blazor 组件来包含 SpreadJS。...要创建组件,首先要创建一个 Razor : 为简单起见,您可以将其命名为“SpreadJS_Blazor_Lib”: 创建项目后,我们需要将 SpreadJS 文件复制到“wwwroot”文件夹...应用程序 现在我们已经使用 SpreadJS 创建了一个组件,我们可以在 Blazor 应用程序中使用它。

    31220

    【炫丽】从0开始做一个WPF+Blazor对话小程序

    运行效果如下:实现这个效果,还有一些代码:上面的代码调用了一些方法实现窗体操作最小化、关闭等,代码如下;因为是Razor组件,即html实现的界面,界面的html元素也定义了一些css样式,代码也一并给出...,使用该后也解决了:本小节源码在这解决圆角和最大化问题,下面开始本文的下半部分了,好累,终于到这了。4. 添加第三方Blazor组件工欲善其事,必先利其器!...本文使用Masa Blazor做示例展示,如今Blazor组件众多,选择自己喜欢的、顺手的就成:站长前些日子介绍过MAUI使用Masa blazor组件一文,本小节思路也是类似,且看我表演。...A:放Message,即一些消息通知;B:放Razor组件,如果需要与Maui\Blazor Server(Wasm)等共享Razor组件,可以创建Razor库存储;C:放通用服务,这里只放了一个窗体管理静态...,本文只是个引子:8.4 Blazor组件除了Masa.Blazor还有哪些?

    8.1K60

    Blazor资源大全,很棒的Blazor(3)

    但更深层次的是,网页上的某些元素受益于客户端,某些元素受益于服务器端,为什么您只能选择一个呢?时长:53分钟。...Blazor 最小项目模板 - 一个不包含 JavaScript 和 CSS Blazor 应用程序项目模板包。...在《Blazor WebAssembly 简明指南》中,Michael Washington 将带领读者了解 Blazor 的核心元素,并通过构建一个示例应用程序来探索其他功能。免费电子书。...创建 Blazor 组件 - 2019年12月 - 构建 Blazor 应用程序就是构建组件。本课程对于深入理解组件至关重要。在 Pluralsight 上。...BlazorRazor 组件简介 - 2019年10月 - 学习如何使用一个允许您在 WebAssembly 之上直接在浏览器中运行编译后代码的框架,这是 Udemy 上的一门课程。

    41940

    MAUI Blazor 项目实战 - 从0到1轻松构建多平台应用UI

    使用 Blazor Hybrid 将桌面和移动本机客户端框架与 .NET 和 Blazor 结合使用。 在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行。...Razor 组件可快速加载和执行代码,组件可通过 .NET 平台完全访问设备的本机功能。 Blazor Hybrid 应用与MAUI Blazor Hybrid 支持内置于 MAUI 框架 。....整个项目结构如下: 项目整体思路就是将Blazor UI样式抽离至 MultiPlatform.BlazorRazor)项目中,MultiPlatform.Maui(安卓、IOS等...组件 位于 Main.razor 中,Razor 将其编译为应用程序根命名空间中名为 Main 的类型。...其余 Razor 组件位于页面和共享项目文件夹中,与默认 Blazor Web 模板中使用的组件相同。 应用的静态 Web 资产位于 wwwroot 文件夹中。

    52651

    Blazor 中的依赖项注入

    Blazor 应用程序的上下文中,DI 鼓励你为特定任务开发离散服务,然后将这些服务注入到需要使用其功能的组件中。...Blazor 中的服务 Razor 组件主要与 UI 表示有关。生成 UI 所涉及的部分工作通常涉及与数据存储进行通信,可能是通过 Web 服务。可能需要记录组件中的操作和事件。...如果要在组件上运行单元测试,则需要找到一种方法,将替换为实际上不与数据或 Web 服务通信的假或模拟。现在想象一下,如果这个问题扩展到数十个或数百个组件。...这是通过 ServiceCollection 添加条目来实现的, ServiceCollection 是 ServiceDescriptor 对象的中央注册表,表示服务类型、其实现和服务的生存期。...作用域Scoped:在Blazor Server应用程序中,注册为scoped的服务的范围是当前(SignalR)连接(或用户)。作用域服务在WebAssembly应用程序中注册为单例。

    22210

    MAUI Blazor项目实战 从0到1轻松构建多平台应用UI

    使用 Blazor Hybrid 将桌面和移动本机客户端框架与 .NET 和 Blazor 结合使用。 在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行。...Razor 组件可快速加载和执行代码,组件可通过 .NET 平台完全访问设备的本机功能。 Blazor Hybrid 应用与MAUI Blazor Hybrid 支持内置于 MAUI 框架 。...: 项目整体思路就是将Blazor UI样式抽离至 MultiPlatform.BlazorRazor)项目中,MultiPlatform.Maui(安卓、IOS等)项目用来构建多端应用,MultiPlatform.Server...组件 位于 Main.razor 中,Razor 将其编译为应用程序根命名空间中名为 Main 的类型。...其余 Razor 组件位于页面和共享项目文件夹中,与默认 Blazor Web 模板中使用的组件相同。 应用的静态 Web 资产位于 wwwroot 文件夹中。

    32430

    Asp.net Blazor工作原理解析

    .razor文件中的C#代码更加紧密地与HTML代码交织在一起,因为Blazor组件的核心就是将前端的HTML和后端的C#代码封装到同一个文件中。...在Blazor中,.razor文件中的C#代码经常使用基于Razor语法的@符号来嵌入到HTML代码中,而.cshtml文件中的C#代码则使用@符号来标识Razor代码块,但不会嵌入到HTML标记中。...生成的C#代码会负责处理组件的渲染、事件处理等逻辑,以及与页面中的HTML元素进行交互。...从代码的角度大致简化工作流程如下: 客户端请求页面: 客户端(浏览器)发送请求到服务器,请求Blazor应用程序的页面。 服务器处理请求: 服务器接收到请求后,会执行相应的处理逻辑。...组件会使用RenderTreeBuilder对象来构建渲染树,其中添加HTML元素、属性和事件处理逻辑等。

    24510

    对打 Angular,Blazor 赢在哪里?

    Blazor 应用基于现有的 Web 技术(例如 HTML 和 CSS)构建,但该框架允许开发人员使用 C# 和 Razor(一种流行的模板标记语法)而不是 JavaScript 语言。...此外,它让开发人员能够共享代码和,因为客户端和服务端代码都是用 C# 编写的,从而为开发人员提供了一个平台,可以使用.NET 端到端开发充满活力的现代单页应用程序(SPA)。...Blazor 在其应用程序中使用依赖注入来实现控制反转,它允许为对象提供依赖。在 Blazor 中,依赖注入可以分为多个:注入器、客户端和服务。...每个客户端都必须有一个活动连接,并且 Blazor 将每个客户端的组件状态保存在服务器上。 Blazor 现在提供了 scoped 组件样式和 CSS 隔离。...在 Angular 中,与组件样式和 CSS 隔离相关的工具链已经非常成熟了。 Angular 提供了对 PWA 的支持,但服务端 Blazor 不能用作 PWA。

    2.9K30

    ASP.NET Core 3.0 的新增功能

    Blazor 框架支持的场景: 可重用的 UI 组件Razor 组件) 客户端路由 组件布局 对依赖注入的支持 表单与验证 使用 Razor 构建组件 JavaScript 互操作 有关更多信息...Blazor Server Blazor组件渲染逻辑与 UI 更新的逻辑进行了解耦。Blazor Server 支持在服务器上的 ASP.NET Core 应用程序中承载 Razor 组件。...Razor 组件 Blazor 应用程序是由组件 (components) 构建而成的。组件是自包含的用户界面元素,例如页面、对话框或者表单等。...Blazor 中的组件通常使用 Razor 语法编写,它是 HTML 和 C# 的自然融合。...默认情况下,Razor (RCL) 模板默认为用于 Razor 组件开发。Visual Studio 中新的模板选项为页面和视图提供模板支持。

    6.7K30

    【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    Razor组件在HTML中是完全呈现的。 Razor中的Razor组件 现在可以将Razor组件添加Razor中,并使用Razor组件从ASP.NET核心项目引用它们。...Razer 1: dotnet new razorclasslib -o RazorClassLib1 3、添加Component1.razor文件到Razer Component1.razor...在Razor组件应用程序中,使用@addTagHelper指令从Razor导入所有组件,然后在应用程序中使用component1 Index.razor 1: @page "/" 2...另外,Razor还不支持静态资源。如果要在库中创建可与BlazorRazor组件应用程序共享的组件,仍然需要使用Blazor。这写问题会在未来的更新中解决。...这些组件提供默认行为,用于在编辑时验证并更改它们的CSS以反映字段状态。

    22.7K10

    Blazor入门:ASP.NET Core Razor 组件

    目录 关于组件 组件 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留元素组件...指定基 指定属性 导入组件 原始 HTML 官方文档原文位置: https://docs.microsoft.com/zh-cn/aspnet/core/blazor/components?...组件:项目 Blazor 中,使用 .razor 结尾的文件,称为组件;而 Blazor 中的组件,正式名称是 razor 组件Blazor 组件razor 过渡而来的,使用 razor 的基本语法特性...组件命名时,应该带上 Component 后缀。 组件 每个 .razor 文件,在编译后会生成一个,称为组件。 生成的的名称与文件名匹配。...如果一个组件的 @code{} 成员不需要被外界作为参数使用,就应该设置为 private。 因为 .razor 一般不会作为来使用。

    2.8K20

    Blazor 中的路由和路由模板

    如果在 ASP.NET Core 应用程序中使用 Razor 页面,那么将获得与 Blazor 开发人员完全相同的体验 - @page 指令。...如果 Razor 源包含 @page 指令,则使用 Route 属性修饰相同的动态编译。 值得注意的是,Blazor 在同一视图中支持多个路由指令。...它包括每个 URL 参数添加类型属性,如下所示: @page “/user/view/{Id:int}” 参数的名称后跟冒号和表示 .NET 类型的文本。...但是,当定位标记用于呈现菜单或导航栏时,可能需要一些额外的工作来调整 CSS 样式以反映链接的状态。 内置的 Blazor NavLink 组件可以用于任何需要定位点元素的地方,尤其是在菜单中。...如果当前页面 URL 与引用的 URL 匹配,则“活动”CSS 将自动添加到由 NavLink 组件呈现的定位标记中。“活动”CSS 的实现仍然是页面开发人员的责任。

    8.4K21
    领券