2013-03-11 37 views
2

您好,我正在嘗試創建div s的行佈局。HTML CSS一個容器中的DIV動態數量,每個div的動態高度

未知的每行編號div。可能是1可能是25

我用了一個表格佈局display: table;,因爲它似乎是得到有關該行的所有「div的大小相等的唯一途徑,而不需要知道它們的大小和沒有包裝的div■當的頁面縮小。

我該怎麼做同樣的事情,但div的高度也是動態的。

我想避免使用表和使用表中的表來解決這樣的事情的舊佈局技術。

這裏是jdFiddle中的一個例子。正如你可以看到的第2行第1列有多餘的行,但該行上的每個單元格都已增長以匹配它。

http://jsfiddle.net/djlerman/G9dgQ/2/

CSS:

#row { 
    display:   table; 
    table-layout:  fixed; 
    width:    95%; 
    margin:    0 auto; 
} 

#row div { 
    display:   table-cell; 
} 

.column { 
    border:    1px solid; 
    -moz-border-radius: 15px; 
    border-radius:  15px; 
    border-color:  grey; 
    box-shadow:   grey 1em 1em 1em 
    -webkit-gradient: grey 1em 1em 1em 
    -moz-linear-gradient: grey 1em 1em 1em 
    margin:    0 auto; 
    padding:   5px; 
    text-align:   center; 
} 

HTML:

<div id="row"> 
    <div class="column"> 
    Column 1 
    </div> 
    <div class="column"> 
    Column 2 
    </div> 
</div> 

<div id="row"> 
    <div class="column"> 
    Column 1 
    <br />Line 1<br />Line 2<br />Line 3<br />Line 4<br />Line 5<br />Line 6<br />Line 7<br /> 
    </div> 
    <div class="column"> 
    Column 2 
    </div> 
    <div class="column"> 
    Column 3 
    </div> 
    <div class="column"> 
    Column 4 
    </div> 
    <div class="column"> 
    Column 5 
    </div> 
    <div class="column"> 
    Column 6 
    </div> 
    <div class="column"> 
    Column 7 
    </div> 
    <div class="column"> 
    Column 8 
    </div> 
</div> 


<div id="row"> 
    <div class="column"> 
    Column 1 
    </div> 
    <div class="column"> 
    Column 2 
    </div> 
    <div class="column"> 
    Column 3 
    </div> 
</div> 

感謝,

〜Donavon

+ ------------ -------------------------------------------------- ----- +

試圖給出我想的答案,但它不會讓我發佈和回答。所以這裏是...

Jeeze。這個'div'的東西非常複雜。 :-(

這裏是我想出了感謝的答覆我和googleing的地段

希望它可以幫助別人:。

http://jsfiddle.net/djlerman/G9dgQ/5/

CSS:

.row { 
     display: table; 
     table-layout: fixed; 
     width: 95%; 
     margin: 0 auto; 
    } 
    .row div { 
     display: table-cell; 
    } 
    .column { 
     border: 0px; 
     margin: 0 auto; 
     padding: 0px; 
     text-align: center; 
     overflow: auto; 
     vertical-align: top; 
    } 
    .border { 
     padding: 5px; 
     border: 1px solid; 
     -moz-border-radius: 15px; 
     border-radius: 15px; 
     border-color: grey; 
     border-color: grey; 
     box-shadow: grey .25em .25em .25em; 
     -webkit-gradient: grey .25em .25em .25em; 
     -moz-linear-gradient: grey .25em .25em .25em; 
     vertical-align: top; 
     text-align: center; 
     overflow: auto; 
     margin: 0 auto; 
     width: 1000px; 
     max-width: 1000px; 
    } 
    .columnSpace { 
     width: 10px; 
    } 
    .rowSpace { 
     height: 10px; 
    } 

HTML:

<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2</div> 
    </div> 
</div> 
<div class="rowSpace"></div> 
<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1 
      <br />Line 1 
      <br />Line 2 
      <br />Line 3 
      <br />Line 4 
      <br />Line 5 
      <br />Line 6 
      <br />Line 7 
      <br /> 
     </div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 3</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 4</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 5</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 6</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 7</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 8</div> 
    </div> 
</div> 
<div class="rowSpace"></div> 
<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2 
      <br />Line 1 
      <br />Line 2 
      <br />Line 3</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 3</div> 
    </div> 
</div> 

+0

應該row2在row2 float undenith column2? (id =「row」應該是class =「row」,因爲你不止一次需要它) – caramba 2013-03-11 18:39:10

+0

這是一個很好的觀點。 所以在樣式部分#row將改爲.row 會#row的div {}改爲.row DIV {}?這些如何與班級一起工作? – 2013-03-11 19:03:09

+0

只是喜歡,你也可以寫.row .COLUMN {},因爲如果你寫.row的div {XX}在行內每格獲得XX風格 – caramba 2013-03-11 19:17:34

回答

0

Updated Fiddle

這裏是你的CSS相關的變化:

#row { 
    display:   block; 
    table-layout:  fixed; 
    width:    95%; 
    margin:    0 auto; 
    white-space:  nowrap; 
    } 

    #row div { 
    display:   inline-block; 
    vertical-align:  top; 
    } 

這樣做有什麼

table-cell顯示將要(驚喜)使DIV的行爲像一個TD。真的,你想要的是一個inline-block。我更新了CSS以反映這一點,並將#row容器更改爲簡單的塊顯示。然後,我將子div的垂直對齊設置爲頂部,這是必要的,因爲(默認情況下)瀏覽器想要將內聯內容與容器的基線(文本底部)對齊。

添加white-space: nowrap;防止從申報單時,他們超出了他們的容器,應解決的問題,以及擴大斷裂。

這應該充分解決您的問題。


更新2

Here's a flexbox approach;

這將保留該行的擴張以填充可用空間就像你在談論中的註釋。

+0

甜。這很棒!!! 唯一的是上面的行,下面的行失去了格式。他們不再擴展到填補行列。 – 2013-03-11 20:14:29

+0

也許你需要的是'flex-box'。 [CSS Flexbox演示](http://demo.agektmr.com/flexbox/) – 2013-03-11 20:16:02

+0

看起來很有趣,但我不認爲Flexbox模型足夠標準,但我可以使用當前項目。 P.S.您提供的第2個jsFiddle示例沒有擴展第1和第3行。所以我看不出這個部分如何配合在一起 – 2013-03-11 20:39:53

1

它似乎很讓我現在就發佈一個答案,所以我把答案回答部分。

Jeeze。這個'div'的東西非常複雜。 :-(

這裏是我想出了感謝的答覆我和googleing的地段

希望它可以幫助別人:。

http://jsfiddle.net/djlerman/G9dgQ/5/

CSS:

.row { 
     display: table; 
     table-layout: fixed; 
     width: 95%; 
     margin: 0 auto; 
    } 
    .row div { 
     display: table-cell; 
    } 
    .column { 
     border: 0px; 
     margin: 0 auto; 
     padding: 0px; 
     text-align: center; 
     overflow: auto; 
     vertical-align: top; 
    } 
    .border { 
     padding: 5px; 
     border: 1px solid; 
     -moz-border-radius: 15px; 
     border-radius: 15px; 
     border-color: grey; 
     border-color: grey; 
     box-shadow: grey .25em .25em .25em; 
     -webkit-gradient: grey .25em .25em .25em; 
     -moz-linear-gradient: grey .25em .25em .25em; 
     vertical-align: top; 
     text-align: center; 
     overflow: auto; 
     margin: 0 auto; 
     width: 1000px; 
     max-width: 1000px; 
    } 
    .columnSpace { 
     width: 10px; 
    } 
    .rowSpace { 
     height: 10px; 
    } 

HTML:

<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2</div> 
    </div> 
</div> 
<div class="rowSpace"></div> 
<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1 
      <br />Line 1 
      <br />Line 2 
      <br />Line 3 
      <br />Line 4 
      <br />Line 5 
      <br />Line 6 
      <br />Line 7 
      <br /> 
     </div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 3</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 4</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 5</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 6</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 7</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 8</div> 
    </div> 
</div> 
<div class="rowSpace"></div> 
<div class="row"> 
    <div class="column"> 
     <div class="border">Column 1</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 2 
      <br />Line 1 
      <br />Line 2 
      <br />Line 3</div> 
    </div> 
    <div class="columnSpace"></div> 
    <div class="column"> 
     <div class="border">Column 3</div> 
    </div> 
</div>