htmlcssscrollableanchor-scroll

Preventing Text from Scrolling Over Anchored Button Using CSS


I have a button that I'm anchoring to the bottom left of my page, because I want it accessible at all times, without scrolling required if there is too much content above it. This is the css I have currently to accomplish this:

.add-button {
  font-size: 18px;
  background-color: #cfcfcf;
  padding: 10px 45px;
  position: absolute;
  left: 20px;
  bottom: 20px;
}

Now I'd like to make it so, if there is scrollable content, that the content doesn't scroll "behind" the button, but disappears from view some place just above the button. By the way, the containing div is titled "side-panel". How could I do this with css?


Solution

  • You should use a fixed position container in your footer that spans the full browser width (and has a background color the same as the body background your text is on) and put your button inside that. Then naturally your content will scroll behind it. The content 'disappearing some place above the button' can be accomplished by adjusting the padding (or padding-top) on the container.

    #footer {
      position: fixed;
      bottom: 0;
      width: 100%;
      padding: 10px;
      background-color: #fff;
    }
    <div id='wrapper'>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque finibus facilisis molestie. Cras vulputate velit in nulla gravida, malesuada ultrices quam tempor. Vestibulum dapibus sapien lectus, quis sollicitudin neque scelerisque et. Vivamus faucibus sem eget libero volutpat, et tincidunt purus lobortis. Duis volutpat diam risus, sed molestie tortor viverra id. Vestibulum nec eros et est hendrerit finibus. Aliquam erat volutpat. Cras massa erat, semper sed pharetra nec, tempus sed felis.</p>
    <p>Pellentesque odio quam, tincidunt dictum metus sit amet, sollicitudin pretium ligula. Etiam mollis orci quis massa vestibulum, vitae elementum urna dapibus. Nulla facilisi. Cras quis enim sit amet leo condimentum porttitor id non tortor. Phasellus sapien lorem, rhoncus eu nisi feugiat, vestibulum imperdiet risus. In dictum ligula est, vel porttitor lectus ultrices eu. Etiam aliquet ante molestie, sodales mauris eget, finibus velit. Maecenas feugiat nisl libero, in lacinia elit ornare ac.</p>
    <p>Maecenas id dignissim mauris, eget elementum massa. Morbi in dictum libero. Integer euismod tortor non arcu cursus laoreet. Aenean eleifend mi metus, eget semper nunc euismod luctus. Mauris venenatis volutpat mauris ut porta. Maecenas felis risus, consequat iaculis ipsum varius, tempus semper magna. Vestibulum vitae nisi nibh. Nam in tortor quis lacus tristique porta ac at risus. Praesent convallis, felis eget imperdiet porta, arcu sem facilisis elit, quis posuere lacus turpis quis ex. Etiam finibus lorem commodo nunc ultrices egestas. Etiam tempus volutpat bibendum. Vivamus ornare, odio vitae pharetra fringilla, turpis arcu luctus velit, a posuere lectus lacus id purus. Nam in malesuada tortor. Nunc pulvinar venenatis urna, in finibus nisi dapibus quis.</p>
    <p>Donec cursus risus non augue rutrum, at venenatis augue tincidunt. Phasellus interdum elementum quam, quis laoreet enim blandit sed. Mauris ut est non lectus mollis egestas a vitae purus. Nunc porta dui massa, eget tempor quam venenatis vel. Donec dignissim sollicitudin massa, ac convallis nisl dictum sed. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent non dui ullamcorper, rutrum lectus in, euismod mauris. Curabitur imperdiet ut magna nec pretium.</p>
    <p>Nunc vitae congue nunc. Aenean eget justo ante. Suspendisse nec molestie orci. Suspendisse ac consequat orci, in consequat risus. Vestibulum volutpat, erat ut egestas scelerisque, sapien diam mattis mauris, malesuada facilisis elit dui in urna. Aliquam erat volutpat. Aliquam erat volutpat. Maecenas venenatis tincidunt massa at imperdiet. Praesent auctor euismod purus, id iaculis sem placerat vitae. Aliquam erat volutpat.</p>
      <div id='footer'>
        <button id='button' value='Foo'>Foo!</button>
      </div>
    </div>