css - Blazor 服务器端使用嵌入样式格式化 MarkupString,同时忽略 Css 文件样式

标签 css razor blazor-server-side

我的 Blazor 服务器端应用程序发布从 Web Api Core 获取的丰富内容。
内容带有任意 Html 标签以及一组有限的众所周知的 Css 类。
Blazor 应根据这些类设置内容样式,但在匹配的 css 文件中声明时它会忽略样式。
但是,如果样式嵌入到同一 Razor 页面中,它会成功格式化内容。

以下练习演示了该问题。
是否有任何解决方法可以保留 css 文件上的样式并相应地设置标记内容的格式?

Test.razor 页面,具有嵌入样式:

@page "/Test"

<div class="FromRazorStyle">
    Razor hard coded text, embedded razor style
</div>
<div class="FromCssFile">
    Razor hard coded text, style from Css file
</div>

@((MarkupString)FromRazorStyle)
@((MarkupString)FromCssFile)

<style scoped>
    .FromRazorStyle {
        font-weight:600;
        margin-bottom:20px;
    }
</style>

@code {
    string FromRazorStyle = "<div class='FromRazorStyle'>Markup string, embedded razor style<br/></div>";
    string FromCssFile = "<div class='FromCssFile'>Markup string, style from Css file<br/></div>";
}

Test.razor.css 文件:

.FromCssFile {
    font-weight: 600;
    margin-bottom: 20px;
}

结果:
Razor 硬编码文本,嵌入式 Razor 风格
Razor 硬编码文本,样式来自 Css 文件
标记字符串,嵌入 Razor 样式

标记字符串,来自 Css 文件的样式

最佳答案

是的,这是可能的,但不一定容易!问题在于 CSS 隔离过程重写了 .razor.css 文件中的选择器以包含随机生成的唯一标识符。因此,示例中的 CSS 实际上变成了类似 .FromCssFile[b-c2x6l882ml] 的内容。此标识符还会作为属性添加到 .razor 文件中存在的所有 HTML 标记,但不会添加到标记字符串中的标记。

一种解决方法是在元素文件中手动设置此 CssScope 标识符,如 this page 中所述。 ,然后将其插入到标记内容标签中。

但是,在这种情况下,更简单的方法可能是将当前的 CSS 放入静态文件中,例如默认的 css/site.css,如下所示:

.FromCssFile * {
    font-weight: 600;
    margin-bottom: 20px;
}

关于css - Blazor 服务器端使用嵌入样式格式化 MarkupString,同时忽略 Css 文件样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72396368/

相关文章:

asp.net-core - 如何关联给定电路或 "session"的 Blazor 事件

javascript - 无法让 CSS 通过 Javascript 更改类

html - 使用相同名称的 CSS 覆盖?

c# - View 模型由大量数据组成。我应该通过表格传递所有内容吗?

.net - 使用razor选择 "umbraco item"

.net - 在 Blazor 和 MVC 中渲染 View

html - div不继承子div的大小

html - 光标不会激活以允许在文本框中输入

c# - 应用找不到位于另一个项目中的 Razor 页面

c# - ASP.NET Core Blazor 服务器中的 Entity Framework 上下文生命周期