DEV Community

Cover image for Using position: sticky to create persistent headers in long texts

Using position: sticky to create persistent headers in long texts

codepo8 profile image Christian Heilmann ・1 min read

The sticky value of CSS positioning is an underused gem. It treats an element as it if is positioned relative until it reaches a certain position on the screen and then turns it into a fixed position.

I've used this on the developer advocacy handbook to keep headers in sight above the current section until you scroll to the next one. You can see it in action in the following screencast:


The CSS responsible is this:

h1, h2, h3, h4 {
  font-family: 'Segoe UI', Tahoma, Verdana, sans-serif;
  letter-spacing: -1px;
  position: sticky;
  background: var(--background);
  padding: .5em 0;
Enter fullscreen mode Exit fullscreen mode

This means that any heading that reaches the top of the screen when you scroll will stick there (position: sticky and top:0). Giving the heading the same background colour as the main document and adding some padding makes sure that the rest of the text isn't visible behind the fixed heading.

There are quite a few JavaScript solutions for this, but as you can see these are not needed.

Sticky had a problem that it wasn't supported by Safari for a while, but as with everything that is "impossible to use", this was only temporary. The web keeps moving, it is fun to catch up with it.

Discussion (0)

Forem Open with the Forem app