【问题标题】:Rails: How to display images in rows rather than one columnRails:如何在行而不是一列中显示图像
【发布时间】:2011-05-23 11:24:50
【问题描述】:

目前我的代码生成的视图如下所示:

Lessons Start Now!
x
x
x
x
x
x

(其中 x = 图像)

我想知道如何让它显示如下:

Lessons Start Now!
x   x   x
x   x   x

这是我的 index.html.erb 代码

<h1>Lessons Start Now!</h1>
<% @lessons.each do |lesson| %>
    <%= image_tag(lesson.image, :size => "100x50") %><br />
    <%= lesson.subject %><br />
<% end %>
<%= link_to 'New Lesson', new_lesson_path %>

我唯一能想到的就是编写一个有计数的 for 循环。它将第一个图像插入到一个 div 类中,然后一旦 count = 3,它将下一个 3 插入到不同的 div 中。也许可以使用 ul 和 li 来做一些特别的事情,或者也许有一种 rails 方式,任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails css view


    【解决方案1】:

    你可以做一个表格(或浮动 div)

    <table>
      <% @lessons.each_slice(3) do |lessons| %>
        <tr>
          <% lessons.each do |lesson| %>
            <td>
              <%= image_tag(lesson.image, :size => "100x50") %><br />
              <%= lesson.subject %>
            </td>
          <% end %>
        </tr>
      <% end %>
    </table>
    

    【讨论】:

    • 虽然表格可以达到预期的效果,但推广它们的使用并不是一个好主意——用于布局的表格不实用,并且违背了将内容 (HTML) 与样式 (CSS) 分离的想法。
    • @gryzzly,答案是关于一般方法而不是关于布局。你可以使用each slice 方法做任何你想做的事情
    • 他确实说过“或浮动 div”。基本方法在结构上是正确的。
    • 问题说明“我如何让它像这样显示?”。这些天来,视觉格式化是用 CSS 完成的。在我看来,没有标题的表格在结构上是不正确的。
    • 表格不应用于布局。使用 CSS
    【解决方案2】:

    你必须使用 CSS 来做你想做的事,假设这是你的模板:

    <h1>Lessons Start Now!</h1>
    <% unless @lessons.empty? %>
    <ul class="lessons">
    <% @lessons.each do |lesson| %>
        <li>
        <%= image_tag(lesson.image, :size => "100x50", :class => "thumbnail") %>
        <p class="subect"><%= lesson.subject %></p>
        </li>
    <% end %>
    </ul>
    <% end %>
    <%= link_to 'New Lesson', new_lesson_path %>
    

    这就是你的 CSS:

    .lessons {
      /* this is needed for the parent 
         to have height. read more 
         http://css-tricks.com/all-about-floats/
      */
      overflow:hidden;
      /* adjust width of this element
         if its width is not limited by its parent
      width: 300px;
      */
    }
        .lessons li {
            /* add margins and paddings as you wish */
            float:left;
        }
    

    【讨论】:

      【解决方案3】:

      如果是我。我会将其移至助手并使用 content_for 助手和 css 来构建您需要的布局。没有这个,有很多方法可以做你想做的事,但这不是一个好习惯。抱歉,这不是解决方案,但它是在这种情况下应该做什么的指南。祝一切顺利。让我们知道您的进展情况。

      【讨论】:

        【解决方案4】:

        您可以定义一个具有宽度的 div,例如:

        div.content
        {
        width: 305px;
        }
        

        在该 div 中放置图像。每行显示的图片数量取决于 div 的宽度和图片的宽度。

        这种方法的优点是它完全是在设计中完成的,而不是在代码中完成的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-14
          • 2013-02-17
          • 1970-01-01
          • 2020-08-19
          • 1970-01-01
          • 1970-01-01
          • 2020-01-10
          • 2015-08-07
          相关资源
          最近更新 更多