2016-06-22 484 views
2

我正在試驗兩層DOM元素集的CSS屬性,使其看起來像是一張表。最頂層的元素只有一個,它包裹着它的孩子,而這又反過來形成了一個單一的類似元素列表。像這樣:將一組CSS表單元格換成一個新行

<div class="t"> 
    <div class="c">First row</div> 
    <div class="c">2</div> 
    <div class="c">3</div> 
    <div class="c">4</div> 
    <div class="c">5</div> 
    <div class="c">Second row</div> 
    <div class="c">7</div> 
    <div class="c">8</div> 
    <div class="c">9</div> 
    <div class="c">0</div> 
</div> 

我想讓這個列表形成兩行,每行包含5個元素。所以我使用的CSS是這樣的:

.t { 
    display: table; 
    width: 100%; 
} 
.c { 
    display: table-cell; 
} 
.c:nth-child(5n + 1):after { 
    content: '-'; 
    display: table-row; 
} 

這是行不通的。

有沒有辦法保持兩層嵌套,並仍然有一個列表,看起來好像它是一個表?

回答

2

如果您可以編輯HTML,只需使結構像一個完整的表。

.t { 
 
    display: table; 
 
    width: 100%; 
 
} 
 
.r { 
 
    display: table-row; 
 
} 
 
.c { 
 
    display: table-cell; 
 
}
<div class="t"> 
 
    <div class="r"> 
 
    <div class="c">First row</div> 
 
    <div class="c">2</div> 
 
    <div class="c">3</div> 
 
    <div class="c">4</div> 
 
    <div class="c">5</div> 
 
    </div> 
 
    <div class="r"> 
 
    <div class="c">Second row</div> 
 
    <div class="c">7</div> 
 
    <div class="c">8</div> 
 
    <div class="c">9</div> 
 
    <div class="c">0</div> 
 
    </div> 
 
</div>

+0

想法正是以沒有多餘的嵌套。但事實證明,沒有辦法解決這個問題,所以我正在實施三層結構。 –

+0

據我所知,你將需要額外的標記適當的表格佈局。 – Stickers

+0

TBH,我最終離開了三層,並沒有像預期的那麼多。所以,那似乎是唯一可行的選擇。無論如何,謝謝你指出這一點! –

0

基於什麼/你如何希望他們的行爲,你可以使用float,(沒有爲這一個,雖然跨瀏覽器支持測試),但他們不會表現爲正常的table

另一種選擇是使用flexbox(仍不會表現爲正常table雖然)

.t { 
 
    display: table; 
 
    width: 100%; 
 
} 
 
.c { 
 
    display: table-cell; 
 
    float: left; 
 
    width: 20%; 
 
}
<div class="t"> 
 
    <div class="c">First row</div> 
 
    <div class="c">2</div> 
 
    <div class="c">3</div> 
 
    <div class="c">4</div> 
 
    <div class="c">5</div> 
 
    <div class="c">Second row</div> 
 
    <div class="c">7</div> 
 
    <div class="c">8</div> 
 
    <div class="c">9</div> 
 
    <div class="c">0</div> 
 
</div>

+0

Floats和Flexbox都不會爲每一行中的每個第n個元素提供相等的寬度。這就是我試圖應用'display:table-cell'的原因。使它們自動均衡其寬度。 –

0

實現你預期的結果,我已經使用的位置是:相對的選項,並顯示: table-cell

HTML:

<div class="t"> 
    <div class="c">First row</div> 
    <div class="c">2</div> 
    <div class="c">3</div> 
    <div class="c">4</div> 
    <div class="c">5</div> 
    <div class="c">Second row</div> 
    <div class="c">7</div> 
    <div class="c">8</div> 
    <div class="c">9</div> 
    <div class="c">0</div> 
</div> 

CSS:

.t { 
    display: table; 
    width: 100%; 
} 

.c { 
    display: table-cell; 
    padding: 1%; 
    border: 1px solid black; 
    text-align: center; 
    width: 10%; 
} 

.c:nth-child(n+6) { 
    display: table-cell; 
    position: relative; 
    left: -50%; 
    top: 60px; 
} 

Codepen- http://codepen.io/nagasai/pen/mEOjLL

+0

我已經使用border來檢查.class的對齊和寬度,以便在所有div上保持相同的寬度。希望這對你有用:) –

相關問題