IE 11 flex fix
IE11 solution for flex items with scrollable content and autosizing
by abhishekdev
HTML
<div class="ie11-wrapper">
<section>
<header>header</header>
<article>
<button onclick="toggleContentSize()">
Toggle content size
</button>
<div>
Long <br />
Long <br />
</div>
<div id="more-content">
<!--
Remove this line to see sizing with less content -->
ExtraWideExtraWideExtraWideExtraWideExtraWideExtraWideExtraWideExtraWideExtraWideExtraWide<br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
Long <br />
<!-- -->
</div>
</article>
<footer>footer</footer>
</section>
</div>
CSS
/* Source adapted from: https://jsfiddle.net/gktpsyv5/ */
.ie11-wrapper {
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
min-width: 100vw;
position: fixed;
top: 0;
z-index: 1000;
padding: 1rem 0;
background: rgba(0,0,0,0.5);
}
section {
display: flex;
flex-direction: column;
width: auto;
border: 2px dashed red;
background: white;
max-width: min(50vw, 75rem);
min-width: min(25vw, 75rem);
margin: auto;
position: relative;
height: auto;
max-height: calc(100vh - 2rem);
align-self: stretch;
flex: 0 1 auto;
}
article {
min-height: 0px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
overflow: auto;
}
header,
footer {
flex-basis: auto;
flex-grow: 0;
flex-shrink: 0;
background: lightgreen;
}
JavaScript
function toggleContentSize() {
document.getElementById('more-content').style.display = toggleContentSize.large ? 'none' : 'block';
toggleContentSize.large = !toggleContentSize.large;
}
toggleContentSize.large = true;