Reputation: 3075
I am creating a table using display:table;
and I would like the odd numbered rows to have 4 columns
but the even number rows to only have 1 column
that spans 100% of the width
of the table. Is this possible?
.table {
display:table;
table-layout:fixed;
width:100%;
border-collapse:collapse;
white-space:nowrap;
}
.table-row {
display:table-row;
border:1px solid #000;
}
.cell {
display:table-cell;
padding:10px 0;
}
.table-row:nth-child(odd) .cell {
width:25%;
}
/* BELOW DOESN'T WORK */
.table-row:nth-child(even) .cell {
width:100%;
}
<div class="table">
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
</div>
I know that by using a standard table
, I could accomplish this using colspan
, but I can't seem to find a CSS equivalent and I don't have the ability to modify the HTML structure.
Upvotes: 1
Views: 158
Reputation: 13536
Unfortunately, CSS tables don't have any equivalent to colspan
/rowspan
attributes (yet), so it's impossible to have merged cells in CSS tables.
Given that you need a fixed layout with a repeating pattern of cell widths, I'd recommend to use Flexbox instead of CSS tables, like this:
.table { /* no special styles needed */ }
.table-row {
display: flex;
border:1px solid #000;
}
.table-row:not(:first-child) {
border-top: none; /* make inner borders thin */
}
.cell {
flex: 1 0 0; /* this divides the row width equally between cells */
padding:10px 0;
}
<div class="table">
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
<div class="table-row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
<div class="table-row">
<div class="cell">1</div>
</div>
</div>
Upvotes: 1