CSS: remove padding created by scroll

Viewed 3777

I'm trying to build a UI similar to Apple Mail, when left bar has horizontal list of emails through which you can scroll. The problem is that when I add a scroll, it's creating an additional padding instead of being rendered on top of the content.

<!doctype html>
<html style="height: 100%;">
<head>
<style>
.scrollable-list-item {
  padding: 1rem;
  border-bottom: 1px solid #cdcdcd;
}
.scrollable-list-item-active {
  background-color: #0069d9;
  color: white;
}
</style>
</head>
<body style="height: 100%; width: 100%; margin: 0">
  <div style="height: 100%; width: 100%; display: flex;">
      <div style="width: 200px; height: 100%; overflow-x: scroll; background-color: #efefef;">
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item scrollable-list-item-active">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
      </div>
      <div>content</div>
  </div>
</body>
</html>

Without scroll:

enter image description here

With scroll:

enter image description here

What is the proper way to add scroll without adding a blank area around it? Thank you!

2 Answers

You can apply scrollbar-width: none to the container div.

This will hide the scrollbar altogether. You will be able to scroll.

Although the browser support for this property is fairly new.

You can read about it here

Without a custom library the desired behaviour is not possible

<!doctype html>
<html style="height: 100%;">
<head>
<style>
 .container {
   scrollbar-width: none;
  -ms-overflow-style: none;
  }
.scrollable-list-item {
  padding: 1rem;
  border-bottom: 1px solid #cdcdcd;
  
}
.scrollable-list-item-active {
  background-color: #0069d9;
  color: white;
}
</style>
</head>
<body style="height: 100%; width: 100%; margin: 0">
  <div style="height: 100%; width: 100%; display: flex;">
      <div class="container"style="width: 200px; height: 100%; overflow-x: scroll; background-color: #efefef;">
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item scrollable-list-item-active">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
          <div class="scrollable-list-item">scrollable list item</div>
      </div>
      <div>content</div>
  </div>
</body>
</html>

You got this extra padding because you can't control the scrollbar, it's an element generated by your web browser.

The only solution to get over this problem is to disable the default scrollbar and use a custom one like SimpleBar. This way you will have full control over the scrollbar and it will be the same accross every web browser.

Related