【问题标题】:Render content of css stylesheets as inline-style attributes将 css 样式表的内容呈现为内联样式属性
【发布时间】:2016-09-01 13:52:58
【问题描述】:

我和这个人有同样的问题:"Compile" CSS into HTML as inline styles

除了我使用asp.net mvc razor或更正确的RazorEngine:https://github.com/Antaris/RazorEngine

我将 .cshtml 文件编译成 html 文件。当我这样做或完成此过程后,我希望所有 .css 文件及其 id`s、标签、类及其属性/值都作为内联样式直接呈现到 html 标记中作为样式属性。

我需要使用样式属性,因为结果 html 是要在 gmail/outlook/mobile 等电子邮件客户端中显示的模板...

您将如何开始将 css 样式表定义转换为适当的样式属性?

【问题讨论】:

标签: c# asp.net-mvc razor razorengine


【解决方案1】:

如果您绝对必须将 HTML 属性上的 class 属性替换为内联样式属性,那么您将面临一项不平凡的任务。一个好的解决方案不是简单的String.ReplaceRegex.Replace。以下是我可能会采用的方法:

  • 创建自定义 ActionFilter 以在控制器操作执行后读取 HTML (Capturing HTML output with a controller action filter)
  • 使用类似HTMLAgilityPack 的方式加载 HTML
  • 使用 a CSS parser 加载您的 CSS 类
  • 在您的 HTML 元素上找到 class 属性,将其删除,将其替换为 style 属性,并将 style 属性值设置为相应 CSS 类的值(使用上述 CSS 解析器读取)。

【讨论】:

  • 过滤我不会做的东西,因为我使用 RazorEngine,这意味着我不使用 asp.net web 项目 + iis 服务器。由于 gmail 不支持类属性,因为它们需要内部/外部样式表,所以当我想要可重用的 css 定义时,我必须这样做!感谢 htmlagilitypack 和 css 解析器链接。我认为这就是要走的路。
  • 我找到了一个已经在使用 HTMLAgilityPack + CSS 解析器并将它们组合在一起的解决方案!!!见github.com/milkshakesoftware/PreMailer.Net
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 2013-06-26
  • 1970-01-01
  • 2013-12-06
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
相关资源
最近更新 更多