perfect-scrollbar [![Travis CI](https://travis-ci.org/noraesae/perfect-scrollbar.svg?branch=master)](https://travis-ci.org/noraesae/perfect-scrollbar) ================= Tiny but perfect jQuery scrollbar plugin Why perfect-scrollbar? ------------------ I worked on a personal project recently, and I was trying to find the jQuery scrollbar plugin that's *perfect*. But there was no *perfect* scrollbar plugin. That's why I decided to make one. perfect-scrollbar is very tiny but *perfect* (for me, and maybe for the most of developers) jQuery scrollbar plugin. I hope you love this! Demo: http://noraesae.github.com/perfect-scrollbar/ What does *perfect* mean? --------------------- *perfect* means... * There should be no css change on any original element. * The scrollbar should not affect the original design layout. * The design of the scrollbar should be (nearly) fully customizable. * If the size of the container or the content changes, the scrollbar size and position should be able to change. Then perfect-scrollbar is really *perfect*? ------------------------------------------- Yes! the only thing that's not *perfect* is my English. * perfect-scrollbar has some requirements, but doesn't change or add any style on original elements. * perfect-scrollbar is designed not to have width or height. It's fixed on the right and bottom side of the container. * You can change nearly all css styles of the scrollbar. The scrollbar design has no dependency on scripts. * perfect-scrollbar support 'update' function. Whenever you need to update the size or position of the scrollbar, just update. * Additionally, perfect-scrollbar do use 'scrollTop' and 'scrollLeft', not absolute position or something messy. It's cool, isn't it? Install ------- You can download the latest stable version with download links in [Github Page](http://noraesae.github.io/perfect-scrollbar/). You also can find all releases in [Releases](https://github.com/noraesae/perfect-scrollbar/releases) page. If you want to use the development version of the plugin, use the source files which are not minified. They're in the `src` directory. The development version may be unstable, but some known bugs can be fixed. ``` $ git clone https://github.com/noraesae/perfect-scrollbar.git $ cd perfect-scrollbar/src ``` You can use [Bower](http://bower.io/) to install the plugin. The plugin is registered as `perfect-scrollbar`. ``` $ bower install perfect-scrollbar ``` It's registered on [npm](https://www.npmjs.org/package/perfect-scrollbar) as `perfect-scrollbar`. ``` $ npm install perfect-scrollbar ``` You can also load it from [cdnjs](http://cdnjs.com/). It is registered as [`jquery.perfect-scrollbar`](http://www.cdnjs.com/libraries/jquery.perfect-scrollbar). Requirements ------------ To make this plugin *perfect*, some requirements were not avoidable. But they're all very trivial and there's nothing to worry about. * the container must have a 'position' css style. * the container must have an 'overflow:hidden' css style. * the scrollbar's position must be 'absolute'. * the scrollbar-x must have a 'bottom' css style, and the scrollbar-y must have a 'right' css style. The requirement below is for perfect-scrollbar <= 0.3.4 * there must be the *one* content element(like div) for the container. Optional parameters ------------------- perfect-scrollbar supports optional parameters. ### wheelSpeed The scroll speed applied to mousewheel event. **Default: 1** ### wheelPropagation If this option is true, when the scroll reaches the end of the side, mousewheel event will be propagated to parent element. **Default: false** ### swipePropagation If this option is true, when the scroll reaches the end of the side, touch scrolling will be propagated to parent element. **Default: true** ### minScrollbarLength When set to an integer value, the thumb part of the scrollbar will not shrink below that number of pixels. **Default: null** ### maxScrollbarLength When set to an integer value, the thumb part of the scrollbar will not expand over that number of pixels. **Default: null** ### useBothWheelAxes When set to true, and only one (vertical or horizontal) scrollbar is visible then both vertical and horizontal scrolling will affect the scrollbar. **Default: false** ### useKeyboard When set to true, the scroll works with arrow keys on the keyboard. The element is scrolled only when the mouse cursor hovers the element. **Default: true** ### suppressScrollX When set to true, the scroll bar in X axis will not be available, regardless of the content width. **Default: false** ### suppressScrollY When set to true, the scroll bar in Y axis will not be available, regardless of the content height. **Default: false** ### scrollXMarginOffset The number of pixels the content width can surpass the container width without enabling the X axis scroll bar. Allows some "wiggle room" or "offset break", so that X axis scroll bar is not enabled just because of a few pixels. **Default: 0** ### scrollYMarginOffset The number of pixels the content height can surpass the container height without enabling the Y axis scroll bar. Allows some "wiggle room" or "offset break", so that Y axis scroll bar is not enabled just because of a few pixels. **Default: 0** ### includePadding When set to true, it uses `innerWidth` and `innerHeight` for the container size instead of `width` and `height`. When your container element has non-zero padding and the scrollbar layout looks weird, this option can be helpful. **Default: false** How to Use ---------- ```html