I can't seem to figure this out. After looking at (least)
... I still cannot get my <pre>
tag content to scroll horizontally to the width of my available viewport space based on my flexbox layout.
Here is a CodePen with my current setup: https://codepen.io/neezer/pen/BJjzzM
* {
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
}
.outer {
display: flex;
padding: 20px;
background-color: #aaa;
width: 100vw;
height: 100vh;
overflow: hidden;
}
.nav {
flex: 0 0 200px;
background-color: blue;
color: white;
padding: 20px;
}
.content {
flex: 1;
margin-left: 20px;
background-color: green;
display: flex;
flex-direction: column;
}
.header {
flex: 0 auto;
background-color: purple;
padding: 20px;
margin-bottom: 20px;
}
.header h1 {
margin: 0;
}
.pre {
flex: 1;
background-color: red;
margin: 0;
overflow: auto;
min-width: 0;
}
<div class='outer'>
<div class='nav'>
sidebar
</div>
<div class='content'>
<div class='header'>
<h1>Horizontal problems</h1>
</div>
<pre class='pre'>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
</pre>
</div>
</div>
What am I doing wrong here?
You still suffer from the minimum size issue of flex items.
In a nested Flexbox structure, it can also affect flex item's being a flex container (or an ancestor being a flex item), and in this case your content
is one, and also needs to have its min-width
set to 0
.
As a side note, in this case the min-width: 0
set on pre
is not generally necessary when using overflow
with a value other than visible
, and could be removed (which I did in the Codepen).
Stack snippet
* {
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
}
.outer {
display: flex;
padding: 20px;
background-color: #aaa;
width: 100vw;
height: 100vh;
overflow: hidden;
}
.nav {
flex: 0 0 200px;
background-color: blue;
color: white;
padding: 20px;
}
.content {
flex: 1;
min-width: 0; /* added */
margin-left: 20px;
background-color: green;
display: flex;
flex-direction: column;
}
.header {
flex: 0 auto;
background-color: purple;
padding: 20px;
margin-bottom: 20px;
}
.header h1 {
margin: 0;
}
.pre {
flex: 1;
background-color: red;
margin: 0;
overflow: auto;
min-width: 0;
}
<div class='outer'>
<div class='nav'>
sidebar
</div>
<div class='content'>
<div class='header'>
<h1>Horizontal problems</h1>
</div>
<pre class='pre'>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
<span>this is a really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, really, long piece of text
</span>
</pre>
</div>
</div>