Project demo
html code
Kodofy | Modern Scroll Spy
Kodofy
Introduction
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum odit placeat pariatur reiciendis ratione
aliquid atque ut officiis et. Nihil.
Autem magni non quia perspiciatis laudantium dolorum id, iure qui esse rerum accusamus maiores saepe
doloribus, voluptate quibusdam aliquam aliquid eius modi sequi nisi illum maxime sapiente.
Dolor sit amet consectetur adipisicing elit. Animi magnam, at cum sed perferendis quidem tempora vero.
Deleniti nobis in modi beatae sit.
Design Workflow
Aliquam erat volutpat. Phasellus tristique, nunc vitae convallis tempor, mi magna suscipit ex, vel
accusamus ex. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
egestas.
In hac habitasse platea dictumst. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.
Documentation
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis.
Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Praesent
commodo cursus magna, vel scelerisque nisl consectetur et.
Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac,
vestibulum at eros. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
About Us
Curabitur blandit tempus porttitor. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis
vestibulum. Vestibulum id ligula porta felis euismod semper.
Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas sed diam eget risus varius blandit sit
amet non magna. Cras mattis consectetur purus sit amet fermentum.
Aenean lacinia bibendum nulla sed consectetur. Donec ullamcorper nulla non metus auctor fringilla. Duis
mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.
css code
:root {
--fb-blue: #1877F2;
--header-height: 70px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Poppins', sans-serif;
background-color: #ede8d2;
color: #333;
line-height: 1.6;
}
header {
position: fixed;
top: 0;
width: 100%;
height: var(--header-height);
background: #ffffff;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 5%;
z-index: 1000;
}
.logo {
font-weight: 700;
font-size: 24px;
color: var(--fb-blue);
}
nav a {
text-decoration: none;
color: #333;
padding: 8px 16px;
margin-left: 5px;
border-radius: 6px;
font-weight: 600;
transition: 0.3s ease;
font-size: 14px;
}
nav a:hover,
nav a.active {
background-color: #e8f2f4;
color: var(--fb-blue);
}
section {
min-height: 100vh;
padding: 100px 15% 40px;
border-bottom: 1px solid #d1cdb8;
scroll-margin-top: var(--header-height);
}
h2 {
color: var(--fb-blue);
margin-bottom: 20px;
font-size: 32px;
}
p {
margin-bottom: 20px;
font-size: 18px;
}
Javascript code
const sections = document.querySelectorAll("section");
const navLinks = document.querySelectorAll("header nav a");
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
navLinks.forEach((link) => link.classList.remove("active"));
const activeId = entry.target.getAttribute("id");
document
.querySelector(`header nav a[href="#${activeId}"]`)
.classList.add("active");
}
});
},
{
threshold: 0.5,
},
);
sections.forEach((section) => observer.observe(section));