Как сделать так, чтобы несколько строк haml отображались на одной строке? - PullRequest
5 голосов
/ 26 апреля 2011

У меня есть следующий хамл:

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

В настоящее время ссылка и дата помещаются в отдельные строки, когда она должна выглядеть как «ссылка (дата)», а дата имеет диапазон классов маленький.....

Ответы [ 2 ]

11 голосов
/ 27 апреля 2011

Ваш код будет генерировать что-то вроде этого html:

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

Когда вы используете что-то вроде .small (то есть используйте точку без указания типа элемента), haml создает неявное div.Так как div элементы по умолчанию элементы уровня блока , дата будет в новом блоке и появится в новой строке.Для того, чтобы он отображался в одной строке, вам понадобится встроенный элемент уровня .

. Вы можете изменить 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 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>

или, возможно, вы могли бы создать помощника, который сгенерирует блок для вас.

3 голосов
/ 27 апреля 2011

Чтобы он отображался в той же строке в браузере, используйте %span.small, как в комментарии выше.

Чтобы сделать все это одной строкой в ​​выводе HTML, вам нужно будет использовать удаление пробелов синтаксис в Haml.Пожалуйста, поймите, что новые строки в выводе HTML не влияют на расположение текста в браузере.

...