JSFiddle - React, Tailwind, and code Playground
by TheFiddler
HTML
<div class="wrapper">
<div class="row header">
Header
</div>
<div class="row content">
<div class="scroll-panel">
<div class="item">
<div class="item-body"><img src="https://placehold.it/50x1060" alt="Item 1"><br>More Content</div>
<div class="item-sticky-footer">Bottom of Column</div>
</div>
<div class="item">
<div class="item-body">
<img src="https://placehold.it/50x340" alt="Item 2">
</div>
<div class="item-sticky-footer">Bottom of Column</div>
</div>
<div class="item">
<div class="item-body">
<img src="https://placehold.it/50x350" alt="Item 3">
</div>
<div class="item-sticky-footer">Bottom of Column</div>
</div>
<div class="item">
<div class="item-body">
<img src="https://placehold.it/50x460" alt="Item 4">
</div>
<div class="item-sticky-footer">Bottom of Column</div>
</div>
<div class="item">
<div class="item-body">
<img src="https://placehold.it/50x460" alt="Item 5">
</div>
<div class="item-sticky-footer">Bottom of Column</div>
</div>
</div>
</div>
<div class="row footer">
Footer
</div>
</div>
CSS
html,
body {
height: 100%;
margin: 0
}
.wrapper {
display: flex;
flex-flow: column;
height: 100%;
}
.wrapper .row {
border: 1px dotted grey;
}
.wrapper .row.header {
flex: 0 1 auto;
}
.wrapper .row.content {
flex: 1 1 auto;
}
.wrapper .row.footer {
flex: 0 1 40px;
}
.scroll-panel {
display: flex;
border: 2px dashed rgba(114, 186, 94, 0.35);
overflow: scroll;
flex-wrap: nowrap;
height: calc(100vh - 42px);
max-height: calc(100vh - 42px);
-webkit-overflow-scrolling: touch;
}
.item {
margin-right: 10px;
width: 500px;
border: 1px solid red;
overflow: hidden;
flex: 1 0 auto;
display: flex;
flex-direction: column;
}
.item-body {
flex-grow: 1;
}
.item-sticky-footer {
flex-shrink: 0;
flex-basis: 60px;
align-self: flex-end;
bottom: 30px;
height: 60px;
}