Unable to precisely position fixed-position overlay on a grid item - html

I am trying to create a grid with 2 columns:
1) a narrow fixed-position sidebar on the left
2) A wide column for the main content on the right.
According to this post, there is a problem with fixed-position grid items. One response was to:
wrap your contents in a div and set the div to have position: fixed.
The author successfuly presented a demonstration of this technique. Here, the fixed sidebar was at the right-side of the screen.
Since I need my fixed sidebar on the left, I have adapted the technique, as shown here. My adaptation was basically to provide a width for the <div> overlaid in the sidebar:
aside div {
width: 200px;
margin: 0;
padding: 0;
border: 1px solid blue;
/* padding: 0 15px 0 5px; */
position: fixed;
}
The adaptation works in principle, but for some reason the overlay is offset to the right by a small margin, as indicated by the blue border (provided for debugging purposes). As a result, the text in the sidebar overflows and the text-wrap takes place outside the sidebar.
1) Why does this happen?
2) Is it possible to precisely overlay the fixed-position div on the grid's sidebar? I have tried margins and padding for certain elements as shown in the codepen, but they don't help. I have also tried reducing the width of the overlay, as shown here. This works, but is arbitrary.

You can just add width:100% to your .grid > * {} part of the CSS. This will just override the width of all children of .grid to fill up the whole width of the grid-element so that the child elements don't overflow out of the grid.
Here is what your final code will become:
body {
margin: 0;
}
.grid {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas: "sb mn";
grid-column-gap: 10px;
}
.grid>* {
margin: 0;
padding: 0;
width: 100%;/* This is the part I added */
}
.sidebar {
grid-area: sb;
border: 1px solid green;
background-color: red;
}
aside div {
width: 200px;
margin: 0;
padding: 0;
border: 1px solid blue;
/* padding: 0 15px 0 5px; */
position: fixed;
}
.main {
grid-area: mn;
}
<div class="grid">
<aside class="sidebar">
<div>
<h4>laboris nisi</h4>
<p>
Cum sociis natoque penatibus bibendum enim facilisis gravida neque convallis a cras. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient.
</p>
<p>
Id neque aliquam vestibulum sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer.
</p>
<p>
Vestibulum rhoncus est tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Feugiat nibh sed pulvinar proin gravida.
</p>
</div>
</aside>
<div class="main">
<h1>Cras semper auctor neque vitae</h1>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
</div>
<!-- main -->
</div>
<!-- grid -->
But if you just needed a fixed sidebar, you could just add height:100vh; overflow-Y: scroll to .main or as #ndvo has suggested using position: sticky, this is a much better solution.
Then your code should become:
body {
margin: 0;
padding: 0;
}
.grid {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-areas: "sb mn";
grid-column-gap: 2vw;/* using the unit 'vw'(2% of viewport-width) will make the gap responsive */
height: 100vh; /* 100% of viewport-height. (Fill up the whole screen height) */
}
.sidebar {
grid-area: sb;
padding: 0 5px;
/* The part below is just appearance */
box-shadow: inset 2px 2px red, inset -2px -2px red;
background: yellow;
}
.sidebarContent {
position: sticky;
top: 0;
/* The part below is just appearance */
height:60vh;
background: red;
text-align: center;
color: yellow
}
.main {
grid-area: mn;
padding: 0 5px;
/* The part below is just appearance */
box-shadow: inset 2px 2px red, inset -2px -2px red;
background: green;
}
.mainContent {
/* The part below is just appearance */
background: red;
text-align: center;
color: yellow
}
<div class="grid">
<aside class="sidebar">
<div class="sidebarContent">
SideBar Content
</div>
</aside>
<div class="main">
<div class="mainContent">
Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>Main
Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>Main Content<br>
</div>
</div>
</div>
Tangent:
I prefer using box-shadows over border as borders takeup additional space thereby ruining the grid percentages by a bit (Maybe I'm being OCD 😜).
I would also like to recommend GridGarden, a game with just 28 very easy levels ( At the time of writing ). Just complete it once. It helped me; it might help others too.

Problems with Fixed Positioning
The first grid item has a width of 200px (using grid-template-columns: 200px 1fr in the grid definition) and at the same time the aside div inside the grid item is being set width: 200px along with padding (and left: 0 not added along with position: fixed.
Suggestion
But I would suggest to omit fixed positioning for the aside div and add grid-template-rows: 100vh to the grid container. This will restrict your grid to the viewport and now you can add overflow-y: auto to the two grid items as desired. This will give you the same effect of a fixed sidebar - see demo below:
body {
margin: 0;
}
.grid {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 100vh; /* ADDED */
grid-template-areas: "sb mn";
grid-column-gap: 10px;
}
.grid>* {
margin: 0;
padding: 0;
}
.sidebar {
grid-area: sb;
border: 1px solid green;
/*padding: 0 5px;*/
background-color: red;
overflow: hidden; /* ADDED */
}
aside div {
/* width: 200px; */
margin: 0;
padding: 0 5px; /* CHANGED */
border: 1px solid blue;
/* padding: 0 15px 0 5px; */
/* position: fixed; */
}
.main {
grid-area: mn;
overflow-y: auto; /* ADDED */
}
<div class="grid">
<aside class="sidebar">
<div>
<h4>laboris nisi</h4>
<p>
Cum sociis natoque penatibus bibendum enim facilisis gravida neque convallis a cras. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient.
</p>
<p>
Id neque aliquam vestibulum sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer.
</p>
<p>
Vestibulum rhoncus est tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Feugiat nibh sed pulvinar proin gravida.
</p>
</div>
</aside>
<div class="main">
<h1>Cras semper auctor neque vitae</h1>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
<p>
Vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum. Aenean et tortor at risus. Venenatis a condimentum vitae sapien pellentesque habitant. Sed elementum tempus egestas sed sed risus pretium quam vulputate. Ornare arcu odio ut
sem nulla pharetra diam sit amet. Aliquam etiam erat velit scelerisque in dictum non. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Ipsum dolor sit amet consectetur adipiscing elit ut aliquam. Eget nulla facilisi etiam dignissim.
Odio tempor orci dapibus ultrices in. Amet volutpat consequat mauris nunc congue nisi. Accumsan sit amet nulla facilisi morbi tempus iaculis urna. Nibh sed pulvinar proin gravida. Cum sociis natoque penatibus et magnis dis parturient. Non pulvinar
neque laoreet suspendisse interdum consectetur.
</p>
<p>
Mattis molestie a iaculis at erat. Hac habitasse platea dictumst vestibulum rhoncus. Lacus luctus accumsan tortor posuere ac ut consequat semper viverra. Facilisis mauris sit amet massa vitae tortor condimentum lacinia. Non diam phasellus vestibulum lorem.
Sed tempus urna et pharetra pharetra massa massa. Id leo in vitae turpis. Dignissim sodales ut eu sem integer. Erat velit scelerisque in dictum. Id venenatis a condimentum vitae sapien.
</p>
<p>
Vitae semper quis lectus nulla at volutpat. Imperdiet sed euismod nisi porta lorem mollis. Fames ac turpis egestas sed. Tempus quam pellentesque nec nam aliquam sem et tortor. Ut tellus elementum sagittis vitae et leo duis. Habitant morbi tristique senectus
et netus et malesuada. Penatibus et magnis dis parturient. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Sit amet volutpat consequat mauris nunc congue. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Feugiat
nibh sed pulvinar proin gravida hendrerit lectus. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Aliquet risus feugiat in ante metus. Vitae aliquet nec ullamcorper sit amet. Aliquam malesuada bibendum arcu vitae. Aliquet nibh
praesent tristique magna sit amet purus. Gravida rutrum quisque non tellus orci ac auctor. Etiam erat velit scelerisque in dictum non consectetur a erat.
</p>
</div>
<!-- main -->
</div>
<!-- grid -->

Related

how to make sticky work at this situation?

I want my table's first row and column sticky on the screen and there is another content before the table
the content before table can't scroll horizontally, and the table must can scroll horizontally and vertically
is there any way to do it without JavaScript?
.container {
width: 100%;
overflow-x: hidden;
display: flex;
flex-direction: column;
background: black;
}
.fixed-header {
width: 100%;
height: 100px;
color: aquamarine;
}
.table {
position: sticky;
top: 10px;
;
width: 100%;
height: 1000px;
background: blanchedalmond;
}
<div class="container">
<div class="fixed-header"></div>
<div class="table"></div>
</div>
You could add overflow-x: scroll; to .table in your CSS, as I did in the example below. Also, the table must not be a child of something for it to be sticky.
body {
background: black;
}
.container {
width: 100%;
overflow-x: hidden;
display: flex;
flex-direction: column;
background: black;
}
.fixed-header {
width: 100%;
height: 100px;
color: aquamarine;
}
.table {
position: sticky;
top: 10px;
overflow-x: scroll;
width: 100%;
height: 100px;
background: blanchedalmond;
}
#testContent {
color: white;
}
<div class="container">
<div class="fixed-header">
<pre>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eros ex, tristique in pretium a, pharetra sit amet risus. Nam in arcu sit amet augue vestibulum finibus et laoreet magna. Nam porta mi neque, a varius nisl tempus eu. Pellentesque faucibus nulla commodo felis porttitor, ut placerat tellus dignissim. Maecenas pulvinar efficitur fringilla. Morbi vitae eros lectus. Nullam ornare justo pellentesque scelerisque rutrum. Duis vel pretium elit. Pellentesque facilisis ultrices ultrices. Integer et consectetur velit. Vivamus vulputate auctor ipsum, sed volutpat odio vehicula ut.
Nulla eget erat quis ligula varius condimentum. Nam fringilla vel dolor vitae posuere. Nullam et rutrum mauris. Proin ultrices pharetra urna vel luctus. Aenean viverra commodo varius. Aliquam sed fringilla ex. Nunc vestibulum, leo vel pulvinar convallis, magna ex ornare mauris, id sodales nisi nisi eu metus. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam eleifend vitae arcu in efficitur. Donec felis leo, vulputate et tristique quis, suscipit eu augue. Maecenas non metus dignissim lacus hendrerit tempus non vel eros. Nam tempus nisl elementum, blandit velit id, viverra erat.
Etiam id quam nec purus vehicula ornare. Donec pretium, lectus et mollis dapibus, neque magna fermentum mauris, commodo rhoncus quam velit vitae dolor. Donec rutrum odio nec tincidunt pulvinar. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis a mauris varius, vestibulum enim in, pulvinar est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin laoreet elit rutrum hendrerit tempus. Aenean condimentum erat eget quam finibus, non commodo enim suscipit.
In et laoreet enim, sed volutpat purus. Cras maximus enim purus, quis placerat justo iaculis eu. Phasellus eget nisl felis. Sed aliquam et elit non vehicula. Proin sem quam, dignissim in dui ac, faucibus tincidunt arcu. Phasellus blandit eros interdum est consequat, id fermentum mauris semper. Integer blandit nisi eget turpis mattis, a luctus orci laoreet. Donec porttitor, metus sollicitudin porta ullamcorper, metus quam consectetur dolor, ut cursus quam ligula vel ipsum. Integer vestibulum nisl ut elit porttitor, at congue turpis commodo. Sed facilisis velit justo, vel accumsan est convallis sit amet. Morbi volutpat risus eget pulvinar fermentum. Nam cursus ac tortor eu mattis.
Nam elit velit, volutpat ut ante id, aliquet dapibus felis. Pellentesque aliquet est ornare, vulputate magna non, vestibulum dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque dapibus nisi sit amet.<pre>
</div>
</div>
<div class="table">
<pre>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eros ex, tristique in pretium a, pharetra sit amet risus. Nam in arcu sit amet augue vestibulum finibus et laoreet magna. Nam porta mi neque, a varius nisl tempus eu. Pellentesque faucibus nulla commodo felis porttitor, ut placerat tellus dignissim. Maecenas pulvinar efficitur fringilla. Morbi vitae eros lectus. Nullam ornare justo pellentesque scelerisque rutrum. Duis vel pretium elit. Pellentesque facilisis ultrices ultrices. Integer et consectetur velit. Vivamus vulputate auctor ipsum, sed volutpat odio vehicula ut.
Nulla eget erat quis ligula varius condimentum. Nam fringilla vel dolor vitae posuere. Nullam et rutrum mauris. Proin ultrices pharetra urna vel luctus. Aenean viverra commodo varius. Aliquam sed fringilla ex. Nunc vestibulum, leo vel pulvinar convallis, magna ex ornare mauris, id sodales nisi nisi eu metus. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam eleifend vitae arcu in efficitur. Donec felis leo, vulputate et tristique quis, suscipit eu augue. Maecenas non metus dignissim lacus hendrerit tempus non vel eros. Nam tempus nisl elementum, blandit velit id, viverra erat.
Etiam id quam nec purus vehicula ornare. Donec pretium, lectus et mollis dapibus, neque magna fermentum mauris, commodo rhoncus quam velit vitae dolor. Donec rutrum odio nec tincidunt pulvinar. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis a mauris varius, vestibulum enim in, pulvinar est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin laoreet elit rutrum hendrerit tempus. Aenean condimentum erat eget quam finibus, non commodo enim suscipit.
In et laoreet enim, sed volutpat purus. Cras maximus enim purus, quis placerat justo iaculis eu. Phasellus eget nisl felis. Sed aliquam et elit non vehicula. Proin sem quam, dignissim in dui ac, faucibus tincidunt arcu. Phasellus blandit eros interdum est consequat, id fermentum mauris semper. Integer blandit nisi eget turpis mattis, a luctus orci laoreet. Donec porttitor, metus sollicitudin porta ullamcorper, metus quam consectetur dolor, ut cursus quam ligula vel ipsum. Integer vestibulum nisl ut elit porttitor, at congue turpis commodo. Sed facilisis velit justo, vel accumsan est convallis sit amet. Morbi volutpat risus eget pulvinar fermentum. Nam cursus ac tortor eu mattis.
Nam elit velit, volutpat ut ante id, aliquet dapibus felis. Pellentesque aliquet est ornare, vulputate magna non, vestibulum dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque dapibus nisi sit amet.<pre>
</div>
<div class="container">
<div id="testContent">
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
<p>Test</p>
</div>
</div>

How to set `text-overflow: ellipsis` only after the third line? [duplicate]

This question already has answers here:
Limit text length to n lines using CSS
(17 answers)
Closed 4 years ago.
How to set text-overflow: ellipsis only after the third line?
I want to show "..." at the end of the long text, but only after 3 lines.
You can use before selector to add ellipsis after the third line. An example below:
.ellipsis {
overflow: hidden;
position: relative;
line-height: 1.2em; /* one line's height */
max-height: 3.6em; /* max three lines */
/* And some optional styles for example snippet */
text-align: justify;
margin: auto;
width: 75vw;
background-color: lightblue;
border: solid 2px black /* for reference */
}
.ellipsis:before {
content: '...';
position: absolute;
right: 0;
bottom: 0;
background-color: lightblue; /* same as .ellipsis's background-color */
padding-left: 5px;
pointer-events: none
}
<p class="ellipsis">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras elementum urna sit amet tellus lacinia, et pulvinar turpis commodo. Fusce vel quam non tortor finibus cursus a nec enim. Proin sollicitudin ex mauris, eu mattis leo tempor nec. Aenean ornare tincidunt cursus. Aliquam ante lorem, pretium nec tempus at, tempus vitae ex. Sed consectetur leo mollis enim pharetra consequat. Ut ac aliquam elit. Pellentesque porta, lacus in congue interdum, urna orci hendrerit purus, eget vestibulum tortor ex sed mi. Sed vel elementum mi. Etiam viverra ut dolor sit amet vehicula. Duis aliquet urna eget leo suscipit, ac ullamcorper metus mollis. Curabitur ac elit et sem pretium posuere a sodales sem. Morbi rutrum ipsum eu luctus molestie. Suspendisse sed elit nunc. Quisque pulvinar, purus at dignissim imperdiet, nulla mi sollicitudin dolor, at faucibus mauris urna in libero. In nibh nisi, mollis eget justo a, malesuada euismod lectus. Fusce mauris massa, volutpat et hendrerit at, dapibus a ex. Sed mattis malesuada odio. Aenean gravida est quis lorem interdum egestas. Curabitur pulvinar eros sed vehicula ultrices. Fusce mollis pharetra luctus. Phasellus maximus vulputate turpis. Sed finibus enim et velit lacinia, at commodo turpis gravida. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent ex magna, ultrices vitae dapibus egestas, vestibulum id leo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin eget nisl luctus, fringilla mi ac, imperdiet dui. Fusce vel accumsan metus. Nulla et imperdiet arcu, sit amet placerat mi. Nunc vehicula quam sed finibus mattis. Ut suscipit justo at sollicitudin molestie. Phasellus consectetur convallis quam et malesuada. Donec consectetur sagittis turpis, facilisis vehicula neque luctus sed. Praesent vulputate porttitor interdum. Cras lobortis sit amet turpis ut fermentum. Cras diam orci, posuere nec ultricies sollicitudin, semper at augue. Donec mattis elit vitae ligula posuere aliquam. Cras gravida at metus ac viverra. Sed tempor urna aliquet ex ullamcorper, bibendum porttitor nisl iaculis. Integer tellus lacus, vehicula vel nunc ac, rutrum sodales sem. Maecenas pretium eleifend efficitur. Praesent auctor consectetur turpis a ullamcorper. Duis mattis nibh sed quam volutpat fringilla. Ut eu nulla ut nisi egestas ultrices. Proin elementum non risus non maximus.</p>

How to fix z-index issue?

I have a fixed navigation bar and a paragraph of text. On scroll, I want the paragraph's text to appear behind the navigation bar. I am currently using z-index, but it is not working. May someone help guide me in the right direction please? Here is the complete code so far. Thank you. Here is the link to the codepen: https://codepen.io/kylelong/pen/oaBLGd
[<html>
<head>
<title>Title</title>
<style>
/* Navigation menu */
.nav-bar
{
position: fixed;
top: 0;
left: 0;
height: 45px;
width: 100%;
z-index: 1000;
-webkit-box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2);
-moz-box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2);
box-shadow: 0px 2px 3px 0px rgba(0,0,0,0.2);
/*border-bottom: 2px solid #4169E1;*/
}
#text{
position: relative;
width: 300px;
left: 0px;
top: 0px;
z-index: -1;
}
</style>
</head>
<body>
<nav class="nav-bar"> </nav>
<p id='text'>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris rutrum eleifend sapien ut egestas. Nam consequat varius pretium. Sed porttitor ultricies turpis sed convallis. Phasellus consectetur lacus et est vehicula sodales. Integer suscipit urna porttitor mauris lacinia iaculis. Sed molestie orci elit, in condimentum mi venenatis vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sit amet mattis felis, sit amet finibus leo. Vestibulum congue dapibus neque, sed consequat sapien. Fusce id aliquet lacus. Donec feugiat lacus dolor, id bibendum quam lacinia id. Nam luctus dignissim velit, id pulvinar sapien semper at. Fusce vitae efficitur urna, in vulputate est. Fusce convallis ante quis eros cursus ultricies.
Vivamus placerat dolor sit amet arcu malesuada imperdiet. Nam lorem quam, tempus at fringilla a, pretium vitae dolor. Pellentesque eu sem volutpat, volutpat purus nec, sollicitudin eros. Donec rhoncus, magna et interdum aliquam, ligula velit tincidunt nulla, nec pellentesque tellus nulla a odio. Donec volutpat dui et turpis tristique elementum. Aenean feugiat dui vestibulum ligula imperdiet, ac hendrerit est sollicitudin. Cras imperdiet, velit vel facilisis mattis, eros mauris varius elit, vitae luctus metus elit nec eros. Vivamus sollicitudin ultricies consequat. Ut luctus, arcu sed ultricies facilisis, libero risus sagittis mauris, vel tempor mi lorem sed lectus. Sed gravida vulputate cursus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris eu fermentum massa. Suspendisse potenti. Mauris feugiat ligula ut est feugiat laoreet. Vivamus eget mattis nulla. Donec sem nulla, imperdiet ut elementum in, consequat a nisl.
Morbi lobortis sodales nunc, ut maximus neque pharetra ac. Suspendisse gravida lorem nisi, in aliquet tellus gravida vel. Mauris venenatis risus non mi consequat elementum. Pellentesque eu ornare ligula. Nunc eleifend turpis et viverra aliquam. Suspendisse ligula ligula, iaculis vel egestas et, vehicula ut arcu. Morbi lectus neque, varius eu feugiat vitae, luctus eget neque. Phasellus convallis commodo lacus quis accumsan. Vestibulum aliquam fringilla facilisis. Duis eleifend mauris a nisi consectetur dictum et ac purus. Donec sollicitudin vulputate neque, non ullamcorper urna vulputate non.
Nulla vitae dictum dui. Cras pretium volutpat iaculis. Phasellus consequat mi non neque molestie iaculis quis eu neque. Aenean elementum sem ut massa varius, in fringilla magna vestibulum. In a leo finibus, aliquet metus et, viverra lacus. Curabitur ex neque, iaculis vel varius et, iaculis at ipsum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus tincidunt est porta, placerat ante pretium, facilisis eros. Duis viverra felis elit, sed condimentum sapien pulvinar a. Nunc dapibus eget augue in rhoncus. Suspendisse efficitur luctus ligula nec consectetur. Sed feugiat gravida nisi et congue. Donec egestas nec sapien et consectetur. Cras vitae metus sodales, varius nulla quis, molestie enim. Aliquam erat volutpat. Nunc nec lacus sed massa vestibulum facilisis.
Ut eu posuere diam. Curabitur enim massa, aliquam at nulla nec, rhoncus consequat augue. Nunc pretium ut tortor ut sodales. Ut commodo purus velit, at imperdiet tortor finibus at. In scelerisque odio sed turpis fermentum iaculis. Integer lacinia scelerisque ex tempus sodales. Nunc velit sapien, tempus vel consectetur non, sagittis eget felis. Proin in maximus lorem. Proin eros mi, tempus eu accumsan quis, porta vel urna. Quisque vestibulum suscipit dui vel faucibus. Pellentesque non erat mattis, tempus tortor eu, posuere augue.
</p>
</body>
</html>][1]
The issue seems to be that your nav bar is transparent. If you set the background-color property to a solid (black), you can see that your z-index CSS selector is indeed working (you could also set the z-index back to 1 instead of 1000 :) ).

Remove auto height distribution on nested CSS flex? [duplicate]

This question already has answers here:
How to disable equal height columns in Flexbox?
(4 answers)
How does flex-wrap work with align-self, align-items and align-content?
(2 answers)
Closed 5 years ago.
I'm currently setting display:flex on the parent as well the child element in the middle.
The issue now is since there is a nested flex property applied on the child element. The grandchild elements' height get auto distributed and generate unwanted spacing in between.
How to you remove the extra spacing in between while keeping the display:flex property on the child element?
.parent{
background:#cdcdcd;
display:flex;
flex-direction:row;
flex-wrap: wrap;
padding:30px 10px;
box-sizing: border-box;
}
.child{
flex-grow:1;
flex-basis:33.3%;
padding:10px;
background:#a2a2a2;
box-sizing: border-box;
}
.child:nth-child(3){
display:flex;
flex-direction:row;
flex-wrap: wrap;
padding:10px;
align-items: flex-start;
}
.grandchild {
padding: 10px;
background: #696969;
flex-grow: 1;
flex-shrink: 0;
flex-basis: 100%;
box-sizing: border-box;
}
<div class="parent">
<p style="position:absolute; top:-2px; left:28px;">parent</p>
<div class="child">child<br />
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibusCurabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
<div class="child">child
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
</div>
<div class="child">child<br />
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
</div>
You can do it with the align-items: flex-start set on the .parent element (flex-container):
.parent {
background: #cdcdcd;
display: flex;
/*flex-direction: row; by default*/
flex-wrap: wrap;
align-items: flex-start; /* added */
padding: 30px 10px;
box-sizing: border-box;
}
.child {
flex: 1 1 33.33%; /* shorthand */
padding: 10px;
background: #a2a2a2;
box-sizing: border-box;
}
.child:nth-child(3){
display: flex;
/*flex-direction: row;*/
flex-wrap: wrap;
padding: 10px;
align-items: flex-start;
}
.grandchild {
padding: 10px;
background: #696969;
flex: 1 0 100%; /* shorthand */
box-sizing: border-box;
}
<div class="parent">
<p style="position:absolute;top:-2px;left:28px">parent</p>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibusCurabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
<div class="child">child
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
</div>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
</div>
By default the value of the align-items property is set to stretch, which makes flex-items fill the flex-container cross axis (y) where the height of all items, therefore flex-container, is dictated by the height of the "tallest" one.
Addition:
If you prefer visually nicer solutions:
Solution #2:
.parent {
background: #cdcdcd;
display: flex;
/*flex-direction: row;*/
flex-wrap: wrap;
padding: 30px 10px;
box-sizing: border-box;
}
.child {
flex: 1 0 33.33%;
padding: 10px;
background: #a2a2a2;
box-sizing: border-box;
}
.child:nth-child(3){
display: flex;
/*flex-direction: row;*/
flex-wrap: wrap;
padding: 10px;
/*align-items: flex-start; commented out*/
align-self: flex-start; /* added */
}
.grandchild {
padding: 10px;
background: #696969;
flex: 1 0 100%;
box-sizing: border-box;
}
<div class="parent">
<p style="position:absolute;top:-2px;left:28px">parent</p>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibusCurabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
<div class="child">child
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
</div>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
</div>
Solution #3:
.parent {
background: #cdcdcd;
display: flex;
/*flex-direction: row;*/
flex-wrap: wrap;
padding: 30px 10px;
box-sizing: border-box;
}
.child {
flex: 1 1 33.33%;
padding: 10px;
background: #a2a2a2;
box-sizing: border-box;
}
.child:nth-child(3){ /* added additional wrapper div to html */
display: flex;
flex-direction: column; /* modified */
flex-wrap: wrap;
padding: 10px;
/*align-items: flex-start; commented out*/
}
.grandchild {
padding: 10px;
background: #696969;
flex: 1 0 100%;
box-sizing: border-box;
}
<div class="parent">
<p style="position:absolute;top:-2px;left:28px">parent</p>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibusCurabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
<div class="child">child
<div> <!-- additional wrapper div -->
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
<div class="grandchild">grandchild</div>
</div>
</div>
<div class="child">child<br>
<p>
Curabitur ullamcorper erat eu dolor condimentum tempor. Praesent vel tortor rutrum, consequat nisl quis, congue turpis. Aliquam faucibus, arcu in egestas aliquet, massa mauris scelerisque nisl, sit amet interdum libero leo eu ligula. Aliquam tempor tincidunt
ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet,ante vel bibendum. Nullam volutpat mattis laoreet. Praesent et ullamcorper ante, eget cursus ante. Nam et elit quam. Sed velit quam, suscipit ut mollis sit amet, dapibus eu lacus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nullam egestas arcu at molestie bibendum. Quisque et urna vestibulum, eleifend tortor id, volutpat odio. Nullam quis commodo felis, eu mattis augue. Fusce ante nisi, tincidunt in faucibus eget, mollis vitae felis. Vestibulum auctor
lorem lacinia, luctus tortor et, volutpat mi.
</p>
</div>
</div>

Navigation menu appearing at the bottom its parent [duplicate]

This question already has an answer here:
CSS - div aligning to the bottom of parent div (inline-block)
(1 answer)
Closed 7 years ago.
I'm learning HTML, and wrote up the following to try and create a side navigation menu:
<html>
<head>
<style>
* {
border: 2px solid red;
}
#mainBody {
}
#mainNav {
display: inline-block;
width: 20%;
}
.navMenu {
list-style-type: none;
}
#mainContentBody {
display: inline-block;
width: 75%
}
</style>
</head>
<body>
<header>
<p>This is a header!</p>
</header>
<section id="mainBody">
<nav id="mainNav">
<ul class="navMenu">
<li> Pascal Cropped </li>
<li> Ethics Excerpt </li>
<li> Pascal Cropped Again </li>
</ul>
</nav>
<section id="mainContentBody">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac nisl mollis, sodales neque id, efficitur velit. Aliquam et ultricies purus. Nulla facilisi. Mauris id pulvinar ipsum, ac commodo ipsum. Nunc non facilisis augue. Suspendisse nec lacus ullamcorper, ultricies augue nec, consectetur enim. Donec fermentum suscipit dapibus. Nunc quis interdum nibh, vel aliquam nunc. Nunc non tincidunt sem. Nullam vitae dapibus metus. Curabitur eget dignissim lectus. Vivamus tempus sagittis eros sit amet aliquet. Integer tincidunt porta leo ac suscipit.
Quisque a feugiat erat. Proin non ante ut leo aliquam aliquam. Etiam tempus volutpat nulla sed commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc laoreet est et rutrum dapibus. Cras luctus id ex vel volutpat. Suspendisse porttitor, mauris vitae dapibus convallis, felis eros maximus ex, vitae sodales ante nulla eu quam. Curabitur nec metus nisi. Nunc dapibus orci condimentum lobortis dictum. Proin augue orci, pharetra a mollis vel, ornare id tellus. Pellentesque lectus leo, maximus et risus id, gravida ornare diam. Etiam eget metus quis quam feugiat mattis. Praesent vitae elementum metus.
Fusce volutpat fringilla ex, sit amet imperdiet sapien efficitur a.
</p>
<p>
Proin gravida orci diam, vitae placerat ligula hendrerit vel. Donec turpis nulla, lacinia vel justo in, consequat elementum tellus. Vivamus ut gravida metus. Aliquam lobortis, dolor nec pulvinar venenatis, lorem enim viverra sapien, vitae ultricies velit nisl vel arcu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut a tincidunt lorem, non mollis neque. Nullam interdum dolor luctus ornare gravida. In tempus diam lectus. Sed tempor, purus in convallis suscipit, nisi nibh vehicula augue, et iaculis nisl nisl vestibulum justo. Integer posuere cursus velit, et iaculis justo aliquet et. Sed dapibus egestas neque, tincidunt aliquam nisl dapibus at. Morbi malesuada pellentesque posuere. Fusce a libero at mauris maximus maximus eu sed mi. Vivamus est nulla, viverra non felis at, elementum condimentum lacus. Sed sodales enim non tortor faucibus imperdiet.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus est diam, mollis non purus non, posuere porta est. Donec vestibulum consequat massa vitae dictum. Sed eu lectus sed leo dignissim rutrum. Donec efficitur imperdiet purus, quis iaculis risus accumsan a. Integer ac erat id odio fringilla elementum. Pellentesque egestas ex eleifend, mollis nunc a, feugiat dui. Duis interdum id arcu vel aliquam. Aenean fringilla quam dolor, ut tempor elit cursus ut. Sed congue dui sit amet risus egestas rutrum. Nam dictum porttitor turpis, sit amet suscipit nunc consectetur ut. Donec at tincidunt nibh. Vestibulum sagittis pharetra eleifend.
Aenean pharetra, mi ac mattis suscipit, eros ante vehicula tellus, egestas ultricies felis elit sed ex. Suspendisse in nisl elit. Nullam nec libero nisl. Nulla tincidunt purus sapien, sed pulvinar diam varius non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non libero sed lorem dignissim hendrerit. Proin felis tortor, dignissim ac maximus ornare, consectetur vitae velit. Aenean nec accumsan felis. Proin vitae fringilla magna. Pellentesque sagittis purus sed finibus pretium. Nam nec ante dapibus odio suscipit mattis. Nulla in nisi convallis, pulvinar leo ac, fringilla nisl. Nam a dictum dolor.
</p>
</section>
</section>
</body>
</html>
For some reason though, the side menu is positioned at the bottom of #mainBody, instead of near the top:
Note all the white space above the menu on the left. I tried adjusting its position with the top CSS property, but it didn't change anything.
Can anyone point me in the right direction?
Add
vertical-align:top;
to your css *{}
jsFiddle
Add a vertical-align to the #mainNav as follow:
#mainNav {
vertical-align: top;
display: inline-block;
width: 20%;
}