Improve navigation scrolling to show full content

- Adjusted IntersectionObserver threshold to 0.7 for better section detection
- Added scroll-padding-top to scroll_container to account for header
- Added scroll-margin-top to scroll_section for better snap alignment
- Updated navigation click handler to scroll with header height offset
- Ensures sections are fully visible when navigating
This commit is contained in:
douwe
2026-09-25 11:28:37 +02:00
parent f9036a2644
commit a7ea82ff19
2 changed files with 13 additions and 2 deletions
+2
View File
@@ -67,6 +67,7 @@ footer > div > p {
.scroll_container { .scroll_container {
overflow-y: auto; overflow-y: auto;
scroll-snap-type: y mandatory; scroll-snap-type: y mandatory;
scroll-padding-top: 100px;
} }
.scroll_section { .scroll_section {
@@ -75,6 +76,7 @@ footer > div > p {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
scroll-margin-top: 100px;
} }
.scroll_section > h1 { .scroll_section > h1 {
+11 -2
View File
@@ -10,6 +10,9 @@ document.addEventListener('DOMContentLoaded', () => {
function setupNavigationHighlight() { function setupNavigationHighlight() {
const sections = document.querySelectorAll('.scroll_section'); const sections = document.querySelectorAll('.scroll_section');
const navOptions = document.querySelectorAll('.nav_option'); const navOptions = document.querySelectorAll('.nav_option');
const header = document.querySelector('header');
const headerHeight = header ? header.offsetHeight : 0;
const observer = new IntersectionObserver((entries) => { const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => { entries.forEach(entry => {
if (entry.isIntersecting) { if (entry.isIntersecting) {
@@ -21,13 +24,17 @@ function setupNavigationHighlight() {
} }
}); });
}, { }, {
threshold: 0.5 threshold: 0.7,
rootMargin: `-${headerHeight}px 0px -40% 0px`
}); });
sections.forEach(section => observer.observe(section)); sections.forEach(section => observer.observe(section));
} }
function setupNavigationClicks() { function setupNavigationClicks() {
const header = document.querySelector('header');
const headerHeight = header ? header.offsetHeight : 0;
document.querySelectorAll('.nav_option').forEach(link => { document.querySelectorAll('.nav_option').forEach(link => {
link.addEventListener('click', (event) => { link.addEventListener('click', (event) => {
event.preventDefault(); event.preventDefault();
@@ -35,7 +42,9 @@ function setupNavigationClicks() {
const targetId = link.getAttribute('href'); const targetId = link.getAttribute('href');
const targetSection = document.querySelector(targetId); const targetSection = document.querySelector(targetId);
if (targetSection) { if (targetSection) {
targetSection.scrollIntoView({ const targetPosition = targetSection.getBoundingClientRect().top + window.pageYOffset - headerHeight;
window.scrollTo({
top: targetPosition,
behavior: 'smooth' behavior: 'smooth'
}); });
} }