【问题标题】:change number on rails loop based on screen size根据屏幕大小更改轨道循环上的数字
【发布时间】:2016-01-13 21:28:12
【问题描述】:

我正在尝试在使用移动响应式网格时根据屏幕尺寸更改循环发生的次数。

我知道它在 CSS 中不起作用,但对于不同的媒体屏幕尺寸,我希望循环发生不同的 x 次。

示例

当媒体屏幕尺寸至少为 500px 时,我想要:

<% 10.times do %>

当媒体屏幕尺寸至少为 700px 时,我想要:

<% 12.times do %>

当媒体屏幕尺寸至少为 900 像素时,我想要:

<% 15.times do %>

等等……

HTML

<div class="mediaContainer pure-g">
  <% 24.times do %>
    <div class="mediaGrid">
        <img src="http://www.some-image.jpg" class="pure-img id="commercialPic" alt="">
        </img>
        <h3 class="commercialTitle">Title</h3>
    </div>
  <% end %>
</div>

CSS

@media screen and (min-width: 35.5em){
  Only Loop 12 times
}

@media screen and (min-width: 48em){
  Only Loop 15 times
}

【问题讨论】:

  • 您能否更好地总结一下您的问题?
  • Ruby 无法读取屏幕大小。最好的办法是实现一个 javascript 解决方案,首先检测屏幕大小,然后通过 ajax 加载适当数量的项目。

标签: html css ruby-on-rails


【解决方案1】:

要添加到Wes Foster 的评论中,您必须考虑两个问题:

  1. 您的 CSS 应该是预编译的,这意味着您必须在编译之前(而不是在运行时)完成所有循环。如果您不预编译它,请为性能大幅下降做好准备。

  2. Ruby 无法从 DOM 获取输入 - 它必须将数据从 JS 或 user_agent(浏览器信息)传递给它。将 Ruby 想象成在完全独立的计算机上运行(确实如此)。

--

答案 - 虽然不是你想要的 - 将改变你的 CSS,这样你就不需要循环了。

如果您必须为单个元素设置样式,那么您做错了。 CSS 有 classesids 是有原因的 - 您应该尽可能一般地设置 .classes 的样式,只为特定元素添加 #id 样式:

.table_row { 
   background-color: red;
}

.table_row#yellow { 
   background-color: yellow;
}

如果你想使用媒体相关的宽度或其他东西,你应该让它们动态化 (%),这样你就可以定义它们一次并让它们适应。

一个很好的表格示例:

<table class="table">
  <tr>
     <td>Test</td>
     <td>Test2</td>
     <td>Test3</td>
  </tr>
  <tr>
     <td>Test</td>
     <td>Test2</td>
     <td>Test3</td>
  </tr>
</table>

table.table       { width: 100%; }
table.table tr td { width: 33%;  }

@media screen and (min-width: 35.5em){
  table.table tr td { width: 25%; }
}

【讨论】:

  • 谢谢你的解释,现在肯定更清楚了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2014-11-02
  • 2023-03-11
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
相关资源
最近更新 更多