2017-03-07 106 views
1

如何垂直排列不同高度的元素?我的意思是用這樣的:無間距垂直排列元素

div[class^="elm"]{ 
 
\t width: 50%; 
 
\t display: inline-block; 
 
\t margin-bottom: 20px; 
 
\t background-color: gray; 
 
} 
 
\t 
 
.elm1{ 
 
\t height: 100px; 
 
} 
 
\t 
 
.elm2{ 
 
\t height: 200px; 
 
} 
 
\t 
 
.elm3{ 
 
\t height: 160px; 
 
} 
 
\t 
 
.elm4{ 
 
\t height: 110px; 
 
} 
 
\t 
 
.elm5{ 
 
\t height: 60px; 
 
} 
 
\t 
 
.elm6{ 
 
\t height: 220px; 
 
} 
 
\t 
 
.elm7{ 
 
\t height: 90px; 
 
}
<div class="elm1">Element 1</div><div class="elm2">Element 2</div><div class="elm3">Element 3</div><div class="elm4">Element 4</div><div class="elm5">Element 5</div><div class="elm6">Element 6</div><div class="elm7">Element 7</div>

,並顯示這個樣子(順序很重要):

vertically aligned elements

我知道這種類型的事情可以發生有兩個街區。每列爲一列,但它使我在在響應式設計中使用JavaScript(使其超過兩列)

示例 Google+使用JavaScript進行多塊處理。我怎樣才能做到這一點,而不使用JavaScript和只有CSS?

+2

你可能想看看'Flexbox的' – domsson

+0

@dom我之前曾嘗試過這樣的東西:http://codepen.io/klamping/pen/bddxyr?editors=110但它沒有做我需要的東西:( – ICE

+0

這不是一個石工佈局嗎?考慮使用砌體插件,允許您訂購元素 –

回答

0

這是輸出你期待

這可能幫助你

Check output in Codepen.io

div[class^="elm"] { 
 
    width: 50%; 
 
    display: block; 
 
    background-color: gray; 
 
} 
 

 
.elm1 { 
 
    height: 100px; 
 
    margin: 2px; 
 
} 
 

 
.elm2 { 
 
    height: 200px; 
 
    position: relative; 
 
    left: 10px; 
 
    top: -105px; 
 
    float: right; 
 
} 
 

 
.elm3 { 
 
    height: 160px; 
 
    margin: 2px; 
 
} 
 

 
.elm4 { 
 
    height: 110px; 
 
    margin: 2px; 
 
    position: relative; 
 
    left: 10px; 
 
    top: -105px; 
 
    float: right; 
 
} 
 

 
.elm5 { 
 
    height: 60px; 
 
} 
 

 
.elm6 { 
 
    height: 220px; 
 
    margin: 2px; 
 
    position: relative; 
 
    left: 10px; 
 
    top: -105px; 
 
    float: right; 
 
} 
 

 
.elm7 { 
 
    height: 90px; 
 
    margin: 2px; 
 
}
<div class="elm1">Element 1</div> 
 
<div class="elm2">Element 2</div> 
 
<div class="elm3">Element 3</div> 
 
<div class="elm4">Element 4</div> 
 
<div class="elm5">Element 5</div> 
 
<div class="elm6">Element 6</div> 
 
<div class="elm7">Element 7</div>

+0

感謝您的回答,但是你是我當我知道我有多少元素,哪一個去了右邊,哪一個去了左邊,ntioning是好的。整個想法都是關於清單的。它甚至可以超過1000個,並且在響應式設計中從兩列轉換爲三列或更多列時,它必須是一個很好的解決方案。 – ICE

+0

我的解決方案是解決您的問題嗎? –

1

您可以通過float: leftfloat: right之間交替做到這一點:

.items { 
 
    display: block; 
 
    overflow: hidden; 
 
    width: 400px; 
 
} 
 

 
.item { 
 
    box-sizing: border-box; 
 
    width: 190px; 
 
    margin: 5px; 
 
    padding: 5px; 
 
    background: #000; 
 
    color: #fff; 
 
    text-align: center; 
 
    font-family: 'Arial', 'Helvetica', sans-serif; 
 
    font-size: 48pt; 
 
    font-weight: bold; 
 
} 
 

 
.item:nth-child(odd) { 
 
    float: left; 
 
} 
 

 
.item:nth-child(even) { 
 
    float: right; 
 
} 
 

 
.elm1 { 
 
    height: 100px; 
 
} 
 
\t 
 
.elm2 { 
 
    height: 200px; 
 
} 
 
\t 
 
.elm3 { 
 
    height: 160px; 
 
} 
 
\t 
 
.elm4 { 
 
    height: 110px; 
 
} 
 
\t 
 
.elm5 { 
 
    height: 60px; 
 
} 
 
\t 
 
.elm6 { 
 
    height: 220px; 
 
} 
 
\t 
 
.elm7 { 
 
    height: 90px; 
 
}
<div class="items"> 
 
    <div class="item elm1">1</div> 
 
    <div class="item elm2">2</div> 
 
    <div class="item elm3">3</div> 
 
    <div class="item elm4">4</div> 
 
    <div class="item elm5">5</div> 
 
    <div class="item elm6">6</div> 
 
    <div class="item elm7">7</div> 
 
</div>

希望這有助於。

編輯:這仍然可能失敗,這取決於瓦片的高度,因爲在這裏可以看到:https://jsfiddle.net/f16apso8/ - 更好的(實際)解決方案在這裏的:How to Create Grid/Tile View with CSS?

+0

謝謝你提到的第n個孩子。現在我可以對三列使用nth-child(3n + 0),對四列使用nth-child(4n + 0)。如果你喜歡把它添加到你的答案。 – ICE

+0

太棒了!但是,請注意,如果您具有特定的元素順序和大小(請嘗試示例圖片中顯示的項目的確切大小),您仍然可以獲得「對齊空位」。我現在不確定如何解決這個問題,說實話。 – domsson

+1

儘管我想表揚,但這仍然是我討論的剩餘問題:https://jsfiddle.net/f16apso8/ - 我想@TomMichew是正確的,當他建議砌體佈局時,請檢查http: //堆棧溢出。如何創建網格平鋪視圖與CSS(JavaScript)和純CSS3解決方案這裏http://stackoverflow.com/questions/8470070/how-to-create-grid-瓷磚 - 視圖 - 與CSS的答案#,42614384 – domsson