【问题标题】:How to I have several haml lines appear on the same line?如何让几条haml行出现在同一行?
【发布时间】:2011-04-26 16:03:54
【问题描述】:

我有以下haml:

  9       %strong Asked by:   
 10       = link_to @user.full_name, user_path(@user)     
 11       .small= "(#{@question.created_at.strftime("%B %d, %Y")})" 

这目前将链接和日期放在不同的行上,当它应该看起来像“链接(日期)”并且日期的类跨度很小时.....

【问题讨论】:

  • 把你生成的html代码放在这里
  • haml 中的默认设置是在使用 .small 之类的内容时使用 div,因此块布局将使其出现在新行上(除非您在 @ 中明确更改了 div 的布局样式987654323@ 类要内联)。你可以试试%span.small 而不是.small
  • @matt 你的评论对我来说听起来像是一个有效的答案。
  • @rubii 是的,这将是“尝试跨度”,但它的扩展超出了我的预期。稍后我会在有时间时将其扩展为完整的答案。
  • 那么它们会显示在同一行吗....?如果我想在 haml 中的同一行代码中物理地执行所有操作,该怎么办?

标签: ruby haml


【解决方案1】:

您的代码将生成类似这样的 html:

<strong>Asked by:</strong>
<a href="userpath">User name</a>
<div class='small'>April 26, 2011</div>

当你使用.small 之类的东西(即使用点而不指定元素类型)时,haml 会创建一个implicit div。由于div 元素默认为block level elements,因此日期将位于新块中,因此将出现在新行中。为了让它出现在同一行,你需要一个inline level element

您可以更改“小”类的 css 以显式使其内联显示,但 html 已经提供了 div 的内联版本 - span,因此您可以更改最后一行

.small= "(#{@question.created_at.strftime("%B %d, %Y")})" 

%span.small= "(#{@question.created_at.strftime("%B %d, %Y")})" 

这会给你

<strong>Asked by:</strong>
<a href="userpath">User name</a>
<span class='small'>April 26, 2011</span>

都是行内元素,所以会显示为一行。

至于在haml 的同一行中,我认为使用简单的haml 语法是不可能的。 Haml 使用缩进和空格来确定要做什么,只有一行意味着没有缩进。

haml FAQ 说:

表达文档的结构和表达内联格式是两个截然不同的问题。 Haml 主要是为结构而设计的,因此处理格式的最佳方法是将其留给为其设计的其他语言。

您似乎处于 haml 的目标边缘。如果你真的想要一行代码,你可以直接写你的 html:

<strong>Asked by:</strong> #{link_to @user.full_name, user_path(@user)} <span class="small">(#{@question.created_at.strftime("%B %d, %Y")})</span>

或者你可以创建一个助手来为你生成块。

【讨论】:

    【解决方案2】:

    要使其显示在浏览器的同一行,请使用%span.small,如上面的评论所示。

    要在 HTML 输出中将所有内容放在一行中,您需要在 Haml 中使用 whitespace removal 语法。请理解 HTML 输出中的换行符不会影响浏览器中文本的排列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多