如何动态填充无框架网格?

时间:2012-08-19 20:27:41

标签: html css ruby-on-rails less responsive-design

我正在尝试动态填充Frameless网格(使用Rails循环)并且它还没有完全解决..

我理解LESS和使用@ 1col(@ 2cols等...)作为变量的概念。但是在网站上展示的示例(或者更确切地说,嵌入在网站中的示例,framelessgrid.com/)显示了大量硬编码列的使用。

以下是framelessgrid.com的代码部分

LESS文件:

@font-size: 17;
@line: 24;
@em: @font-size*1em;

@column: 48;
@gutter: 24;

   @1col:( 1 * (@column + @gutter) - @gutter) / @em;
  @1cols: @1col;
  @2cols:( 2 * (@column + @gutter) - @gutter) / @em;
  @3cols:( 3 * (@column + @gutter) - @gutter) / @em;
  @4cols:( 4 * (@column + @gutter) - @gutter) / @em;
  @5cols:( 5 * (@column + @gutter) - @gutter) / @em;
  @6cols:( 6 * (@column + @gutter) - @gutter) / @em;
  @7cols:( 7 * (@column + @gutter) - @gutter) / @em;
  @8cols:( 8 * (@column + @gutter) - @gutter) / @em;
  @9cols:( 9 * (@column + @gutter) - @gutter) / @em;
@10cols: (10 * (@column + @gutter) - @gutter) / @em;
@11cols: (11 * (@column + @gutter) - @gutter) / @em;
@12cols: (12 * (@column + @gutter) - @gutter) / @em;
@13cols: (13 * (@column + @gutter) - @gutter) / @em;
@14cols: (14 * (@column + @gutter) - @gutter) / @em;
@15cols: (15 * (@column + @gutter) - @gutter) / @em;
@16cols: (16 * (@column + @gutter) - @gutter) / @em;

.width (@cols:1) {
    width: (@cols * (@column + @gutter) - @gutter) / @em;
}
//....


 article section, #colophon {
padding: 0 18/@em;
margin: 0 auto;
max-width: @8cols;
}

#grid {
height: @4cols;
position: relative;
overflow: hidden;
}

.col {
    background: @highlight;
    height: 100%;
    width: @1col;
    position: absolute;
    left: 50%; top: 0;
    margin-left: 12/@em;
}

#grid .col {
    .transition(background-color 0.382s ease-out);
}

    .col2 {margin-left: (1*72+12)/@em;}
    .col3 {margin-left: (2*72+12)/@em;}
    .col4 {margin-left: (3*72+12)/@em;}
    .col5 {margin-left: (4*72+12)/@em;}
    .col6 {margin-left: (5*72+12)/@em;}
    .col7 {margin-left: (6*72+12)/@em;}
    .col8 {margin-left: (7*72+12)/@em;}
    .col9 {margin-left: (8*72+12)/@em;}
    .col10 {margin-left: (9*72+12)/@em;}
    .col11 {margin-left: (10*72+12)/@em;}
    .col12 {margin-left: (11*72+12)/@em;}
    .col13 {margin-left: (12*72+12)/@em;}
    .col14 {margin-left: (13*72+12)/@em;}
    .col15 {margin-left: (14*72+12)/@em;}
    .col16 {margin-left: (15*72+12)/@em;}
    .col17 {margin-left: (16*72+12)/@em;}
    .col18 {margin-left: (17*72+12)/@em;}
    .col19 {margin-left: -(1*72-12)/@em;}
    .col20 {margin-left: -(2*72-12)/@em;}
    .col21 {margin-left: -(3*72-12)/@em;}
    .col22 {margin-left: -(4*72-12)/@em;}
    .col23 {margin-left: -(5*72-12)/@em;}
    .col24 {margin-left: -(6*72-12)/@em;}
    .col25 {margin-left: -(7*72-12)/@em;}
    .col26 {margin-left: -(8*72-12)/@em;}
    .col27 {margin-left: -(9*72-12)/@em;}
    .col28 {margin-left: -(10*72-12)/@em;}
    .col29 {margin-left: -(11*72-12)/@em;}
    .col30 {margin-left: -(12*72-12)/@em;}
    .col31 {margin-left: -(13*72-12)/@em;}
    .col32 {margin-left: -(14*72-12)/@em;}
    .col33 {margin-left: -(15*72-12)/@em;}
    .col34 {margin-left: -(16*72-12)/@em;}
    .col35 {margin-left: -(17*72-12)/@em;}
    .col36 {margin-left: -(18*72-12)/@em;}

    .col1, .col2, .col3, .col4, .col19, .col20, .col21, .col22 {
        background: @emphasis;
    }

HTML文件:

<article>


            <figure id="grid">
                <div class="col col1"></div>
                <div class="col col2"></div>
                <div class="col col3"></div>
                <div class="col col4"></div>
                <div class="col col5"></div>
                <div class="col col6"></div>
                <div class="col col7"></div>
                <div class="col col8"></div>
                <div class="col col9"></div>
                <div class="col col10"></div>
                <div class="col col11"></div>
                <div class="col col12"></div>
                <div class="col col13"></div>
                <div class="col col14"></div>
                <div class="col col15"></div>
                <div class="col col16"></div>
                <div class="col col17"></div>
                <div class="col col18"></div>
                <div class="col col19"></div>
                <div class="col col20"></div>
                <div class="col col21"></div>
                <div class="col col22"></div>
                <div class="col col23"></div>
                <div class="col col24"></div>
                <div class="col col25"></div>
                <div class="col col26"></div>
                <div class="col col27"></div>
                <div class="col col28"></div>
                <div class="col col29"></div>
                <div class="col col30"></div>
                <div class="col col31"></div>
                <div class="col col32"></div>
                <div class="col col33"></div>
                <div class="col col34"></div>
                <div class="col col35"></div>
                <div class="col col36"></div>
            </figure>


</article>

因此,col2到col18类的列开始显示在屏幕中间并向右移动,сcol19-col36的列从中心向左移动..

如何通过动态创建列来使用此概念?

我想做类似的事情:

   <figure id="grid">
  <% My_model.all.each do |m| %>
   <div class="col col1"> <%= m.content %> </div>
  <% end %> 
   </div>

然而,这会从屏幕中间开始填充网格(由于.col中的CSS):

 .col{left: 50%;}

当然我可以切换到左边:0但它有点否定了Frameless的概念(在Framelessgrid.com中的第3页:

  
      
  1. 将其置于视口中心。   将网格水平对齐到视口的中间。对于具有偶数列的网格(如图所示),将视口的中心点对齐在两个最中心列之间的装订线中间。对于奇数编号的网格,请将其对齐在最中心列的中间。
  2.   

那么我如何坚持这个概念,但是从循环中动态创建/填充列?

1 个答案:

答案 0 :(得分:0)

因此,这个问题得到了投票。

以下是我通过Rails erb代码重建网格的方法(保持绝对定位)。我需要一个大约12列宽的列,所以我只是向左和向右循环。

添加到LESS文件:

.contain{

    width: @6cols;
    height: @2cols;
    margin-bottom: @gutter/@em;
}

控制器:

def index
    @counter = 0
    @ticker =  0
end 

HTML:

<figure id="grid">
        <% MyModel.all.each_with_index do |p, i| %>         
    <div class = "contain" >                
            <% @counter = @counter + 2 %>               
            <div class="col col<%= @counter  %>" id ="message_text"> <%= @counter %> || <%= i %> 

            </div>
                <% if @counter == 5  %>
                    <% @counter = 18 %>
                            </div>
                        <div class ="return"></div>
                <% elsif @counter == 24 %>
                    <% @counter = -1 %> 
                            <% if  @ticker == 0 %>

    </div>
    <div class ="return"></div>
                        <% end %>

                <% end %>
        <% @ticker = 1 %>               
        <% end %> 
</figure>

然而,这是一个更好(更真实世界)的例子,做一个固定宽度的列响应网格:

LESS文件:

@column: 85;    // The column-width of your grid in pixels
@gutter: 20;    // The gutter-width of your grid in pixels
@half_gutter : @gutter / 2;

@model_fix : 7.5/@em;


#build figure {
    height: 100%;
    background: @background;
    position: absolute;
    overflow: none;
    margin: 0 @gutter/@em;


}

#build .col {
    float: left;
    left: 0;
        background: white;

}


.col {

    height: @1col;
    width: @1col;
    position: absolute;
    margin: 0 @half_gutter/@em @gutter/@em @half_gutter/@em;

}

@media screen and (min-width: 78.750em) {


    .offset {
    left: 50% -  @8cols ; 

    }

    #build figure {
        height: 100%;
        background: @background;
        position: relative;
        overflow: none;
        margin: 0 auto 0 (@half_gutter - 4)/@em;
        width: @12cols + @gutter/@em;

    }
}


.message_text .col {
    width: @2cols;
    height: @2cols - @model_fix*2;
    position: relative;
    color: @grey_text;

}

.message_text #mess_text{
    font-size: 14/@em;
    margin: @half_gutter / @em;
}

HTML文件:

<body>
<article>
    <section id="build">                
        <figure id = "models" class ="offset">
            <% @scenes.each_with_index do |s, i | %>
                <div class ="message_text ">
                    <div class="col">
                        <div id = "model_text" >

                <%= link_to s.title, scene_path(s) %> 


                        </div>
                        </div>
                </div>
            <% end %>   
        </figure>
    </section>
</article>
</body>