<!-- Not working properly in Safari and ios doesn't like background-attachment fixed much -->
<div class="wrap">
  <nav class="nav">
    <ul>
      <li><a href='#section1'>Section 1</a></li>
      <li><a href='#section2'>Section 2</a></li>
      <li><a href='#section3'>Section 3</a></li>
      <li><a href='#section4'>Section 4</a></li>
      <li><a href='#section5'>Section 5</a></li>
      <li><a href='#section6'>Section 6</a></li>
      <li><a href='#section7'>Section 7</a></li>
      <li><a href='#section8'>Section 8</a></li>
    </ul>
  </nav>
  <div class="main">
    <h1>Automatic Scroll Menu Highlight</h1>
    <section id="section1" class="section1">
      <h2>Section 1</h2>
      <p>Scroll the page up and down and the left hand menu will automatically highlight the current section. No JS was harmed in producing this function.</p>
      <p>This demo is proof of concept only and requires on a few 'magic numbers' so is of limited use other than an exercise in what can be done with CSS alone.</p>
      <p>Enjoy...</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section2" class="section2">
      <h2>Section 2</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section3" class="section3">
      <h2>Section 3</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section4" class="section4">
      <h2>Section 4</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section5" class="section5">
      <h2>Section 5</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section6" class="section6">
      <h2>Section 6</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section7" class="section7">
      <h2>Section 7</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>

    <section id="section8" class="section8">
      <h2>Section 8</h2>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
      <p>scroll</p>
    </section>
  </div>
</div>
html {
  box-sizing: border-box;
}
*,
*:before,
*:after {
  box-sizing: inherit;
}
html {
  overflow: hidden;
}
body {
  scroll-behavior: smooth;
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch; /* Lets it scroll lazy */
  height: 100vh;
}
html,
body {
  margin: 0;
  padding: 0;
}
h1 {
  text-align: center;
  margin: 0;
  padding: 1rem 0;
  background: palegoldenrod;
}
ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
.wrap {
  display: flex;
  align-items: flex-start;
  position: relative;
  background: #f9f9f9;
}
.main {
  flex: 1 0 0;
  background: #8000006e;
}
.main p {
  padding: 0 10px;
  margin: 0.5rem 0 1rem;
}
.main .item1 {
  margin: 0 0 0 -220px; /* magic number alert*/
}
.nav {
  width: 200px;
  position: -webkit-sticky;
  position: sticky;
  top: 0;
  margin-right: 1rem;
  z-index: 2;
  box-shadow: 0 0 10px 10px rgba(0, 0, 0, 0.3);
  background: rgba(0, 0, 0, 0.1);
}
.nav a {
  padding: 5px 10px;
  text-decoration: none;
  border: 1px solid #000;
  display: block;
  height: 2rem; /* magic number alert*/
  color: #000;
}
.nav a:hover {
  background: #ccc;
}
.wrap section h2 {
  margin: -2rem 0 0;
  position: -webkit-sticky;
  position: sticky;
  top: 0px;
  background: #000;
  color: #fff;
  padding: 5px 10px;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
.wrap section:before {
  content: "\2190";
  display: block;
  margin: 0 1rem 0 0;
  position: -webkit-sticky;
  position: sticky;
  top: 1px;
  left: 0;
  height: 2rem; /* magic number alert*/
  line-height: 2rem;
  text-align: right;
  background: linear-gradient(to left, red, red 10px, transparent 10px),
    linear-gradient(to left, #eee, #ccc);
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-size: 200px 2rem;
  width: 198px;
  margin-left: -215px;
  color: transparent;
}

/* Safari 9+ hack as it wn't draw background all the time */
@supports (-webkit-hyphens: none) {
  .wrap .main section:before {
    color: red;
    background: transparent;
  }
}
.wrap .section2:before {
  top: 2rem; /* magic number alert*/
  background-position: 0 2rem;
}
/* magic number alerts below */
.wrap .section3:before {
  top: 4rem;
  background-position: 0 4rem;
}
.wrap .section4:before {
  top: 6rem;
  background-position: 0 6rem;
}
.wrap .section5:before {
  top: 8rem;
  background-position: 0 8rem;
}
.wrap .section6:before {
  top: 10rem;
  background-position: 0 10rem;
}
.wrap .section7:before {
  top: 12rem;
  background-position: 0 12rem;
}
.wrap .section8:before {
  top: 14rem;
  background-position: 0 14rem;
}
//nope

// top menu version can be found here:
//https://codepen.io/paulobrien/pen/jOGLZwW
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.