I have a div
positioned fixed
on the left side of a web page, containing menu and navigation links. It has no height set from css, the content determines the height, the width is fixed. The problem is that if the content is too much, the div
will be larger than the window's height, and part of the content will not be visible. (Scrolling the window doesn't help, since the position is fixed
and the div
won't scroll.)
I tried to set overflow-y:auto;
but that doesn't help either, the div doesn't seem to notice that part of it is outside of the window.
How can I make it's contents scrollable only, if needed, if the div
hangs out of the window?
This question is related to
html
css
css-position
Add this to your code for fixed height and add one scroll.
.fixedbox {
max-height: auto;
overflow-y: scroll;
}
You probably need an inner div. With css is:
.fixed {
position: fixed;
top: 0;
left: 0;
bottom: 0;
overflow-y: auto;
width: 200px; // your value
}
.inner {
min-height: 100%;
}
For your purpose, you can just use
position: absolute;
top: 0%;
and it still be resizable, scrollable and responsive.
Here is the pure HTML and CSS solution.
We create a container box for navbar with position: fixed; height:100%;
Then we create an inner box with height: 100%; overflow-y: scroll;
Next, we put out content inside that box.
Here is the code:
.nav-box{_x000D_
position: fixed;_x000D_
border: 1px solid #0a2b1d;_x000D_
height:100%;_x000D_
}_x000D_
.inner-box{_x000D_
width: 200px;_x000D_
height: 100%;_x000D_
overflow-y: scroll;_x000D_
border: 1px solid #0A246A;_x000D_
}_x000D_
.tabs{_x000D_
border: 3px solid chartreuse;_x000D_
color:darkred;_x000D_
}_x000D_
.content-box p{_x000D_
height:50px;_x000D_
text-align:center;_x000D_
}
_x000D_
<div class="nav-box">_x000D_
<div class="inner-box">_x000D_
<div class="tabs"><p>Navbar content Start</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content</p></div>_x000D_
<div class="tabs"><p>Navbar content End</p></div>_x000D_
</div>_x000D_
</div>_x000D_
<div class="content-box">_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
<p>Lorem Ipsum</p>_x000D_
</div>
_x000D_
The link below will demonstrate how I accomplished this. Not very hard - just have to use some clever front-end dev!!
<div style="position: fixed; bottom: 0%; top: 0%;">
<div style="overflow-y: scroll; height: 100%;">
Menu HTML goes in here
</div>
</div>
Try this on your position:fixed element.
overflow-y: scroll;
max-height: 100%;
I'm presenting this as a workaround rather than a solution. This may not work all the time. I did it this way as I'm doing a very basic HTML page, for internal use, in a very bizarre environment. I know there are libraries like MaterializeCSS that can do really nice nav bars. (I was going to use them, but it didn't work with my environment.)
<div id="nav" style="position:fixed;float:left;overflow-y:hidden;width:10%;"></div>
<div style="margin-left:10%;float:left;overflow-y:auto;width:60%;word-break:break-all;word-wrap:break-word;" id="content"></div>
This is absolutely doable with some flexbox magic. Have a look at this pen.
You need css like this:
aside {
background-color: cyan;
position: fixed;
max-height: 100vh;
width: 25%;
display: flex;
flex-direction: column;
}
ul {
overflow-y: scroll;
}
section {
width: 75%;
float: right;
background: orange;
}
This will work in IE10+
Source: Stackoverflow.com