2013-10-30 43 views
4

我剛開始學習使用Drupal,Omega 4主題的響應式設計技巧,並希望使用奇點網格系統。 我不太瞭解CSS(基本原理是,微妙之處不),而SASS似乎是一種逃避某些更神祕功能的手段(有點像jQuery可以幫助您避免Javscript)。 由於我真的是一個初學者,我以爲我會盡可能簡單地從一個虛擬頁面開始。所以,這裏是HTML:試圖讓div在網格中並排顯示使用奇點gs

<html> 
    <head> 
    <title>Singularity HTML Demo</title> 
    <link rel="stylesheet" href="stylesheets/test-grid_1.css"> 
    </head> 
    <body> 
    <div id="page"> 
     <h1>Page tests_1</h1> 
     <div id="foo"> 
      <h2>Foo</h2> 
      <p><p>Aliquam nulla metus, laoreet non felis ut, commodo laoreet nulla. </p></p> 
     </div> 
     <div id="bar"> 
      <h2>Bar</h2> 
      <p>Morbi volutpat justo ante, et laoreet est porttitor id. Nullam rhoncus ipsum leo, sed tincidunt ante consequat in.</p> 
      <p>Quisque porttitor tincidunt hendrerit. Nulla et urna nisi. Fusce vulputate aliquet posuere. Cras tempor ante vel turpis scelerisque mollis. In bibendum augue in tincidunt vulputate. Donec accumsan sapien et molestie sodales. Maecenas ut arcu et arcu congue rhoncus. Suspendisse potenti. Nulla vehicula est ut ante semper lobortis. Maecenas sit amet porta mi, nec mattis dui. Curabitur tempus, magna a volutpat auctor, tellus diam pretium sapien, a accumsan augue lectus et est. Quisque sollicitudin metus tincidunt massa fermentum; non varius libero bibendum.</p> 
     </div> 
     <div id="baz"> 
      <h2>Baz</h2> 
      <div> 
       <p>Baz</p> 
       <p>Vestibulum quis tristique arcu. Cras nec est aliquet, vehicula dolor sed, fermentum eros. Maecenas et commodo diam. Aenean egestas nulla a dolor aliquet pellentesque. Nunc enim tellus, sagittis sit amet ipsum nec, bibendum dictum nisl. Nam sollicitudin quis orci sed consequat. Nam et imperdiet ipsum, aliquam cursus nulla. Morbi erat magna, rhoncus vel velit vel, sollicitudin imperdiet orci. Quisque posuere at leo in pellentesque. Vestibulum ornare nulla odio, id mollis lorem blandit eget. Donec est sem, adipiscing eu ligula at, blandit lobortis magna. Nam tempus, risus vitae lacinia consectetur, leo orci fringilla arcu, facilisis blandit metus leo eget eros. Donec pellentesque est eget nulla ultricies, nec placerat risus sagittis. Nulla elementum metus nisi, eget sagittis risus commodo vitae. Pellentesque imperdiet porta vestibulum!</p> 
      </div> 
     </div> 
     <div id="qux"><p>Qux</p></div> 
     <div id="waldo"><p>Waldo</p></div> 
     <div id="garfield"><p>Garfield</p></div> 
     <div id="dilbert"><p>Dilbert</p></div> 
    </div> 

    </body> 
</html> 

我做這開始了只顯示在一列一個接一個地在所有的div一個SASS的樣式表,而工作(不困難!)。我想張貼一張圖片來展示我的意思,但顯然我不能!

然後,我嘗試添加一個斷點,並嘗試修改sass代碼,以便它顯示在2列網格上,每個div交替顯示在左側和右側。 這是我用青菜代碼奇:

@import "singularitygs"; 
$include-border-box: true; 

$break: 500px; 
$break2: 800px; 
$break3: 1200px; 
$include-clearfix: true; 

$grids: add-grid(1); 
$grids: add-grid(2 at $break); 
$grids: add-grid(2 8 2 1 at $break2); 
$grids: add-grid(12 at $break3); 
$gutters: add-gutter(1/6); 

body { 
    margin: 0; 
    padding: 0; 
    @include background-grid; 
} 

#foo { 
    background-color: red; 
    color: yellow; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 1); 
    } 

} 

#bar { 
    background-color: green; 
    color: yellow; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 2); 
    } 
} 

#baz { 
    background-color: purple; 
    color: whitesmoke; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 1); 
    } 
} 

#qux { 
    background: yellow; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 2); 
    } 
} 

#waldo { 
    background: blue; 
    color: whitesmoke; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 1); 
    } 
} 

#garfield { 
    background: orange; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(1, 2); 
    } 
} 

#dilbert { 
    background: cyan; 
    @include grid-span(1, 1); 
    @include breakpoint($break) { 
     @include grid-span(2, 1); 
    } 
} 

當斷點踢,金都加菲貓和Qux擁有所有移動一直到顯示器的頂部 - 美孚已經成爲完全看不見的和被覆蓋。 我通過擺弄「清楚:兩面/左面/右面」來獲得接近我想要的東西的方法,但這是絕望的經驗,我相當肯定不夠強大。我一定會錯過一些東西,但如果有人能告訴我什麼,我將非常感激!

回答

5

當您使用grid-span而沒有額外的參數時,它使用Isolation輸出樣式跨越列。該樣式使所有列顯示在同一行上。

你有兩個選擇:

  • 對於應該出現在下一行中的每個元素,你必須告訴該元素可以這樣做:clear: both;。這種技術被稱爲清算。
  • 切換到Float輸出樣式自動應用清除。您可以通過以下三種方法中的任何一種來實現:
    • 設置$output: 'float';global variable;
    • 提供$output-styleargumentgrid-span mixin:
      @include grid-span(1, 1, $output-style: 'float');
    • 使用shortcut mixin@include float-span(1, 1);

此外,考慮以下因素:

  • 你不需要跨越適用於列默認移動視圖。默認情況下,每列已經100%寬。
  • 考慮通過使用不同的部分文件或者簡單地在佈局樣式上/下的佈局樣式中分隔樣式表中的裝飾和佈局。
  • 要應用交替樣式,您可以使用nth-child僞選擇器。如果您需要舊的IE支持,請使用Selectivizr 1.0.3b and Respond polyfills

以下是我該怎麼做的。 DEMO:http://sassbin.com/gist/7238506/
我已將HTML和SCSS轉換爲HAML和SASS,因爲它們非常易讀且沒有視覺噪音。我還刪除了未使用的網格和斷點。

$include-border-box: true 

$break: 500px 
$grids: 2 

+breakpoint($break) 
    #page > div 
    &:nth-child(2n) 
     +float-span(1,1) 

    &:nth-child(2n+1) 
     +float-span(1,2) 

    &:last-child 
     +float-span(2,1) 

請注意,掌握柱子的排列方式會變得容易多少!

UPD 2013年10月31日

我真的很想有巴茲向上移動,因此將直接開始下美孚,同樣加菲貓向上移動,因此直接Qux下開始。但這甚至可能嗎?

如果列高度是動態的,那麼您無法優雅地做到這一點。

在這種情況下,我會將奇數段放入一列,甚至將段落放入另一列,並跨越這兩列。這將在桌面上生成所需的訂單,但會改變移動訂單。

如果您確實需要在移動設備和桌面設備上使用所描述的順序,請考慮修改段落高度或使用JS對窗口大小調整段落進行重新排序。

UPD 2013年11月1日

相關的問題:https://github.com/Team-Sass/Singularity/issues/143#issuecomment-27547135

+0

非常感謝您花時間。我承認我一遍又一遍地嘗試瞭解「浮動」是如何工作的,但卻發現它完全違反直覺。我設法通過添加'$ output:'float';'來獲得相同的結果。但是,這並不是我想要的。我真的很想讓Baz向上移動,因此它直接在Foo下開始,同樣的,Garfield也向上移動,所以它直接在Qux下開始。但這甚至可能嗎? –

+0

我已更新我的答案,解答您的評論。 –

+0

再次更新,添加了相關奇異性問題的鏈接。請參閱Snugug的答案。 –

2

你是正確的軌道與clear。清除用於決定是否應該將元素向下移動到現有的浮動元素之上,這是您在CSS中創建「行」時需要做的事情。由於您對CSS非常陌生,請參閱Mozilla Developer Network's clear參考。

一般來說,我鼓勵你不要把Sass看作jQuery,將CSS所需的知識抽象出來。雖然許多框架可以更容易地編寫CSS,但您仍然需要知道底層CSS如何工作以確保您獲得預期的輸出(而不是jQuery中大多不會)。例如,在Singularity中,有two different output styles,您需要知道哪一個最適合您遇到的情況。對於絕對具有全新CSS和網格的人來說,Float輸出方法可能比較容易理解,因爲它會自動清除浮點數並「跨行」。事實上,甚至有一個float-span範圍方法可以讓您在使用symmetric grid時真正輕鬆地使用此心智模型。

希望這會有所幫助。