Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
simplebar
Advanced tools
SimpleBar is a custom scrollbar library that aims to provide a simple and lightweight solution for creating custom scrollbars that look consistent across different browsers and platforms. It allows you to style the scrollbar to match your application's design while maintaining native scrolling performance.
Custom Scrollbars
SimpleBar allows you to create custom scrollbars by adding a `data-simplebar` attribute to your HTML elements. This will replace the default scrollbar with a custom one that you can style using CSS.
<div data-simplebar style="max-height: 300px;">
Your content here
</div>
Auto-Hiding Scrollbars
You can control the auto-hide behavior of the scrollbar by setting the `data-simplebar-auto-hide` attribute to `false`. This will keep the scrollbar visible at all times.
<div data-simplebar-auto-hide="false" style="max-height: 300px;">
Your content here
</div>
RTL Support
SimpleBar supports right-to-left (RTL) text direction. You can enable this by setting the `data-simplebar-direction` attribute to `rtl`.
<div data-simplebar-direction="rtl" style="max-height: 300px;">
Your content here
</div>
Custom Scrollbar Styles
You can customize the appearance of the scrollbar by targeting the `.simplebar-scrollbar` class in your CSS. This allows you to change the color, width, and other styles of the scrollbar.
<style>
.simplebar-scrollbar::before {
background-color: #3498db;
}
</style>
<div data-simplebar style="max-height: 300px;">
Your content here
</div>
Perfect Scrollbar is a similar library that provides custom scrollbars with a focus on performance and simplicity. It offers more customization options and better support for touch devices compared to SimpleBar.
React Custom Scrollbars is a React-specific library for creating custom scrollbars. It provides a more React-friendly API and better integration with React applications compared to SimpleBar.
SimpleBar is a plugin that tries to solve a long time problem: how to get custom scrollbars for your web-app while keeping a good user experience?
SimpleBar does NOT implement a custom scroll behaviour. It keeps the native overflow: auto
scroll and only replace the scrollbar visual appearance.
SimpleBar is meant to be as easy to use as possible and lightweight. If you want something more advanced I recommend KingSora 's Overlay Scrollbars.
- Via npm
npm install simplebar resize-observer-polyfill --save
- Via Yarn
yarn add simplebar resize-observer-polyfill
- Via <script>
tag
<link
rel="stylesheet"
href="https://unpkg.com/simplebar@latest/dist/simplebar.css"
/>
<script src="https://unpkg.com/simplebar@latest/dist/simplebar.min.js"></script>
<!-- or -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.css"
/>
<script src="https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.js"></script>
note: you should replace @latest
to the latest version (ex @2.4.3
), if you want to lock to a specific version.
You can find the full list of modules available there.
Check out the React and Vue examples.
If you are using a module loader (like Webpack) you first need to load SimpleBar:
import 'simplebar'; // or "import SimpleBar from 'simplebar';" if you want to use it manually.
import 'simplebar/dist/simplebar.css';
// You will need a ResizeObserver polyfill for browsers that don't support it! (iOS Safari, Edge, ...)
import ResizeObserver from 'resize-observer-polyfill';
window.ResizeObserver = ResizeObserver;
You might also need other polyfills as SimpleBar comes with basic browser support only.
You can use Babel @babel/preset-env
to polyfill for you, see our examples package or check out polyfill.io.
Set data-simplebar
on the element you want your custom scrollbar. You're done.
<div data-simplebar></div>
Don't forget to import both css and js in your project!
To make sure your elements are scrollable when JavaScript is disabled, it's important to include this snippet in your <head>
to reset scrolling:
<noscript>
<style>
/**
* Reinstate scrolling for non-JS clients
*/
.simplebar-content-wrapper {
scrollbar-width: auto;
-ms-overflow-style: auto;
}
.simplebar-content-wrapper::-webkit-scrollbar,
.simplebar-hide-scrollbar::-webkit-scrollbar {
display: initial;
width: initial;
height: initial;
}
</style>
</noscript>
SimpleBar is not intended to be used on the body
element! I don't recommend wrapping your entire web page inside a custom scroll as it will often badly affect the user experience (slower scroll performance compared to the native body scroll, no native scroll behaviours like click on track, etc.). Do it at your own risk! SimpleBar is meant to improve the experience of internal web page scrolling; such as a chat box or a small scrolling area. Please read the caveats section first to be aware of the limitations!
If you are experiencing issues when setting up SimpleBar, it is most likely because your styles are clashing with SimpleBar ones. Make sure the element you are setting SimpleBar on does not override any SimpleBar css properties! We recommend to not style that element at all and use an inner element instead.
Thanks to BrowserStack for sponsoring open source projects and letting us test SimpleBar for free.
You can start SimpleBar manually if you need to:
new SimpleBar(document.getElementById('myElement'));
or
Array.prototype.forEach.call(
document.querySelectorAll('.myElements'),
(el) => new SimpleBar(el)
);
If you want to use jQuery:
new SimpleBar($('#myElement')[0]);
or
$('.myElements').each((el) => new SimpleBar(el));
The default styling is applied with CSS. There is no "built-in" way to style the scrollbar, you just need to override the default CSS.
Ex, to change the color of the scrollbar:
.simplebar-scrollbar::before {
background-color: red;
}
Options can be applied to the plugin during initialization:
new SimpleBar(document.getElementById('myElement'), {
option1: value1,
option2: value2,
});
or using data-attributes:
<div data-simplebar data-simplebar-auto-hide="false"></div>
Available options are:
By default SimpleBar automatically hides the scrollbar if the user is not scrolling (it emulates Mac OSX Lion's scrollbar). You can make the scrollbar always visible by setting the autoHide
option to false
:
new SimpleBar(document.getElementById('myElement'), { autoHide: false });
Default value is true
.
You can also control the animation via CSS as it's a simple CSS opacity transition.
Define the minimum scrollbar size in pixels.
Default value is 10
.
It is possible to change the default class names that SimpleBar uses. To get your own styles to work refer to simplebar.css
to get an idea how to setup your css.
content
represents the wrapper for the content being scrolled.scrollContent
represents the container containing the elements being scrolled.scrollbar
defines the style of the scrollbar with which the user can interact to scroll the content.track
styles the area surrounding the scrollbar
.classNames: {
// defaults
content: 'simplebar-content',
scrollContent: 'simplebar-scroll-content',
scrollbar: 'simplebar-scrollbar',
track: 'simplebar-track'
}
You can force the track to be visible (same behaviour as overflow: scroll
) using the forceVisible
option:
forceVisible: true|'x'|'y' (default to `false`)
By default, SimpleBar behave like overflow: auto
.
You can activate RTL support by passing the direction
option:
direction: 'rtl' (default to `ltr`)
You will need both data-simplebar-direction='rtl'
and a css rule with direction: rtl
.
This option is deprecated. You can now achieve this in CSS:
.simplebar-scrollbar:before {
transition-delay: 2s;
}
Controls the click on track behaviour.
Default to true
.
Controls the min and max size of the scrollbar in px
.
Default for scrollbarMinSize
is 25
.
Default for scrollbarMaxSize
is 0
(no max size).
Set custom aria-label attribute for users with screen reader.
The default value is scrollable content
.
tabIndex to set for simplebar. Defaults to 0
.
Simply define in css overflow-x: hidden
on your element.
If later on you dynamically modify your content, for instance changing its height or width, or adding or removing content, you should recalculate the scrollbars like so:
const simpleBar = new SimpleBar(document.getElementById('myElement'));
simpleBar.recalculate();
If you want to access to the original scroll element, you can retrieve it via a getter:
const simpleBar = new SimpleBar(document.getElementById('myElement'));
simpleBar.getScrollElement();
scroll
eventYou can subscribe to the scroll
event, just like you do with native scrolling elements:
const simpleBar = new SimpleBar(document.getElementById('myElement'));
simpleBar.getScrollElement().addEventListener('scroll', function(...));
You can retrieve the element containing data like this:
const simpleBar = new SimpleBar(document.getElementById('myElement'));
simpleBar.getContentElement();
SimpleBar.removeObserver();
SimpleBar.instances.get(document.querySelector('[data-simplebar]']))
SimpleBar hides the browser's default scrollbars, which obviously is undesirable if the user has JavaScript disabled. To restore the browser's scrollbars you can include the following noscript
element in your document's head
:
<noscript>
<style>
[data-simplebar] {
overflow: auto;
}
</style>
</noscript>
SimpleBar has been tested on the following browsers: Chrome, Firefox, Safari, Edge, IE11.
Notice: IE10 doesn't support MutationObserver
so you will still need to instantiate SimpleBar manually and call recalculate()
as needed (or you can just use a polyfill for MutationObserver
).
If you want to apply SimpleBar on an SVG element on IE11, you will need a polyfill for classList
.
IE9 is not supported anymore (because we use translate3d
to position the scrollbar) so please use SimpleBar v1 if you really need it.
https://grsmto.github.io/simplebar/
SimpleBar only does one thing: replace the browser's default scrollbars with a custom CSS-styled scrollbar without sacrificing performance. Unlike most other plugins, SimpleBar doesn't mimic scroll behaviour with Javascript, which typically causes jank and strange scrolling behaviour. You keep the awesomeness of native scrolling… with a custom scrollbar! Design your scrollbar how you like, with CSS, across all browsers.
For the most part SimpleBar uses the browser's native scrolling functionality, but replaces the conventional scrollbar with a custom CSS-styled scrollbar. The plugin listens for scroll events and redraws the custom scrollbar accordingly.
Key to this technique is hiding the native browser scrollbar. The scrollable element is made slightly wider/taller than its containing element, effectively hiding the scrollbar from view.
<body>
, <textarea>
, <table>
or <iframe>
elements. If you are looking to support these, I suggest taking a look at OverLayScrollbars.overflow: visible
. Which means any children of your scrolling div will be clipped (like with overflow: hidden
).Please take a look at this comparison table to see what SimpleBar does compare to others.
Ruby On Rails To include SimpleBar in the Ruby On Rails asset pipeline, use the simplebar-rails gem.
Ember.js To use SimpleBar with the Ember.js framework, use the ember-simplebars addon.
FAQs
Scrollbars, simpler.
The npm package simplebar receives a total of 430,065 weekly downloads. As such, simplebar popularity was classified as popular.
We found that simplebar demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.