JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2463
  • Score
    100M100P100Q128712F
  • License MIT

Apply smooth scroll to anchor links to replicate CSS scroll-behavior

Package Exports

  • smoothscroll-anchor-polyfill

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (smoothscroll-anchor-polyfill) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

NPM version Build status License Documentation

 
 

smoothscroll-anchor-polyfill

⚓ Apply smooth scroll to anchor links to polyfill the CSS property scroll-behavior

 
 

Browser support

⚠ Requires smooth scroll for window.scroll() and Element.scrollIntoView() (e.g. smoothscroll-polyfill) to work!

IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
iOS Safari
iOS Safari
Opera
Opera
IE9+, Edge native native* last 2 versions last 2 versions native*

* hashchange navigation triggered by forwards/backwards buttons isn't smooth despite native support. Learn more

 

Usage

1. Set scroll-behavior: smooth in CSS

Has to be set global (on html), check the docs for limitations

Because CSS properties unknown to a browser can't efficiently be parsed from JavaScript, using normal stylesheets is not enough unfortunately. To specify the property in a way the polyfill can read it, you have two options:

1a. Using inline styles

<html style="scroll-behavior: smooth;">
...
</html>

1b. Using font-family as workaround

Alternatively, you can specify the property as the name of a custom font family. Your actual fonts will still work the way they should (plus, you can simply declare actual fonts on body). Unlike inline styles, this allows you to use normal CSS features like media queries. The following only enables smooth scroll on desktop devices, for example:

<style>
  html {
    scroll-behavior: instant;
    font-family: 'scroll-behavior: instant;', 'Roboto', sans-serif;
  }
  @media screen and (min-width: 1150px) {
    html {
      scroll-behavior: smooth;
      font-family: 'scroll-behavior: smooth;', 'Roboto', sans-serif;
    }
  }
</style>

This process can also be automated using a PostCSS plugin, so you can write regular CSS and don't have to bother with font-families. It just works™

2. Install the polyfill

Because this polyfill only wires up anchor links to use the browser's native window.scroll() and element.scrollIntoView() methods, you'll need to load a polyfill providing smooth scroll to these methods in addition to the steps outlined below.

smoothscroll-polyfill works, but you can just as well use another one or write your own implementation. Learn More

2a. From a CDN

<script src="https://unpkg.com/smoothscroll-anchor-polyfill"></script>

2b. From npm

npm install smoothscroll-anchor-polyfill

then

import 'smoothscroll-anchor-polyfill';

 

Full Documentation & Demo

The full documentation with advanced installation instructions, limitations, features like enabling and disabling the smooth scrolling and more can be found at jonaskuske.github.io/smoothscroll-anchor-polyfill.
The documentation site itself is built as a smooth scrolling one-page design, utilizing this polyfill.

 
 


PRs welcome!

 

© 2018, Jonas Kuske