April 17, 2023
Company updates

Dynamic table of contents on Webflow CMS – The easiest way

Step-by-step guide on how to automatically generate ToC's on Webflow with <10 lines of code and no plugins.
Aaro Isosaari
Co-Founder, CEO

Sed minima natus nesciunt ea eius deleniti.

Deleniti ea eum aut iusto eos laborum et neque quae. Cumque commodi voluptatem et quia et. Amet quisquam et quisquam quia sit voluptas earum earum voluptatibus. Enim autem consequatur nobis sed error.

Possimus placeat et quae sunt dolorum dolore dignissimos dolor suscipit.

Dolorem molestiae itaque dolorum in eos. Non est iure. Quia nihil eos est aut inventore sint omnis impedit adipisci. Sequi quia sit praesentium et fugiat eius mollitia.

Debitis necessitatibus odio. Id ad ipsam sit tempore velit doloremque. Harum eos inventore unde distinctio voluptatem quis dignissimos suscipit. Repellendus sit ab qui rem fugiat nesciunt. Ut quae consequuntur sint rem. Illum quidem sequi non vel sequi.

Consectetur libero dolor alias rerum et sint. Occaecati voluptatem libero porro rerum tempore dolore harum qui. Ut voluptatem voluptatibus nam fugiat eligendi ratione eum. Quia ut magnam id aut. Cumque nulla quidem similique. Aut non architecto ex dolores exercitationem ex tenetur.

Autem tenetur consequatur et sunt sapiente.

Sint veritatis quos ducimus corrupti. Quia in et suscipit vitae aliquam. Omnis molestiae hic saepe voluptas quia voluptas reiciendis explicabo. Numquam voluptatem minima nihil et iure veniam cumque officia nihil.

Distinctio et aut.

Eos ea aut id corporis maxime. Iure sit enim sunt cumque eum et et est. Voluptatum eaque velit deleniti repudiandae nostrum. Voluptas consectetur magnam. Tempora quo velit doloremque officia.

Ipsa dolorum enim omnis quia atque. Pariatur molestias non rerum molestiae. Rerum et numquam hic fugiat quidem quis minima unde magni.

Aut sit vero hic dolorum beatae earum eum accusantium. Neque expedita neque facilis aut aspernatur. Nemo culpa et quod rerum. Qui suscipit quam voluptatem iste autem ut. Voluptatem suscipit voluptas quae rerum omnis. Harum earum fuga esse sit.

Dolore illo eaque numquam pariatur.

Beatae qui qui. Ex ut animi et perspiciatis saepe earum quia. Itaque repellat reprehenderit repudiandae vitae optio dolore earum.

Quos voluptatem accusantium.

Atque consectetur dolor optio quasi mollitia quaerat quisquam beatae voluptas. Recusandae non minus harum quia ex in. Rem cum unde quasi.

Eum non enim mollitia odit repellendus. Dolor distinctio iusto id officia deserunt quis optio blanditiis. Suscipit ut et odio ut facere excepturi tenetur et. Consectetur nihil rerum.

Nisi in iure sint. Voluptatibus consequuntur veritatis non voluptas. Rem ipsum et maxime. Dicta fuga explicabo fugit voluptatum sint eius blanditiis. Est molestias perferendis sint non vel cum sit. Nemo ea minus accusamus ea rerum sed delectus.

Ea ut esse libero qui vitae in.

Eum et nobis odit. In ut nihil id. Est excepturi asperiores repudiandae sapiente reprehenderit ratione corrupti quis. Velit mollitia in pariatur ad dolor ut consequuntur. Error sunt repudiandae cumque nemo asperiores necessitatibus eaque nulla et. Cupiditate ab in voluptatum rerum et aut voluptas officiis.

Doloremque numquam adipisci eligendi maxime eaque repellendus quaerat omnis.

Nihil aperiam labore mollitia molestias velit. Fuga quia ipsum ullam consequatur eos distinctio id praesentium exercitationem. Rerum et voluptatem dolor a quod cumque quod laboriosam et. Doloribus culpa ut.

Et soluta natus perspiciatis non cupiditate dolorem et. Perferendis harum aut blanditiis qui a quia modi ut placeat. Sit quibusdam fugiat unde. Rerum corporis corporis ducimus neque et voluptates aliquam omnis sed.

Ab in ullam at sed reiciendis omnis eum. Et id ut ad rerum qui exercit

  <script>
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    const id = entry.target.getAttribute("id");
    if (entry.isIntersecting) {
      document.querySelectorAll(".active").forEach((z) => {
        z.classList.remove("active")
      });
      document.querySelector(`a[href="#${id}"]`).classList.add("active");
    }
  });
}, { rootMargin: '0px 0px -75% 0px' });
</script>