16 Apr 2023

Using HTML and CSS to create a custom scrollbar

When it comes to designing user interfaces, it's important to pay attention to every detail, no matter how small. One such detail that can make a big impact on the overall design is the scrollbar. While most browsers provide their own default scrollbar, it's possible to create a custom scrollbar using HTML and CSS. In this blog post, we'll go over how to do just that.

Before we get started, it's important to note that custom scrollbars are not supported in all browsers, so it's important to consider your target audience when deciding whether or not to implement one. Additionally, creating a custom scrollbar can require a bit of extra CSS, so be sure to optimize your design for performance.

With that said, let's get started!

Step 1: Create a Container

To create a custom scrollbar, we'll need to first create a container for our content. This can be any HTML element, such as a div or a section. For the purposes of this tutorial, we'll use a div with a class of "container".

<div class="container">
  <!-- Your content here -->
</div>

Step 2: Apply Styles to the Container

Next, we'll apply some styles to our container element to prepare it for our custom scrollbar. We'll set the container to have a fixed height and overflow set to "auto". This will allow the container to scroll vertically if the content inside is too large to fit in the container.

.container {
  height: 300px; /* Set the height of the container */
  overflow: auto; /* Enable scrolling */
}

Step 3: Hide the Default Scrollbar

To create our custom scrollbar, we'll need to first hide the default scrollbar provided by the browser. We can do this using the following CSS:

/* Hide the scrollbar */
.container::-webkit-scrollbar {
  display: none;
}

Note that this code only applies to webkit-based browsers (such as Chrome and Safari). If you need to support other browsers, you'll need to use different CSS rules to hide the scrollbar.

Step 4: Create the Track

Now that we've hidden the default scrollbar, we can start building our custom one. The first part of the scrollbar we'll create is the track. This is the long, narrow element that the thumb (the part of the scrollbar that the user clicks and drags) moves along.

To create the track, we'll use the following CSS:

/* Track */
.container::-webkit-scrollbar-track {
  background-color: #f1f1f1; /* Set a background color */
}

This sets the background color of the track to a light gray color.

Step 5: Create the Thumb

Next, we'll create the thumb. This is the part of the scrollbar that the user interacts with to scroll the content. To create the thumb, we'll use the following CSS:

/* Thumb */
.container::-webkit-scrollbar-thumb {
  background-color: #888; /* Set a background color */
  border-radius: 10px; /* Round the corners */
}

This sets the background color of the thumb to a dark gray color and rounds the corners to give it a more polished look.

Step 6: Add Hover and Active States

To add some interactivity to our scrollbar, we'll add styles for when the user hovers over the track or clicks and drags the thumb.

/* Track */
.container::-webkit-scrollbar-track {
  background-color: #f1f1f1;
}

/* Thumb */
.container::-webkit-scrollbar-thumb {
  background-color: #888;
  border-radius: 10px;
}

/* Handle on hover */
.container::-webkit-scrollbar-thumb:hover {
  background-color: #555;
}
  
/* Handle on active */
.container::-webkit-scrollbar-thumb:active {
  background-color: #444;
}

These styles change the background color of the thumb when the user hovers over it or clicks and drags it.

Step 7: Final Touches

Finally, we can add some finishing touches to our custom scrollbar. For example, we can adjust the size of the thumb and track by setting their width and height:

/* Track */
.container::-webkit-scrollbar-track {
  background-color: #f1f1f1;
}

/* Thumb */
.container::-webkit-scrollbar-thumb {
  background-color: #888;
  border-radius: 10px;
  height: 50px;
}

/* Handle on hover */
.container::-webkit-scrollbar-thumb:hover {
  background-color: #555;
}

/* Handle on active */
.container::-webkit-scrollbar-thumb:active {
  background-color: #444;
}

In this example, we've set the height of the thumb to 50 pixels. You can adjust this value to suit your design.

We can also add a border to the thumb to make it stand out more:

/* Thumb */
.container::-webkit-scrollbar-thumb {
  background-color: #888;
  border-radius: 10px;
  height: 50px;
  border: 3px solid #555;
}

And that's it! With these styles, we've created a custom scrollbar for our container element.

Conclusion

Creating a custom scrollbar using HTML and CSS can be a great way to add some personality to your user interface. However, it's important to remember that not all browsers support custom scrollbars, so be sure to test your design in a variety of browsers to ensure compatibility.

Additionally, it's important to optimize your design for performance. Adding too many styles to your scrollbar can slow down the scrolling performance of your website, so be sure to test your design and make adjustments as needed.

Overall, custom scrollbars can be a fun and useful addition to your user interface design toolkit. With a bit of CSS, you can create a scrollbar that perfectly complements your design aesthetic.