ChatGPT解决这个技术问题 Extra ChatGPT

@media 媒体查询和 ASP.NET MVC 剃刀语法冲突

我有一个使用 Razor 视图引擎在 ASP.NET MVC 中运行的大型站点。

我有一个基本样式表,其中包含整个站点的所有通用样式。但是,有时我在页面的 <head> 中有页面特定的样式 - 通常这是一两行。

我不是特别喜欢将 CSS 放在 <head> 中,因为它不是严格分离关注点,但是对于一两行,这确实是特定于该页面的,我宁愿不必附加另一个文件并增加带宽。

我有一个实例,虽然我想将特定于页面的媒体查询放入 <head>,但由于媒体查询使用 @ 符号和括号 {},它与剃刀语法发生冲突:

@section cphPageHead{
     <style>
        /* PAGE SPECIFIC CSS */
        ...

        @media only screen and (max-width : 960px) <-- the @ symbol here is clashing!
            {
               ... }
            } 
    </style>
}  

有没有办法解决这个问题?

我仍然认为,css styles 应该在 CSS 文件中,特别是对于“大型网站”页面上的线性 css 不是最佳做法。 PS:我的看法
我同意@AlexC,但对于那些对有效用例感到好奇的人,关键 CSS 内联加载比外部加载更快。对于那些依赖超快速的第一次有意义的绘画的网站来说,这是一个非常方便的技巧。
另一个用例是呈现电子邮件
对于使用 sonar double @ 之类的代码分析工具的人,可以通过工具将其标记为主要错误。如果您有机会更改或禁用规则,那没关系,否则您必须找到另一种方式来逃避@。
将@media 与网格一起使用时,您可能需要页面中的样式表,因为每个页面布局可能不同,您只想控制特定页面并将 css 打包到文件中是过度设计的,只是没有意义.在这种情况下,保持一起靠近的代码。因此,如果 css 绝对仅适用于单个页面,则最好在该页面中使用。否则总是在一个单独的 css 文件中

D
David Makogon

使用双 @@ 符号。这将转义@符号并在客户端正确呈现@media


使用双 @@ 对我不起作用。我必须使用一个 @ 和 2 个不同的 style 元素!请参阅下面的答案,并可能将其添加到此。
这对我有用。谢谢
A
A-Sharabiani

还要记得在双@@之后添加一个空格:

 @@ media only screen and (max-width : 960px)

没有空间的@@media不适合我。


使用压缩 CSS 时有类似的问题;我认为@@ 被文本包围,因此 Razor 难以解释它。我选择在@@ 之前添加空格。谢谢你的提示。
即使有空间,这对我也不起作用。具有 2 个不同 style 元素的 Daut's answer 确实有效!
D
Daut

我意识到这是一个老问题,但这是唯一对我有用的解决方案:

@section cphPageHead{
    <style type="text/css" media="screen and (max-width:959px)">
    </style>


    <style type="text/css" media="screen and (min-width:960px)">
    </style>
}

正如大卫所说:使用双 @@ 符号。这将转义@符号并在客户端正确呈现@media