Reputation: 557
I'm trying to create a row of divs that do not wrap and is scrollable with the regular page scrollbar (horizontal and vertical).
Only problem with my solution below is that the background-color
(and right padding) of the row are not shown if I scroll to the right.
Requirements:
It's ok to use flexbox, etc.
.row {
background-color: #CCC;
padding: 30px;
white-space: nowrap;
}
.row:nth-child(odd) {
background-color: #AAA;
}
.column {
display: inline-block;
width: 50%;
margin-right: 5%;
white-space: normal;
vertical-align: top;
}
.column:last-of-type {
margin-right: 0;
}
.item {
padding: 10px;
background-color: #FFF;
margin-bottom: 10px;
border: 1px solid black;
}
.item:last-of-type {
margin-bottom: 10px;
}
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
Upvotes: 1
Views: 771
Reputation: 87211
In addition to @Michael_B's well explained answer, another solution would be to use display: inline-block
on the row
, which, in opposite to block
, grows with its content.
As you can't set a width on the row
(will stop it from growing with content), you need to use viewport units (or any other unit other than percent) when setting the width and margin on the column
, so with the given markup, where the row
is set to take full width of the viewport, this might be a viable option.
.row {
background-color: #CCC;
padding: 30px;
white-space: nowrap;
display: inline-block;
}
.row:nth-child(odd) {
background-color: #AAA;
}
.column {
display: inline-block;
width: 50vw;
white-space: normal;
vertical-align: top;
margin-right: 5vw;
}
.column:last-of-type {
margin-right: 0;
}
.item {
padding: 10px;
background-color: #FFF;
margin-bottom: 10px;
border: 1px solid black;
}
.item:last-of-type {
margin-bottom: 10px;
}
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
<div class="column">
<div class="item">
Item
</div>
<div class="item">
Item
</div>
</div>
</div>
Upvotes: 3
Reputation: 371371
A block element by default extends to 100% width of its parent.
In your layout, that is exactly what is happening. The background-color
on .row
is covering the full with of its parent, body
. Any overflow would not be included.
Therefore, instead of putting the background color on each .row
element, put it on body
.
Add this to your code:
body {
background-color: #ccc;
margin: 0;
}
The collapsing right padding appears to be caused by the element being "over-constrained". When this happens, the right margin / padding is ignored.
You can read more about that here: How can I stop the last margin collapsing in flexbox?
To fix the problem in your layout, try using a transparent border instead of padding.
Add this to your code:
.column:last-child {
border-right: 30px solid transparent;
}
body {
background-color: #ccc;
margin: 0;
}
.row {
display: flex;
padding: 30px;
white-space: nowrap;
}
.column {
flex: 0 0 50%;
white-space: normal;
}
.column + .column {
margin-left: 30px;
}
.column:last-child {
border-right: 30px solid transparent;
}
.item {
padding: 10px;
background-color: #FFF;
margin-bottom: 10px;
border: 1px solid black;
<div class="row">
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
<div class="row">
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="column">
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
Upvotes: 1