Fixed Headers, On-Page Links, and Overlapping Content, Oh My!
Let’s take a basic on-page link:
<a href="#section-two">Section Two</a>
When clicked, the browser will scroll itself to the element with that ID:
. A browser feature as old as browsers themselves, just about.
But as soon as we position: fixed;
came into play, it became a bit of an issue. The browser will still jump to bring the newly targeted element into view, but that element may be obscured by a fixed position element, which is pretty bad UX.
I called this “headbutting the browswer window” nearly 10 years ago, and went over some possible solutions. Nicolas Gallager documented five different techniques. I’m even using a fixed position header here in v17 of CSS-Tricks, and I don’t particularly love any of those techniques. I sort of punted on it and added top padding to all my
elements, which is big enough for the header to fit there.
There is a new way though! Finally!
Šime Vidas documented this in Web Platform News. There are a bunch of CSS properties that go together as part of CSS scroll snapping, but it turns out that scroll-padding
and scroll-margin
can be used outside of a scroll snapping container.
body {
scroll-padding-top: 70px; /* height of sticky header */
}
This only works in Chromium browsers:
See the Pen
Scroll Padding on Fixed Postion Headers by Chris Coyier (@chriscoyier)
on CodePen.
This is such a useful thing we shoot hoot and holler for WebKit and Firefox to do it.
The post Fixed Headers, On-Page Links, and Overlapping Content, Oh My! appeared first on CSS-Tricks.