Reputation: 31
I have created a website, where the starting navbar is towards the middle of the first section. However, I want to create something where, as you scroll through the first section, the navbar and title move up to the top, until it reaches the top, and then acts like a normal Title and navbar at the top (fixed positioning at the end, versus absolute positioning at the beginning). Here is my HTML and CSS Code. Do I need javascript for this? Thanks!
* {
margin: 0;
padding: 0;
}
body {
width: 100%;
height: 100vh;
background: url(https://images.squarespace-cdn.com/content/v1/5b47dd31a9e028b8190b6ad4/1577742949961-Y1FS4223B1A76MMFL9JP/ke17ZwdGBToddI8pDm48kHH9S2ID7_bpupQnTdrPcoF7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0nQwvinDXPV4EYh2MRzm-RRB5rUELEv7EY2n0AZOrEupxpSyqbqKSgmzcCPWV5WMiQ/marc+show.jpg) no-repeat center center/cover fixed;
}
html {
scroll-behavior: smooth;
scroll-snap-type: y mandatory;
}
.navbar {
position: fixed;
top: 63.5%;
left: 0px;
width: 100vw;
justify-content: flex-end;
display: flex;
}
.navbar ul {
display: flex;
flex-direction: row-reverse;
margin: 0 70px;
}
.navbar ul li a {
text-decoration: none;
color: white;
transition: color 0.5s;
}
.navbar ul li {
list-style: none;
padding: 0px 10px;
margin: 5px;
font-family: 'Roboto', sans-serif;
font-size: 17px;
}
section {
display: flex;
flex-direction: column;
width: 100vw;
height: 100vh;
align-items: center;
justify-content: center;
scroll-snap-align: center;
color: white;
background: rgba(0, 0, 0, 0.1);
}
.navbar ul li a:hover {
color: rgba(200, 200, 200, 0.8);
}
.Marc {
position: absolute;
top: 62.5%;
left: 65px;
font-family: 'Roboto', sans-serif;
font-size: 40px;
color: white;
}
.Marc a {
text-decoration: none;
color: white;
}
.List {
position: absolute;
top: 63%;
left: 29%;
}
.List ul li {
list-style: none;
margin: 0 0 25px 0;
}
.List ul li a {
color: white;
font-family: 'Roboto', sans-serif;
}
<div id="container">
<nav class="navbar">
<ul>
<li><a href="#ABOUT">ABOUT</a></li>
<li><a href="#BOOKING">BOOKING</a></li>
<li><a href="#MERCH">MERCH</a></li>
<li><a href="#TICKETS">TICKETS</a></li>
</ul>
</nav>
<div class="Marc">
<a href="#">MARC'S PAGE</a>
</div>
<div class="List">
<ul>
<li><a href="http://www.youtube.com">youtube</a></li>
<li><a href="http://www.instagram.com">instagram</a></li>
<li><a href="http://www.facebook.com">facebook</a></li>
<li><a href="http://www.twitter.com">twitter</a></li>
</ul>
</div>
<section>
</section>
<section id="TICKETS">
<h1>Tickets</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="MERCH">
<h1>Merch</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="BOOKING">
<h1>Booking</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="ABOUT">
<h1>About</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
</div>
Upvotes: 1
Views: 296
Reputation: 206151
Use position sticky
body {
height: 300vh;
border: 4px dashed #000;
}
.spacer {
height: calc(50vh - 1em);
}
nav {
position: sticky;
top: 0;
}
<div class="spacer"></div>
<nav>NAVIGATION</nav>
Example with your code - a bit simplified
* {
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
scroll-snap-type: y mandatory;
}
body {
background: url(https://images.squarespace-cdn.com/content/v1/5b47dd31a9e028b8190b6ad4/1577742949961-Y1FS4223B1A76MMFL9JP/ke17ZwdGBToddI8pDm48kHH9S2ID7_bpupQnTdrPcoF7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0nQwvinDXPV4EYh2MRzm-RRB5rUELEv7EY2n0AZOrEupxpSyqbqKSgmzcCPWV5WMiQ/marc+show.jpg) no-repeat center center/cover fixed;
font: 14px/1.4 'Roboto', sans-serif;
color: white;
}
ul {
list-style: none;
}
a {
color: white;
transition: 0.24s;
text-decoration: none;
}
a:hover {
opacity: 0.7;
}
section {
display: flex;
flex-direction: column;
height: 100vh;
align-items: center;
justify-content: center;
scroll-snap-align: center;
color: white;
background: rgba(0, 0, 0, 0.1);
}
section#MENU {
position: sticky;
top: 0;
z-index: 10;
flex-flow: row nowrap;
height: 60px;
}
section.MENU--pre {
height: calc(65vh - 30px); /* 100vh - 60px, so use -30px */
}
section.MENU--post {
height: calc(35vh - 30px); /* 100vh - 60px, so use -30px */
}
.Marc {
font-size: 30px;
padding: 0 30px;
}
.Navbar {
padding: 0 30px;
}
.Navbar ul {
display: flex;
}
.Navbar ul li a {
display: block;
font-size: 17px;
padding: 0px 10px;
}
<section id="HOME" class="MENU--pre"></section>
<section id="MENU">
<div class="Marc">
<a href="#HOME">MARC</a>
</div>
<nav class="Navbar">
<ul>
<li><a href="#ABOUT">ABOUT</a></li>
<li><a href="#BOOKING">BOOKING</a></li>
<li><a href="#MERCH">MERCH</a></li>
<li><a href="#TICKETS">TICKETS</a></li>
</ul>
</nav>
</section>
<section class="MENU--post"></section>
<section id="ABOUT">
<h1>About</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="BOOKING">
<h1>Booking</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="MERCH">
<h1>Merch</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
<section id="TICKETS">
<h1>Tickets</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium odit quae, sequi sit ex numquam.</p>
</section>
Upvotes: 2