在 Grails 中将 CSS 作为内联样式编译成 HTML?
Posted
技术标签:
【中文标题】在 Grails 中将 CSS 作为内联样式编译成 HTML?【英文标题】:Compile CSS into HTML as Inline Style in Grails? 【发布时间】:2013-10-23 07:22:40 【问题描述】:我想为 html 电子邮件生成 GSP 模板。为了支持更多的邮件客户端,建议在 html 样式元素中使用内联 css。
这是关于该主题的讨论:"Compile" CSS into HTML as inline styles
是否有一个 Grails 插件,我可以在其中指定某些 GSP 文件,这些文件的 CSS 应该被编译为内联?
如果没有插件,我如何指定 GSP 文件应该内联编译 css?
这是一个例子。我使用Grails mail plugin 发送的 html 邮件有以下 GSP 模板。
/mail/signup_mail.gsp
/mail/welcome.gsp
/mail/newsletter.gsp
每个 GSP 文件都包含一个 style.css 文件。这应该是内联编译的。
【问题讨论】:
【参考方案1】:我们使用 Mailchimp API 上的免费方法来做到这一点。您也可以使用 Premailer。
http://apidocs.mailchimp.com/api/1.2/inlinecss.func.php
http://premailer.dialect.ca/
【讨论】:
如何在 Grails 中包含它? 两者都是可以从 grails 调用的外部 Web 服务:grails.org/Calling+External+WebServices 我们在 .NET 中执行此操作,但方法相同。我们使用 localhost 环回地址上的电子邮件模板调用 .aspx 页面,以获取它的 html —— 你可以调用你的 .gsp 页面。然后我们将该 html 提交给 css 内联网络服务。 这里是在 grails 中完成的:github.com/happyinc/grails-mailchimp/blob/master/grails-app/… 我必须如何使用你们的服务? @Jamey 你能举一个编码例子吗?【参考方案2】:您可以在您的 grails 应用程序中加入以下 Java 代码。
import java.io.IOException;
import java.util.StringTokenizer;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class AutomaticCssInliner
public static void main(String[] args) throws IOException
final String style = "style";
final String html = "<html>" + "<body> <style>"
+ "bodybackground:#FFC \n pbackground:red"
+ "body, pfont-weight:bold </style>"
+ "<p>...</p> </body> </html>";
// Document doc = Jsoup.connect("http://mypage.com/inlineme.php").get();
Document doc = Jsoup.parse(html);
Elements els = doc.select(style);// to get all the style elements
for (Element e : els)
String styleRules = e.getAllElements().get(0).data().replaceAll(
"\n", "").trim(), delims = "";
StringTokenizer st = new StringTokenizer(styleRules, delims);
while (st.countTokens() > 1)
String selector = st.nextToken(), properties = st.nextToken();
Elements selectedElements = doc.select(selector);
for (Element selElem : selectedElements)
String oldProperties = selElem.attr(style);
selElem.attr(style,
oldProperties.length() > 0 ? concatenateProperties(
oldProperties, properties) : properties);
e.remove();
System.out.println(doc);// now we have the result html without the
// styles tags, and the inline css in each
// element
private static String concatenateProperties(String oldProp, String newProp)
oldProp = oldProp.trim();
if (!newProp.endsWith(";"))
newProp += ";";
return newProp + oldProp; // The existing (old) properties should take precedence.
【讨论】:
@emilan 请详细说明它是如何使用的? 我只是想知道您的问题,看来您对 Java/Groovy 不够熟悉。集成取决于您的应用程序,您可以在自己的应用程序中的任何位置使用此 sn-p,从相应的 gsp 文件中获取 html 代码并将其作为参数传递给解析函数。代码中还有 cmets,我描述了这个 sn-p 的核心部分是 jsoup lib。似乎您希望我编写特定于您的应用程序的代码。 :) 我认为这个带有描述的代码足以让初级开发人员进行集成。以上是关于在 Grails 中将 CSS 作为内联样式编译成 HTML?的主要内容,如果未能解决你的问题,请参考以下文章
在 React 组件中使用 css/scss 变量作为内联样式
在 ASP.NET 中将 HTML 转换为 PDF 时保持 CSS 样式[关闭]