我有以下haml:
9 %strong Asked by:
10 = link_to @user.full_name, user_path(@user)
11 .small= "(#{@question.created_at.strftime("%B %d, %Y")})"
这当前将链接和日期放在不同的行上,而它应该看起来像"link ( date )“,并且date有一个小的类跨度.....
发布于 2011-04-26 23:29:10
您的代码将生成类似以下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>
或者你可以创建一个帮助器来为你生成这个块。
发布于 2011-04-26 21:04:53
要使其显示在浏览器的同一行上,请使用%span.small
,如上面的注释所示。
要在HTML输出的一行中完成所有这些操作,需要使用HAML语言中的whitespace removal语法。请理解,HTML输出中的换行符不会影响浏览器中的文本排列。
https://stackoverflow.com/questions/5793084
复制相似问题