diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5818f63 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.netbeans.xml +.sass-cache +node_modules +nbproject \ No newline at end of file diff --git a/README.md b/README.md index dd18a9b..e0c576d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Cross-browser CSS customizable scrollbar with advanced features:
  • Browser support: IE7+, Firefox1, Opera, Chrome, Safari
  • jQuery Scrollbar as Angular.JS directive
  • Textarea scrollbar
  • +
  • RTL support2
  • Basic Scrollbars Demo

    @@ -24,3 +25,4 @@ Cross-browser CSS customizable scrollbar with advanced features:

    Download

    1 There is known issue that native browser scrollbar cannot be hidden in Firefox on Apple devices, so this plugin is not initialized and you will see native scrollbars. +2 Experimental support in master branch, styles for scrollbars are not updated diff --git a/jquery.scrollbar.css b/jquery.scrollbar.css index 9f4e5ba..e0a7df5 100644 --- a/jquery.scrollbar.css +++ b/jquery.scrollbar.css @@ -1,791 +1,904 @@ /*************** SCROLLBAR BASE CSS ***************/ - .scroll-wrapper { - overflow: hidden !important; - padding: 0 !important; - position: relative; + overflow: hidden !important; + padding: 0 !important; + position: relative; } - .scroll-wrapper > .scroll-content { - border: none !important; - box-sizing: content-box !important; - height: auto; - left: 0; - margin: 0; - max-height: none; - max-width: none !important; - overflow: scroll !important; - padding: 0; - position: relative !important; - top: 0; - width: auto !important; + border: none !important; + box-sizing: content-box !important; + height: auto; + left: 0; + margin: 0; + max-height: none; + max-width: none !important; + overflow: scroll !important; + padding: 0; + position: relative !important; + top: 0; + width: auto !important; } - .scroll-wrapper > .scroll-content::-webkit-scrollbar { - height: 0; - width: 0; + height: 0; + width: 0; +} +.scroll-wrapper.scroll--rtl { + direction: rtl; } .scroll-element { - display: none; -} -.scroll-element, .scroll-element div { - box-sizing: content-box; + box-sizing: content-box; + display: none; } - -.scroll-element.scroll-x.scroll-scrollx_visible, -.scroll-element.scroll-y.scroll-scrolly_visible { - display: block; +.scroll-element div { + box-sizing: content-box; } - .scroll-element .scroll-bar, .scroll-element .scroll-arrow { - cursor: default; + cursor: default; +} +.scroll-element.scroll-x.scroll-scrollx_visible, .scroll-element.scroll-y.scroll-scrolly_visible { + display: block; } .scroll-textarea { - border: 1px solid #cccccc; - border-top-color: #999999; + border: 1px solid #cccccc; + border-top-color: #999999; } .scroll-textarea > .scroll-content { - overflow: hidden !important; + overflow: hidden !important; } .scroll-textarea > .scroll-content > textarea { - border: none !important; - box-sizing: border-box; - height: 100% !important; - margin: 0; - max-height: none !important; - max-width: none !important; - overflow: scroll !important; - outline: none; - padding: 2px; - position: relative !important; - top: 0; - width: 100% !important; + border: none !important; + box-sizing: border-box; + height: 100% !important; + margin: 0; + max-height: none !important; + max-width: none !important; + overflow: scroll !important; + outline: none; + padding: 2px; + position: relative !important; + top: 0; + width: 100% !important; } .scroll-textarea > .scroll-content > textarea::-webkit-scrollbar { - height: 0; - width: 0; + height: 0; + width: 0; } - - - - - - - - /*************** SIMPLE INNER SCROLLBAR ***************/ - .scrollbar-inner > .scroll-element, -.scrollbar-inner > .scroll-element div -{ - border: none; - margin: 0; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-inner > .scroll-element div { + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-inner > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } .scrollbar-inner > .scroll-element.scroll-x { - bottom: 2px; - height: 8px; - left: 0; - width: 100%; + bottom: 2px; + height: 8px; + left: 0; + width: 100%; } .scrollbar-inner > .scroll-element.scroll-y { - height: 100%; - right: 2px; - top: 0; - width: 8px; + height: 100%; + right: 2px; + top: 0; + width: 8px; } .scrollbar-inner > .scroll-element .scroll-element_outer { - overflow: hidden; + overflow: hidden; } .scrollbar-inner > .scroll-element .scroll-element_outer, .scrollbar-inner > .scroll-element .scroll-element_track, .scrollbar-inner > .scroll-element .scroll-bar { - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; } .scrollbar-inner > .scroll-element .scroll-element_track, .scrollbar-inner > .scroll-element .scroll-bar { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; - filter: alpha(opacity=40); - opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + opacity: 0.4; } -.scrollbar-inner > .scroll-element .scroll-element_track { background-color: #e0e0e0; } -.scrollbar-inner > .scroll-element .scroll-bar { background-color: #c2c2c2; } -.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #919191; } -.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; } - - -/* update scrollbar offset if both scrolls are visible */ - -.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; } -.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; } - - -.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; } -.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; } - - +.scrollbar-inner > .scroll-element .scroll-element_track { + background-color: #e0e0e0; +} +.scrollbar-inner > .scroll-element .scroll-bar { + background-color: #c2c2c2; +} +.scrollbar-inner > .scroll-element:hover .scroll-bar { + background-color: #919191; +} +.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { + background-color: #919191; +} +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { + left: -12px; +} +.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { + top: -12px; +} +.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -12px; +} +.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -12px; +} /*************** SIMPLE OUTER SCROLLBAR ***************/ - .scrollbar-outer > .scroll-element, -.scrollbar-outer > .scroll-element div -{ - border: none; - margin: 0; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-outer > .scroll-element div { + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-outer > .scroll-element { - background-color: #ffffff; + background-color: #ffffff; } .scrollbar-outer > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } .scrollbar-outer > .scroll-element.scroll-x { - bottom: 0; - height: 12px; - left: 0; - width: 100%; + bottom: 0; + height: 12px; + left: 0; + width: 100%; } .scrollbar-outer > .scroll-element.scroll-y { - height: 100%; - right: 0; - top: 0; - width: 12px; + height: 100%; + right: 0; + top: 0; + width: 12px; +} + +.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer { + height: 8px; + top: 2px; } -.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer { height: 8px; top: 2px; } -.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer { left: 2px; width: 8px; } +.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer { + left: 2px; + width: 8px; +} -.scrollbar-outer > .scroll-element .scroll-element_outer { overflow: hidden; } -.scrollbar-outer > .scroll-element .scroll-element_track { background-color: #eeeeee; } +.scrollbar-outer > .scroll-element .scroll-element_outer { + overflow: hidden; +} + +.scrollbar-outer > .scroll-element .scroll-element_track { + background-color: #eeeeee; +} .scrollbar-outer > .scroll-element .scroll-element_outer, .scrollbar-outer > .scroll-element .scroll-element_track, .scrollbar-outer > .scroll-element .scroll-bar { - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; } -.scrollbar-outer > .scroll-element .scroll-bar { background-color: #d9d9d9; } -.scrollbar-outer > .scroll-element .scroll-bar:hover { background-color: #c2c2c2; } -.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; } +.scrollbar-outer > .scroll-element .scroll-bar { + background-color: #d9d9d9; +} +.scrollbar-outer > .scroll-element .scroll-bar:hover { + background-color: #c2c2c2; +} + +.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar { + background-color: #919191; +} /* scrollbar height/width & offset from container borders */ +.scrollbar-outer > .scroll-content.scroll-scrolly_visible { + left: -12px; + margin-left: 12px; +} -.scrollbar-outer > .scroll-content.scroll-scrolly_visible { left: -12px; margin-left: 12px; } -.scrollbar-outer > .scroll-content.scroll-scrollx_visible { top: -12px; margin-top: 12px; } +.scrollbar-outer > .scroll-content.scroll-scrollx_visible { + top: -12px; + margin-top: 12px; +} -.scrollbar-outer > .scroll-element.scroll-x .scroll-bar { min-width: 10px; } -.scrollbar-outer > .scroll-element.scroll-y .scroll-bar { min-height: 10px; } +.scrollbar-outer > .scroll-element.scroll-x .scroll-bar { + min-width: 10px; +} +.scrollbar-outer > .scroll-element.scroll-y .scroll-bar { + min-height: 10px; +} /* update scrollbar offset if both scrolls are visible */ +.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { + left: -14px; +} -.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -14px; } -.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -14px; } - -.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -14px; } -.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -14px; } - - - - - - - +.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { + top: -14px; +} +.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -14px; +} +.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -14px; +} /*************** SCROLLBAR MAC OS X ***************/ - .scrollbar-macosx > .scroll-element, -.scrollbar-macosx > .scroll-element div -{ - background: none; - border: none; - margin: 0; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-macosx > .scroll-element div { + background: none; + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-macosx > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } -.scrollbar-macosx > .scroll-element .scroll-element_track { display: none; } -.scrollbar-macosx > .scroll-element .scroll-bar { - background-color: #6C6E71; - display: block; - - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - opacity: 0; - - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - border-radius: 7px; +.scrollbar-macosx > .scroll-element .scroll-element_track { + display: none; +} - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - -ms-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; +.scrollbar-macosx > .scroll-element .scroll-bar { + background-color: #6C6E71; + display: block; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; + border-radius: 7px; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; } + .scrollbar-macosx:hover > .scroll-element .scroll-bar, .scrollbar-macosx > .scroll-element.scroll-draggable .scroll-bar { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter: alpha(opacity=70); - opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + opacity: 0.7; } - .scrollbar-macosx > .scroll-element.scroll-x { - bottom: 0px; - height: 0px; - left: 0; - min-width: 100%; - overflow: visible; - width: 100%; + bottom: 0px; + height: 0px; + left: 0; + min-width: 100%; + overflow: visible; + width: 100%; } .scrollbar-macosx > .scroll-element.scroll-y { - height: 100%; - min-height: 100%; - right: 0px; - top: 0; - width: 0px; + height: 100%; + min-height: 100%; + right: 0px; + top: 0; + width: 0px; } /* scrollbar height/width & offset from container borders */ -.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar { height: 7px; min-width: 10px; top: -9px; } -.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar { left: -9px; min-height: 10px; width: 7px; } - -.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer { left: 2px; } -.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size { left: -4px; } - -.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer { top: 2px; } -.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size { top: -4px; } - -/* update scrollbar offset if both scrolls are visible */ -.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; } -.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; } - - +.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar { + height: 7px; + min-width: 10px; + top: -9px; +} +.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar { + left: -9px; + min-height: 10px; + width: 7px; +} +.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer { + left: 2px; +} +.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size { + left: -4px; +} +.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer { + top: 2px; +} +.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size { + top: -4px; +} +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -11px; +} +.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -11px; +} /*************** SCROLLBAR LIGHT ***************/ - .scrollbar-light > .scroll-element, .scrollbar-light > .scroll-element div { - border: none; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - z-index: 10; + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-light > .scroll-element { - background-color: #ffffff; + background-color: #ffffff; } .scrollbar-light > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } .scrollbar-light > .scroll-element .scroll-element_outer { - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; } .scrollbar-light > .scroll-element .scroll-element_size { - background: #dbdbdb; - background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+'); - background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0%,#dbdbdb), color-stop(100%,#e8e8e8)); - background: -webkit-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); - background: -o-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); - background: -ms-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); - background: linear-gradient(to right, #dbdbdb 0%,#e8e8e8 100%); - - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; + background: #dbdbdb; + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+"); + background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%, #dbdbdb), color-stop(100%, #e8e8e8)); + background: -webkit-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); + background: -o-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); + background: -ms-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); + background: linear-gradient(to right, #dbdbdb 0%, #e8e8e8 100%); + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; } .scrollbar-light > .scroll-element.scroll-x { - bottom: 0; - height: 17px; - left: 0; - min-width: 100%; - width: 100%; + bottom: 0; + height: 17px; + left: 0; + min-width: 100%; + width: 100%; } .scrollbar-light > .scroll-element.scroll-y { - height: 100%; - min-height: 100%; - right: 0; - top: 0; - width: 17px; + height: 100%; + min-height: 100%; + right: 0; + top: 0; + width: 17px; } .scrollbar-light > .scroll-element .scroll-bar { - background: #fefefe; - background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+'); - background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0%,#fefefe), color-stop(100%,#f5f5f5)); - background: -webkit-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); - background: -o-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); - background: -ms-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); - background: linear-gradient(to right, #fefefe 0%,#f5f5f5 100%); - - border: 1px solid #dbdbdb; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; + background: #fefefe; + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+"); + background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%, #fefefe), color-stop(100%, #f5f5f5)); + background: -webkit-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); + background: -o-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); + background: -ms-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); + background: linear-gradient(to right, #fefefe 0%, #f5f5f5 100%); + border: 1px solid #dbdbdb; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; } /* scrollbar height/width & offset from container borders */ +.scrollbar-light > .scroll-content.scroll-scrolly_visible { + left: -17px; + margin-left: 17px; +} -.scrollbar-light > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; } -.scrollbar-light > .scroll-content.scroll-scrollx_visible { top: -17px; margin-top: 17px; } - -.scrollbar-light > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 0px; } -.scrollbar-light > .scroll-element.scroll-y .scroll-bar { left: 0px; min-height: 10px; width: 10px; } - -.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer { height: 12px; left: 2px; top: 2px; } -.scrollbar-light > .scroll-element.scroll-x .scroll-element_size { left: -4px; } - -.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer { left: 2px; top: 2px; width: 12px; } -.scrollbar-light > .scroll-element.scroll-y .scroll-element_size { top: -4px; } - -/* update scrollbar offset if both scrolls are visible */ - -.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; } -.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; } +.scrollbar-light > .scroll-content.scroll-scrollx_visible { + top: -17px; + margin-top: 17px; +} -.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; } -.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; } +.scrollbar-light > .scroll-element.scroll-x .scroll-bar { + height: 10px; + min-width: 10px; + top: 0px; +} +.scrollbar-light > .scroll-element.scroll-y .scroll-bar { + left: 0px; + min-height: 10px; + width: 10px; +} +.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer { + height: 12px; + left: 2px; + top: 2px; +} +.scrollbar-light > .scroll-element.scroll-x .scroll-element_size { + left: -4px; +} +.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer { + left: 2px; + top: 2px; + width: 12px; +} +.scrollbar-light > .scroll-element.scroll-y .scroll-element_size { + top: -4px; +} +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -19px; +} +.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -19px; +} +.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { + left: -19px; +} +.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { + top: -19px; +} /*************** SCROLLBAR RAIL ***************/ - .scrollbar-rail > .scroll-element, -.scrollbar-rail > .scroll-element div -{ - border: none; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-rail > .scroll-element div { + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-rail > .scroll-element { - background-color: #ffffff; + background-color: #ffffff; } .scrollbar-rail > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } .scrollbar-rail > .scroll-element .scroll-element_size { - background-color: #999; - background-color: rgba(0, 0, 0, 0.3); + background-color: #999; + background-color: rgba(0, 0, 0, 0.3); } .scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-element_size { - background-color: #666; - background-color: rgba(0, 0, 0, 0.5); + background-color: #666; + background-color: rgba(0, 0, 0, 0.5); } .scrollbar-rail > .scroll-element.scroll-x { - bottom: 0; - height: 12px; - left: 0; - min-width: 100%; - padding: 3px 0 2px; - width: 100%; + bottom: 0; + height: 12px; + left: 0; + min-width: 100%; + padding: 3px 0 2px; + width: 100%; } .scrollbar-rail > .scroll-element.scroll-y { - height: 100%; - min-height: 100%; - padding: 0 2px 0 3px; - right: 0; - top: 0; - width: 12px; + height: 100%; + min-height: 100%; + padding: 0 2px 0 3px; + right: 0; + top: 0; + width: 12px; } .scrollbar-rail > .scroll-element .scroll-bar { - background-color: #d0b9a0; - - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); + background-color: #d0b9a0; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); } .scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-bar { - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6); + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6); } /* scrollbar height/width & offset from container borders */ +.scrollbar-rail > .scroll-content.scroll-scrolly_visible { + left: -17px; + margin-left: 17px; +} -.scrollbar-rail > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; } -.scrollbar-rail > .scroll-content.scroll-scrollx_visible { margin-top: 17px; top: -17px; } - -.scrollbar-rail > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 1px; } -.scrollbar-rail > .scroll-element.scroll-y .scroll-bar { left: 1px; min-height: 10px; width: 10px; } - -.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer { height: 15px; left: 5px; } -.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size { height: 2px; left: -10px; top: 5px; } - -.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer { top: 5px; width: 15px; } -.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size { left: 5px; top: -10px; width: 2px; } - -/* update scrollbar offset if both scrolls are visible */ - -.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -25px; } -.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -25px; } +.scrollbar-rail > .scroll-content.scroll-scrollx_visible { + margin-top: 17px; + top: -17px; +} -.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -25px; } -.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -25px; } +.scrollbar-rail > .scroll-element.scroll-x .scroll-bar { + height: 10px; + min-width: 10px; + top: 1px; +} +.scrollbar-rail > .scroll-element.scroll-y .scroll-bar { + left: 1px; + min-height: 10px; + width: 10px; +} +.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer { + height: 15px; + left: 5px; +} +.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size { + height: 2px; + left: -10px; + top: 5px; +} +.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer { + top: 5px; + width: 15px; +} +.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size { + left: 5px; + top: -10px; + width: 2px; +} +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -25px; +} +.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -25px; +} +.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { + left: -25px; +} +.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { + top: -25px; +} /*************** SCROLLBAR DYNAMIC ***************/ - .scrollbar-dynamic > .scroll-element, -.scrollbar-dynamic > .scroll-element div -{ - background: none; - border: none; - margin: 0; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-dynamic > .scroll-element div { + background: none; + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-dynamic > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } .scrollbar-dynamic > .scroll-element.scroll-x { - bottom: 2px; - height: 7px; - left: 0; - min-width: 100%; - width: 100%; + bottom: 2px; + height: 7px; + left: 0; + min-width: 100%; + width: 100%; } .scrollbar-dynamic > .scroll-element.scroll-y { - height: 100%; - min-height: 100%; - right: 2px; - top: 0; - width: 7px; + height: 100%; + min-height: 100%; + right: 2px; + top: 0; + width: 7px; } .scrollbar-dynamic > .scroll-element .scroll-element_outer { - opacity: 0.3; - - -webkit-border-radius: 12px; - -moz-border-radius: 12px; - border-radius: 12px; + opacity: 0.3; + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; } -.scrollbar-dynamic > .scroll-element .scroll-element_size { - background-color: #cccccc; - opacity: 0; - -webkit-border-radius: 12px; - -moz-border-radius: 12px; - border-radius: 12px; - - -webkit-transition: opacity 0.2s; - -moz-transition: opacity 0.2s; - -o-transition: opacity 0.2s; - -ms-transition: opacity 0.2s; - transition: opacity 0.2s; +.scrollbar-dynamic > .scroll-element .scroll-element_size { + background-color: #cccccc; + opacity: 0; + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + -ms-transition: opacity 0.2s; + transition: opacity 0.2s; } .scrollbar-dynamic > .scroll-element .scroll-bar { - background-color: #6c6e71; - - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - border-radius: 7px; + background-color: #6c6e71; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; + border-radius: 7px; } /* scrollbar height/width & offset from container borders */ - .scrollbar-dynamic > .scroll-element.scroll-x .scroll-bar { - bottom: 0; - height: 7px; - min-width: 24px; - top: auto; + bottom: 0; + height: 7px; + min-width: 24px; + top: auto; } + .scrollbar-dynamic > .scroll-element.scroll-y .scroll-bar { - left: auto; - min-height: 24px; - right: 0; - width: 7px; + left: auto; + min-height: 24px; + right: 0; + width: 7px; } .scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_outer { - bottom: 0; - top: auto; - left: 2px; - - -webkit-transition: height 0.2s; - -moz-transition: height 0.2s; - -o-transition: height 0.2s; - -ms-transition: height 0.2s; - transition: height 0.2s; + bottom: 0; + top: auto; + left: 2px; + -webkit-transition: height 0.2s; + -moz-transition: height 0.2s; + -o-transition: height 0.2s; + -ms-transition: height 0.2s; + transition: height 0.2s; } .scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_outer { - left: auto; - right: 0; - top: 2px; - - -webkit-transition: width 0.2s; - -moz-transition: width 0.2s; - -o-transition: width 0.2s; - -ms-transition: width 0.2s; - transition: width 0.2s; + left: auto; + right: 0; + top: 2px; + -webkit-transition: width 0.2s; + -moz-transition: width 0.2s; + -o-transition: width 0.2s; + -ms-transition: width 0.2s; + transition: width 0.2s; } -.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size { left: -4px; } -.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size { top: -4px; } +.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size { + left: -4px; +} +.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size { + top: -4px; +} /* update scrollbar offset if both scrolls are visible */ +.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -11px; +} -.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; } -.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; } - +.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -11px; +} /* hover & drag */ - .scrollbar-dynamic > .scroll-element:hover .scroll-element_outer, .scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer { - overflow: hidden; - - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter: alpha(opacity=70); - opacity: 0.7; + overflow: hidden; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + opacity: 0.7; } + .scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-element_size, .scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size { - opacity: 1; + opacity: 1; } + .scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-bar, .scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-bar { - height: 100%; - width: 100%; - - -webkit-border-radius: 12px; - -moz-border-radius: 12px; - border-radius: 12px; + height: 100%; + width: 100%; + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; } .scrollbar-dynamic > .scroll-element.scroll-x:hover .scroll-element_outer, .scrollbar-dynamic > .scroll-element.scroll-x.scroll-draggable .scroll-element_outer { - height: 20px; - min-height: 7px; + height: 20px; + min-height: 7px; } + .scrollbar-dynamic > .scroll-element.scroll-y:hover .scroll-element_outer, .scrollbar-dynamic > .scroll-element.scroll-y.scroll-draggable .scroll-element_outer { - min-width: 7px; - width: 20px; + min-width: 7px; + width: 20px; } - - - - - - - - - /*************** SCROLLBAR GOOGLE CHROME ***************/ - .scrollbar-chrome > .scroll-element, -.scrollbar-chrome > .scroll-element div -{ - border: none; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - z-index: 10; +.scrollbar-chrome > .scroll-element div { + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; } .scrollbar-chrome > .scroll-element { - background-color: #ffffff; + background-color: #ffffff; } .scrollbar-chrome > .scroll-element div { - display: block; - height: 100%; - left: 0; - top: 0; - width: 100%; + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; } -.scrollbar-chrome > .scroll-element .scroll-element_outer {} - .scrollbar-chrome > .scroll-element .scroll-element_track { - background: #f1f1f1; - border: 1px solid #dbdbdb; + background: #f1f1f1; + border: 1px solid #dbdbdb; } .scrollbar-chrome > .scroll-element.scroll-x { - bottom: 0; - height: 16px; - left: 0; - min-width: 100%; - width: 100%; + bottom: 0; + height: 16px; + left: 0; + min-width: 100%; + width: 100%; } .scrollbar-chrome > .scroll-element.scroll-y { - height: 100%; - min-height: 100%; - right: 0; - top: 0; - width: 16px; + height: 100%; + min-height: 100%; + right: 0; + top: 0; + width: 16px; } .scrollbar-chrome > .scroll-element .scroll-bar { - background-color: #d9d9d9; - border: 1px solid #bdbdbd; - cursor: default; - - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; + background-color: #d9d9d9; + border: 1px solid #bdbdbd; + cursor: default; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; } .scrollbar-chrome > .scroll-element .scroll-bar:hover { - background-color: #c2c2c2; - border-color: #a9a9a9; + background-color: #c2c2c2; + border-color: #a9a9a9; } .scrollbar-chrome > .scroll-element.scroll-draggable .scroll-bar { - background-color: #919191; - border-color: #7e7e7e; + background-color: #919191; + border-color: #7e7e7e; } /* scrollbar height/width & offset from container borders */ +.scrollbar-chrome > .scroll-content.scroll-scrolly_visible { + left: -16px; + margin-left: 16px; +} -.scrollbar-chrome > .scroll-content.scroll-scrolly_visible { left: -16px; margin-left: 16px; } -.scrollbar-chrome > .scroll-content.scroll-scrollx_visible { top: -16px; margin-top: 16px; } - -.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar { height: 8px; min-width: 10px; top: 3px; } -.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar { left: 3px; min-height: 10px; width: 8px; } +.scrollbar-chrome > .scroll-content.scroll-scrollx_visible { + top: -16px; + margin-top: 16px; +} -.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer { border-left: 1px solid #dbdbdb; } -.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track { height: 14px; left: -3px; } -.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size { height: 14px; left: -4px; } +.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar { + height: 8px; + min-width: 10px; + top: 3px; +} -.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer { border-top: 1px solid #dbdbdb; } -.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track { top: -3px; width: 14px; } -.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size { top: -4px; width: 14px; } +.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar { + left: 3px; + min-height: 10px; + width: 8px; +} -/* update scrollbar offset if both scrolls are visible */ +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer { + border-left: 1px solid #dbdbdb; +} -.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; } -.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; } +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track { + height: 14px; + left: -3px; +} -.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; } -.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; } +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size { + height: 14px; + left: -4px; +} +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer { + border-top: 1px solid #dbdbdb; +} +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track { + top: -3px; + width: 14px; +} +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size { + top: -4px; + width: 14px; +} +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { + left: -19px; +} +.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { + top: -19px; +} +.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { + left: -19px; +} +.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { + top: -19px; +} diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js index c8cfb72..c3b8a75 100644 --- a/jquery.scrollbar.js +++ b/jquery.scrollbar.js @@ -13,10 +13,13 @@ */ ; (function (root, factory) { + 'use strict'; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); + } else if (typeof exports !== 'undefined') { + module.exports = factory(require('jquery')); } else { - factory(root.jQuery); + factory(jQuery); } }(this, function ($) { 'use strict'; @@ -29,7 +32,10 @@ index: 0, name: 'scrollbar' }, + firefox: /firefox/i.test(navigator.userAgent), macosx: /mac/i.test(navigator.platform), + msedge: /edge\/\d+/i.test(navigator.userAgent), + msie: /(msie|trident)/i.test(navigator.userAgent), mobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent), overlay: null, scroll: null, @@ -48,25 +54,26 @@ }; var defaults = { - "autoScrollSize": true, // automatically calculate scrollsize - "autoUpdate": true, // update scrollbar if content/container size changed - "debug": false, // debug mode - "disableBodyScroll": false, // disable body scroll if mouse over container - "duration": 200, // scroll animate duration in ms - "ignoreMobile": false, // ignore mobile devices - "ignoreOverlay": false, // ignore browsers with overlay scrollbars (mobile, MacOS) - "scrollStep": 30, // scroll step for scrollbar arrows - "showArrows": false, // add class to show arrows - "stepScrolling": true, // when scrolling to scrollbar mousedown position - - "scrollx": null, // horizontal scroll element - "scrolly": null, // vertical scroll element - - "onDestroy": null, // callback function on destroy, - "onFallback": null, // callback function if scrollbar is not initialized - "onInit": null, // callback function on first initialization - "onScroll": null, // callback function on content scrolling - "onUpdate": null // callback function on init/resize (before scrollbar size calculation) + autoScrollSize: true, // automatically calculate scrollsize + autoUpdate: true, // update scrollbar if content/container size changed + debug: false, // debug mode + disableBodyScroll: false, // disable body scroll if mouse over container + duration: 200, // scroll animate duration in ms + ignoreMobile: false, // ignore mobile devices + ignoreOverlay: false, // ignore browsers with overlay scrollbars (mobile, MacOS) + isRtl: false, // is RTL + scrollStep: 30, // scroll step for scrollbar arrows + showArrows: false, // add class to show arrows + stepScrolling: true, // when scrolling to scrollbar mousedown position + + scrollx: null, // horizontal scroll element + scrolly: null, // vertical scroll element + + onDestroy: null, // callback function on destroy, + onFallback: null, // callback function if scrollbar is not initialized + onInit: null, // callback function on first initialization + onScroll: null, // callback function on content scrolling + onUpdate: null // callback function on init/resize (before scrollbar size calculation) }; @@ -102,7 +109,6 @@ }; BaseScrollbar.prototype = { - destroy: function () { if (!this.wrapper) { @@ -126,14 +132,14 @@ .scrollLeft(scrollLeft) .scrollTop(scrollTop); - this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace); - this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace); + this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').addBack().off(this.namespace); + this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').addBack().off(this.namespace); this.wrapper.remove(); $(document).add('body').off(this.namespace); - if ($.isFunction(this.options.onDestroy)){ + if ($.isFunction(this.options.onDestroy)) { this.options.onDestroy.apply(this, [this.container]); } }, @@ -146,11 +152,12 @@ namespace = this.namespace, o = $.extend(this.options, options || {}), s = {x: this.scrollx, y: this.scrolly}, - w = this.wrapper; + w = this.wrapper, + cssOptions = {}; var initScroll = { - "scrollLeft": c.scrollLeft(), - "scrollTop": c.scrollTop() + scrollLeft: c.scrollLeft(), + scrollTop: c.scrollTop() }; // do not init if in ignorable browser @@ -158,7 +165,7 @@ || (browser.overlay && o.ignoreOverlay) || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac ) { - if ($.isFunction(o.onFallback)){ + if ($.isFunction(o.onFallback)) { o.onFallback.apply(this, [c]); } return false; @@ -170,34 +177,54 @@ .css('position', c.css('position') === 'absolute' ? 'absolute' : 'relative') .insertBefore(c).append(c); + if (o.isRtl) { + w.addClass('scroll--rtl'); + } + if (c.is('textarea')) { this.containerWrapper = cw = $('
    ').insertBefore(c).append(c); w.addClass('scroll-textarea'); } - cw.addClass('scroll-content').css({ + cssOptions = { "height": "auto", "margin-bottom": browser.scroll.height * -1 + 'px', - "margin-right": browser.scroll.width * -1 + 'px', "max-height": "" - }); + }; + cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px'; + + cw.addClass('scroll-content').css(cssOptions); c.on('scroll' + namespace, function (event) { + var scrollLeft = c.scrollLeft(); + var scrollTop = c.scrollTop(); + if (o.isRtl) { + // webkit 0:100 + // ie/edge 100:0 + // firefox -100:0 + switch (true) { + case browser.firefox: + scrollLeft = Math.abs(scrollLeft); + case browser.msedge || browser.msie: + scrollLeft = c[0].scrollWidth - c[0].clientWidth - scrollLeft; + break; + } + } if ($.isFunction(o.onScroll)) { o.onScroll.call(S, { - "maxScroll": s.y.maxScrollOffset, - "scroll": c.scrollTop(), - "size": s.y.size, - "visible": s.y.visible + maxScroll: s.y.maxScrollOffset, + scroll: scrollTop, + size: s.y.size, + visible: s.y.visible }, { - "maxScroll": s.x.maxScrollOffset, - "scroll": c.scrollLeft(), - "size": s.x.size, - "visible": s.x.visible + maxScroll: s.x.maxScrollOffset, + scroll: scrollLeft, + size: s.x.size, + visible: s.x.visible }); } - s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px'); - s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px'); + s.x.isVisible && s.x.scroll.bar.css('left', scrollLeft * s.x.kx + 'px'); + s.y.isVisible && s.y.scroll.bar.css('top', scrollTop * s.y.kx + 'px'); }); /* prevent native scrollbars to be visible on #anchor click */ @@ -218,12 +245,12 @@ w.on('touchstart' + namespace, function (event) { var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event; var originalTouch = { - "pageX": touch.pageX, - "pageY": touch.pageY + pageX: touch.pageX, + pageY: touch.pageY }; var originalScroll = { - "left": c.scrollLeft(), - "top": c.scrollTop() + left: c.scrollLeft(), + top: c.scrollTop() }; $(document).on('touchmove' + namespace, function (event) { var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event; @@ -237,16 +264,17 @@ }); } } - if ($.isFunction(o.onInit)){ + if ($.isFunction(o.onInit)) { o.onInit.apply(this, [c]); } } else { - cw.css({ + cssOptions = { "height": "auto", "margin-bottom": browser.scroll.height * -1 + 'px', - "margin-right": browser.scroll.width * -1 + 'px', "max-height": "" - }); + }; + cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px'; + cw.css(cssOptions); } // init scrollbars & recalculate sizes @@ -273,7 +301,7 @@ scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d); - if(o.showArrows){ + if (o.showArrows) { scrollx.scroll.addClass('scroll-element_arrows_visible'); } @@ -339,10 +367,10 @@ scrollForward = 1; var data = { - "eventOffset": event[(d === 'x') ? 'pageX' : 'pageY'], - "maxScrollValue": scrollx.size - scrollx.visible - scrollx.offset, - "scrollbarOffset": scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'], - "scrollbarSize": scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']() + eventOffset: event[(d === 'x') ? 'pageX' : 'pageY'], + maxScrollValue: scrollx.size - scrollx.visible - scrollx.offset, + scrollbarOffset: scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'], + scrollbarSize: scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']() }; var timeout = 0, timer = 0; @@ -350,9 +378,20 @@ scrollForward = $(this).hasClass("scroll-arrow_more") ? 1 : -1; scrollStep = o.scrollStep * scrollForward; scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0; + if (o.isRtl) { + switch(true){ + case browser.firefox: + scrollToValue = scrollForward > 0 ? 0: data.maxScrollValue * -1; + break; + case browser.msie || browser.msedge: + break; + } + } } else { scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1 : (data.eventOffset < data.scrollbarOffset ? -1 : 0)); + if(d === 'x' && o.isRtl && (browser.msie || browser.msedge)) + scrollForward = scrollForward * -1; scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward; scrollToValue = (data.eventOffset - data.scrollbarOffset - (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0) @@ -399,6 +438,8 @@ $(document).on('mousemove' + namespace, function (event) { var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) / scrollx.kx, 10); + if (d === 'x' && o.isRtl && (browser.msie || browser.msedge)) + diff = diff * -1; c[scrollOffset](initOffset + diff); }); @@ -423,13 +464,13 @@ // calculate init sizes $.each(s, function (d, scrollx) { $.extend(scrollx, (d == "x") ? { - "offset": parseInt(c.css('left'), 10) || 0, - "size": c.prop('scrollWidth'), - "visible": w.width() + offset: parseInt(c.css('left'), 10) || 0, + size: c.prop('scrollWidth'), + visible: w.width() } : { - "offset": parseInt(c.css('top'), 10) || 0, - "size": c.prop('scrollHeight'), - "visible": w.height() + offset: parseInt(c.css('top'), 10) || 0, + size: c.prop('scrollHeight'), + visible: w.height() }); }); @@ -437,7 +478,7 @@ this._updateScroll('x', this.scrollx); this._updateScroll('y', this.scrolly); - if ($.isFunction(o.onUpdate)){ + if ($.isFunction(o.onUpdate)) { o.onUpdate.apply(this, [c]); } @@ -466,7 +507,6 @@ c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll'); }, - /** * Get scrollx/scrolly object * @@ -525,8 +565,7 @@ }); return scroll; }, - - _handleMouseDown: function(callback, event) { + _handleMouseDown: function (callback, event) { var namespace = this.namespace; @@ -550,7 +589,6 @@ event && event.preventDefault(); return false; }, - _updateScroll: function (d, scrollx) { var container = this.container, @@ -575,7 +613,7 @@ } if (d === 'y') { - if(container.is('textarea') || AreaSize < AreaVisible){ + if (container.is('textarea') || AreaSize < AreaVisible) { containerWrapper.css({ "height": (AreaVisible + browser.scroll.height) + 'px', "max-height": "none" @@ -596,14 +634,14 @@ || scrolly.offset != (parseInt(container.css('top'), 10) || 0) ) { $.extend(this.scrollx, { - "offset": parseInt(container.css('left'), 10) || 0, - "size": container.prop('scrollWidth'), - "visible": wrapper.width() + offset: parseInt(container.css('left'), 10) || 0, + size: container.prop('scrollWidth'), + visible: wrapper.width() }); $.extend(this.scrolly, { - "offset": parseInt(container.css('top'), 10) || 0, - "size": this.container.prop('scrollHeight'), - "visible": wrapper.height() + offset: parseInt(container.css('top'), 10) || 0, + size: this.container.prop('scrollHeight'), + visible: wrapper.height() }); this._updateScroll(d === 'x' ? 'y' : 'x', scrolly); } @@ -704,8 +742,8 @@ if (browser.webkit && !actualSize) { return { - "height": 0, - "width": 0 + height: 0, + width: 0 }; } @@ -730,8 +768,8 @@ browser.data.outer.scrollLeft(1000).scrollTop(1000); return { - "height": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0), - "width": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0) + height: Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0), + width: Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0) }; } @@ -777,18 +815,18 @@ }; }) .directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) { - return { - "restrict": "AC", - "link": function (scope, element, attrs) { - var model = $parse(attrs.jqueryScrollbar), - options = model(scope); - element.scrollbar(options || jQueryScrollbar.options) - .on('$destroy', function () { - element.scrollbar('destroy'); - }); - } - }; - }]); + return { + restrict: "AC", + link: function (scope, element, attrs) { + var model = $parse(attrs.jqueryScrollbar), + options = model(scope); + element.scrollbar(options || jQueryScrollbar.options) + .on('$destroy', function () { + element.scrollbar('destroy'); + }); + } + }; + }]); })(window.angular); } })); diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js index 9187107..5a86f9a 100644 --- a/jquery.scrollbar.min.js +++ b/jquery.scrollbar.min.js @@ -13,4 +13,4 @@ * @url https://github.com/gromo/jquery.scrollbar/ * */ -!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
    ").css(l.extend({},o)),t.data.outer=l("
    ").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return(!e.axis||e.axis!==e.HORIZONTAL_AXIS)&&!e.wheelDeltaX}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();o.height===t.scroll.height&&o.width===t.scroll.width||(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return l.isFunction(c.onFallback)&&c.onFallback.apply(this,[r]),!1;if(d)i.css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""});else{if(this.wrapper=d=l("
    ").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"===r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
    ").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),d==-1&&l+p<=f&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=l.originalEvent.wheelDelta*-1||l.originalEvent.detail,n=t.size-t.visible-t.offset;return i||("x"===e&&l.originalEvent.deltaX?i=40*l.originalEvent.deltaX:"y"===e&&l.originalEvent.deltaY&&(i=40*l.originalEvent.deltaY)),(i>0&&f<0&&f>0)&&(f+=i,f<0&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset','
    ','
    ','
    ','
    ','
    ','
    ','
    ','
    ',"
    ","
    ",'
    ','
    ','
    ',"
    ",'
    ','
    ',"
    ","
    ","
    "].join(""),simple:['
    ','
    ','
    ','
    ','
    ',"
    ","
    "].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||d10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)}); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b("undefined"!=typeof exports?require("jquery"):a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("
    ").css(a.extend({},d)),c.data.outer=a("
    ").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").addBack().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").addBack().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
    ").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
    ").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','
    ','
    ','
    ','
    ','
    ','
    ','
    ','
    ',"
    ","
    ",'
    ','
    ','
    ',"
    ",'
    ','
    ',"
    ","
    ","
    "].join(""),simple:['
    ','
    ','
    ','
    ','
    ',"
    ","
    "].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)}); \ No newline at end of file diff --git a/sass/Gruntfile.js b/sass/Gruntfile.js new file mode 100644 index 0000000..a983423 --- /dev/null +++ b/sass/Gruntfile.js @@ -0,0 +1,22 @@ +module.exports = function (grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + compass: { + auto: { + options: { + sassDir: './', + cssDir: '../' + } + } + }, + watch: { + scss: { + files: ['./**/*.scss'], + tasks: ['compass'] + } + } + }); + grunt.loadNpmTasks('grunt-contrib-compass'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.registerTask('default', ['watch']); +}; \ No newline at end of file diff --git a/sass/config.rb b/sass/config.rb new file mode 100644 index 0000000..eb6e6e4 --- /dev/null +++ b/sass/config.rb @@ -0,0 +1,2 @@ +require 'compass/import-once/activate' +line_comments = false diff --git a/sass/jquery.scrollbar.scss b/sass/jquery.scrollbar.scss new file mode 100644 index 0000000..118d29a --- /dev/null +++ b/sass/jquery.scrollbar.scss @@ -0,0 +1,793 @@ +/*************** SCROLLBAR BASE CSS ***************/ + +.scroll-wrapper { + overflow: hidden !important; + padding: 0 !important; + position: relative; + + & > .scroll-content { + border: none !important; + box-sizing: content-box !important; + height: auto; + left: 0; + margin: 0; + max-height: none; + max-width: none !important; + overflow: scroll !important; + padding: 0; + position: relative !important; + top: 0; + width: auto !important; + + &::-webkit-scrollbar { + height: 0; + width: 0; + } + } + &.scroll--rtl { + direction: rtl; + } +} + +.scroll-element { + box-sizing: content-box; + display: none; + + div { + box-sizing: content-box; + } + .scroll-bar, + .scroll-arrow { + cursor: default; + } + + &.scroll-x.scroll-scrollx_visible, + &.scroll-y.scroll-scrolly_visible { + display: block; + } +} + +.scroll-textarea { + border: 1px solid #cccccc; + border-top-color: #999999; + + & > .scroll-content { + overflow: hidden !important; + + & > textarea { + border: none !important; + box-sizing: border-box; + height: 100% !important; + margin: 0; + max-height: none !important; + max-width: none !important; + overflow: scroll !important; + outline: none; + padding: 2px; + position: relative !important; + top: 0; + width: 100% !important; + + &::-webkit-scrollbar { + height: 0; + width: 0; + } + } + } +} + + + + +/*************** SIMPLE INNER SCROLLBAR ***************/ + +.scrollbar-inner > .scroll-element, +.scrollbar-inner > .scroll-element div +{ + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-inner > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-inner > .scroll-element.scroll-x { + bottom: 2px; + height: 8px; + left: 0; + width: 100%; +} + +.scrollbar-inner > .scroll-element.scroll-y { + height: 100%; + right: 2px; + top: 0; + width: 8px; +} + +.scrollbar-inner > .scroll-element .scroll-element_outer { + overflow: hidden; +} + +.scrollbar-inner > .scroll-element .scroll-element_outer, +.scrollbar-inner > .scroll-element .scroll-element_track, +.scrollbar-inner > .scroll-element .scroll-bar { + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.scrollbar-inner > .scroll-element .scroll-element_track, +.scrollbar-inner > .scroll-element .scroll-bar { + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + opacity: 0.4; +} + +.scrollbar-inner > .scroll-element .scroll-element_track { background-color: #e0e0e0; } +.scrollbar-inner > .scroll-element .scroll-bar { background-color: #c2c2c2; } +.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #919191; } +.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; } + + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; } +.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; } + + +.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; } +.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; } + + + + + + + + + + +/*************** SIMPLE OUTER SCROLLBAR ***************/ + +.scrollbar-outer > .scroll-element, +.scrollbar-outer > .scroll-element div +{ + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-outer > .scroll-element { + background-color: #ffffff; +} + +.scrollbar-outer > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-outer > .scroll-element.scroll-x { + bottom: 0; + height: 12px; + left: 0; + width: 100%; +} + +.scrollbar-outer > .scroll-element.scroll-y { + height: 100%; + right: 0; + top: 0; + width: 12px; +} + +.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer { height: 8px; top: 2px; } +.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer { left: 2px; width: 8px; } + +.scrollbar-outer > .scroll-element .scroll-element_outer { overflow: hidden; } +.scrollbar-outer > .scroll-element .scroll-element_track { background-color: #eeeeee; } + +.scrollbar-outer > .scroll-element .scroll-element_outer, +.scrollbar-outer > .scroll-element .scroll-element_track, +.scrollbar-outer > .scroll-element .scroll-bar { + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} + +.scrollbar-outer > .scroll-element .scroll-bar { background-color: #d9d9d9; } +.scrollbar-outer > .scroll-element .scroll-bar:hover { background-color: #c2c2c2; } +.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; } + + +/* scrollbar height/width & offset from container borders */ + +.scrollbar-outer > .scroll-content.scroll-scrolly_visible { left: -12px; margin-left: 12px; } +.scrollbar-outer > .scroll-content.scroll-scrollx_visible { top: -12px; margin-top: 12px; } + +.scrollbar-outer > .scroll-element.scroll-x .scroll-bar { min-width: 10px; } +.scrollbar-outer > .scroll-element.scroll-y .scroll-bar { min-height: 10px; } + + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -14px; } +.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -14px; } + +.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -14px; } +.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -14px; } + + + + + + + + + + +/*************** SCROLLBAR MAC OS X ***************/ + +.scrollbar-macosx > .scroll-element, +.scrollbar-macosx > .scroll-element div +{ + background: none; + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-macosx > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-macosx > .scroll-element .scroll-element_track { display: none; } +.scrollbar-macosx > .scroll-element .scroll-bar { + background-color: #6C6E71; + display: block; + + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + + -webkit-border-radius: 7px; + -moz-border-radius: 7px; + border-radius: 7px; + + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} +.scrollbar-macosx:hover > .scroll-element .scroll-bar, +.scrollbar-macosx > .scroll-element.scroll-draggable .scroll-bar { + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + opacity: 0.7; +} + + +.scrollbar-macosx > .scroll-element.scroll-x { + bottom: 0px; + height: 0px; + left: 0; + min-width: 100%; + overflow: visible; + width: 100%; +} + +.scrollbar-macosx > .scroll-element.scroll-y { + height: 100%; + min-height: 100%; + right: 0px; + top: 0; + width: 0px; +} + +/* scrollbar height/width & offset from container borders */ +.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar { height: 7px; min-width: 10px; top: -9px; } +.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar { left: -9px; min-height: 10px; width: 7px; } + +.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer { left: 2px; } +.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size { left: -4px; } + +.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer { top: 2px; } +.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size { top: -4px; } + +/* update scrollbar offset if both scrolls are visible */ +.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; } +.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; } + + + + + + + + + + +/*************** SCROLLBAR LIGHT ***************/ + +.scrollbar-light > .scroll-element, +.scrollbar-light > .scroll-element div { + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-light > .scroll-element { + background-color: #ffffff; +} + +.scrollbar-light > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-light > .scroll-element .scroll-element_outer { + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.scrollbar-light > .scroll-element .scroll-element_size { + background: #dbdbdb; + background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+'); + background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%,#dbdbdb), color-stop(100%,#e8e8e8)); + background: -webkit-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); + background: -o-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); + background: -ms-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%); + background: linear-gradient(to right, #dbdbdb 0%,#e8e8e8 100%); + + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +.scrollbar-light > .scroll-element.scroll-x { + bottom: 0; + height: 17px; + left: 0; + min-width: 100%; + width: 100%; +} + +.scrollbar-light > .scroll-element.scroll-y { + height: 100%; + min-height: 100%; + right: 0; + top: 0; + width: 17px; +} + +.scrollbar-light > .scroll-element .scroll-bar { + background: #fefefe; + background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+'); + background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%,#fefefe), color-stop(100%,#f5f5f5)); + background: -webkit-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); + background: -o-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); + background: -ms-linear-gradient(left, #fefefe 0%,#f5f5f5 100%); + background: linear-gradient(to right, #fefefe 0%,#f5f5f5 100%); + + border: 1px solid #dbdbdb; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +/* scrollbar height/width & offset from container borders */ + +.scrollbar-light > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; } +.scrollbar-light > .scroll-content.scroll-scrollx_visible { top: -17px; margin-top: 17px; } + +.scrollbar-light > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 0px; } +.scrollbar-light > .scroll-element.scroll-y .scroll-bar { left: 0px; min-height: 10px; width: 10px; } + +.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer { height: 12px; left: 2px; top: 2px; } +.scrollbar-light > .scroll-element.scroll-x .scroll-element_size { left: -4px; } + +.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer { left: 2px; top: 2px; width: 12px; } +.scrollbar-light > .scroll-element.scroll-y .scroll-element_size { top: -4px; } + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; } +.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; } + +.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; } +.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; } + + + + + + + + + + +/*************** SCROLLBAR RAIL ***************/ + +.scrollbar-rail > .scroll-element, +.scrollbar-rail > .scroll-element div +{ + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-rail > .scroll-element { + background-color: #ffffff; +} + +.scrollbar-rail > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-rail > .scroll-element .scroll-element_size { + background-color: #999; + background-color: rgba(0, 0, 0, 0.3); +} + +.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-element_size { + background-color: #666; + background-color: rgba(0, 0, 0, 0.5); +} + +.scrollbar-rail > .scroll-element.scroll-x { + bottom: 0; + height: 12px; + left: 0; + min-width: 100%; + padding: 3px 0 2px; + width: 100%; +} + +.scrollbar-rail > .scroll-element.scroll-y { + height: 100%; + min-height: 100%; + padding: 0 2px 0 3px; + right: 0; + top: 0; + width: 12px; +} + +.scrollbar-rail > .scroll-element .scroll-bar { + background-color: #d0b9a0; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); +} + +.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-bar { + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6); +} + +/* scrollbar height/width & offset from container borders */ + +.scrollbar-rail > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; } +.scrollbar-rail > .scroll-content.scroll-scrollx_visible { margin-top: 17px; top: -17px; } + +.scrollbar-rail > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 1px; } +.scrollbar-rail > .scroll-element.scroll-y .scroll-bar { left: 1px; min-height: 10px; width: 10px; } + +.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer { height: 15px; left: 5px; } +.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size { height: 2px; left: -10px; top: 5px; } + +.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer { top: 5px; width: 15px; } +.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size { left: 5px; top: -10px; width: 2px; } + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -25px; } +.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -25px; } + +.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -25px; } +.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -25px; } + + + + + + + + + + +/*************** SCROLLBAR DYNAMIC ***************/ + +.scrollbar-dynamic > .scroll-element, +.scrollbar-dynamic > .scroll-element div +{ + background: none; + border: none; + margin: 0; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-dynamic > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-dynamic > .scroll-element.scroll-x { + bottom: 2px; + height: 7px; + left: 0; + min-width: 100%; + width: 100%; +} + +.scrollbar-dynamic > .scroll-element.scroll-y { + height: 100%; + min-height: 100%; + right: 2px; + top: 0; + width: 7px; +} + +.scrollbar-dynamic > .scroll-element .scroll-element_outer { + opacity: 0.3; + + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; +} +.scrollbar-dynamic > .scroll-element .scroll-element_size { + background-color: #cccccc; + opacity: 0; + + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; + + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + -ms-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.scrollbar-dynamic > .scroll-element .scroll-bar { + background-color: #6c6e71; + + -webkit-border-radius: 7px; + -moz-border-radius: 7px; + border-radius: 7px; +} + +/* scrollbar height/width & offset from container borders */ + +.scrollbar-dynamic > .scroll-element.scroll-x .scroll-bar { + bottom: 0; + height: 7px; + min-width: 24px; + top: auto; +} +.scrollbar-dynamic > .scroll-element.scroll-y .scroll-bar { + left: auto; + min-height: 24px; + right: 0; + width: 7px; +} + +.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_outer { + bottom: 0; + top: auto; + left: 2px; + + -webkit-transition: height 0.2s; + -moz-transition: height 0.2s; + -o-transition: height 0.2s; + -ms-transition: height 0.2s; + transition: height 0.2s; +} + +.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_outer { + left: auto; + right: 0; + top: 2px; + + -webkit-transition: width 0.2s; + -moz-transition: width 0.2s; + -o-transition: width 0.2s; + -ms-transition: width 0.2s; + transition: width 0.2s; +} + +.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size { left: -4px; } +.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size { top: -4px; } + + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; } +.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; } + + +/* hover & drag */ + +.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer, +.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer { + overflow: hidden; + + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + opacity: 0.7; +} +.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-element_size, +.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size { + opacity: 1; +} +.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-bar, +.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-bar { + height: 100%; + width: 100%; + + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; +} + +.scrollbar-dynamic > .scroll-element.scroll-x:hover .scroll-element_outer, +.scrollbar-dynamic > .scroll-element.scroll-x.scroll-draggable .scroll-element_outer { + height: 20px; + min-height: 7px; +} +.scrollbar-dynamic > .scroll-element.scroll-y:hover .scroll-element_outer, +.scrollbar-dynamic > .scroll-element.scroll-y.scroll-draggable .scroll-element_outer { + min-width: 7px; + width: 20px; +} + + + + + + + + + + +/*************** SCROLLBAR GOOGLE CHROME ***************/ + +.scrollbar-chrome > .scroll-element, +.scrollbar-chrome > .scroll-element div +{ + border: none; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + z-index: 10; +} + +.scrollbar-chrome > .scroll-element { + background-color: #ffffff; +} + +.scrollbar-chrome > .scroll-element div { + display: block; + height: 100%; + left: 0; + top: 0; + width: 100%; +} + +.scrollbar-chrome > .scroll-element .scroll-element_outer {} + +.scrollbar-chrome > .scroll-element .scroll-element_track { + background: #f1f1f1; + border: 1px solid #dbdbdb; +} + +.scrollbar-chrome > .scroll-element.scroll-x { + bottom: 0; + height: 16px; + left: 0; + min-width: 100%; + width: 100%; +} + +.scrollbar-chrome > .scroll-element.scroll-y { + height: 100%; + min-height: 100%; + right: 0; + top: 0; + width: 16px; +} + +.scrollbar-chrome > .scroll-element .scroll-bar { + background-color: #d9d9d9; + border: 1px solid #bdbdbd; + cursor: default; + + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.scrollbar-chrome > .scroll-element .scroll-bar:hover { + background-color: #c2c2c2; + border-color: #a9a9a9; +} + +.scrollbar-chrome > .scroll-element.scroll-draggable .scroll-bar { + background-color: #919191; + border-color: #7e7e7e; +} + +/* scrollbar height/width & offset from container borders */ + +.scrollbar-chrome > .scroll-content.scroll-scrolly_visible { left: -16px; margin-left: 16px; } +.scrollbar-chrome > .scroll-content.scroll-scrollx_visible { top: -16px; margin-top: 16px; } + +.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar { height: 8px; min-width: 10px; top: 3px; } +.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar { left: 3px; min-height: 10px; width: 8px; } + +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer { border-left: 1px solid #dbdbdb; } +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track { height: 14px; left: -3px; } +.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size { height: 14px; left: -4px; } + +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer { border-top: 1px solid #dbdbdb; } +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track { top: -3px; width: 14px; } +.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size { top: -4px; width: 14px; } + +/* update scrollbar offset if both scrolls are visible */ + +.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; } +.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; } + +.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; } +.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; } + + + + + + + diff --git a/sass/package.json b/sass/package.json new file mode 100644 index 0000000..fd871d6 --- /dev/null +++ b/sass/package.json @@ -0,0 +1,9 @@ +{ + "name": "jquery.scrollbar", + "version": "0.2.11", + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-compass": "^1.0.4", + "grunt-contrib-watch": "~0.6.1" + } +}