00-sidebar.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-gemini-scrollbar - sidebar + content example</title>
  6. <style>
  7. /* global presentation */
  8. @font-face {
  9. font-family: 'BLOKKRegular';
  10. src: url('./assets/fonts/blokk/BLOKKRegular.eot');
  11. src: url('./assets/fonts/blokk/BLOKKRegular.eot?#iefix') format('embedded-opentype'),
  12. url('./assets/fonts/blokk/BLOKKRegular.woff') format('woff'),
  13. url('./assets/fonts/blokk/BLOKKRegular.svg#BLOKKRegular') format('svg');
  14. font-weight: normal;
  15. font-style: normal;
  16. }
  17. :root {
  18. font-size: 12px;
  19. line-height: 1.25rem;
  20. font-family: 'BLOKKRegular';
  21. color: #444;
  22. }
  23. * {
  24. box-sizing: border-box;
  25. margin: 0;
  26. padding: 0;
  27. }
  28. html,
  29. body {
  30. overflow: hidden;
  31. }
  32. body {
  33. margin: 0;
  34. padding: 0;
  35. }
  36. img {
  37. max-width: 100%;
  38. }
  39. ul {
  40. margin: 0;
  41. padding: 0;
  42. list-style: none;
  43. }
  44. .fake-image {
  45. position: relative;
  46. padding-top: 9em;
  47. margin-bottom: 1rem;
  48. background-color: rgba(0, 0, 0, .05);
  49. box-shadow: 0 0 0 1px rgba(0, 0, 0, .1);
  50. border-radius: 3px;
  51. }
  52. .fake-image::after {
  53. content: '.';
  54. position: absolute;
  55. top: 50%;
  56. left: 50%;
  57. -webkit-transform: translate(-50%, -50%);
  58. transform: translate(-50%, -50%);
  59. color: #ccc;
  60. }
  61. /* sidebar */
  62. aside {
  63. position: absolute;
  64. top: 0;
  65. left: 0;
  66. width: 16rem;
  67. height: 100vh;
  68. box-shadow: 0 0 2rem rgba(0, 0, 0, .3);
  69. }
  70. aside header {
  71. height: 4rem;
  72. background-color: #CA9EFF;
  73. }
  74. .logo {
  75. padding: 1.2rem 2rem 0;
  76. }
  77. /* sidebar scrollbar wrapper */
  78. .sidebar-scrollbar {
  79. position: relative;
  80. height: calc(100vh - 4rem);
  81. overflow: auto;
  82. }
  83. .sidebar-content {
  84. padding: 1.5rem 1.5rem .5rem;
  85. }
  86. /* main content */
  87. .main {
  88. margin-left: 16rem;
  89. height: 100vh;
  90. }
  91. /* main scrollbar wrapper */
  92. .main-scrollbar {
  93. height: 100%;
  94. overflow: auto;
  95. }
  96. .main .hero {
  97. padding: 14rem 4rem;
  98. background-image: linear-gradient(-90deg, #CA9EFF, #9EFFF4);
  99. }
  100. .main .content {
  101. padding: 4rem;
  102. }
  103. .main .fake-image {
  104. padding-top: 24em;
  105. }
  106. .description-text {
  107. margin-bottom: 2em;
  108. }
  109. /* gemini-scrollbar override styles */
  110. .gm-scrollbar {
  111. border-radius: 4px;
  112. }
  113. .gm-scrollbar.-vertical {
  114. width: 8px;
  115. }
  116. .gm-scrollbar .thumb {
  117. background-color: rgba(111, 87, 140, .4);
  118. }
  119. .gm-scrollbar .thumb:hover,
  120. .gm-scrollbar .thumb:active {
  121. background-color: rgba(111, 87, 140, .6);
  122. }
  123. </style>
  124. </head>
  125. <body>
  126. <div id="app">
  127. <div class="main">
  128. <gemini-scrollbar class="main-scrollbar" @resize="mainScrollbarResize">
  129. <div class="hero">
  130. <h1>Lorem ipsum dolor sit amet</h1>
  131. </div>
  132. <div class="content">
  133. <p class="description-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore reprehenderit harum corrupti. Quibusdam nulla,
  134. dicta cupiditate reprehenderit, ullam in beatae, qui aperiam natus repellat dolor omnis ea amet modi autem.</p>
  135. <div class="col">
  136. <div class="row">
  137. <div class="fake-image"></div>
  138. </div>
  139. <div class="row">
  140. <div class="fake-image"></div>
  141. </div>
  142. <div class="row">
  143. <div class="fake-image"></div>
  144. </div>
  145. </div>
  146. </div>
  147. </gemini-scrollbar>
  148. </div>
  149. <aside>
  150. <header>
  151. <div class="logo">
  152. <h1>Hi</h1>
  153. </div>
  154. </header>
  155. <gemini-scrollbar class="sidebar-scrollbar" @resize="sidebarResize">
  156. <div class="sidebar-content">
  157. <ul>
  158. <li class="fake-image"></li>
  159. <li class="fake-image"></li>
  160. <li class="fake-image"></li>
  161. <li class="fake-image"></li>
  162. <li class="fake-image"></li>
  163. <li class="fake-image"></li>
  164. <li class="fake-image"></li>
  165. <li class="fake-image"></li>
  166. <li class="fake-image"></li>
  167. <li class="fake-image"></li>
  168. <li class="fake-image"></li>
  169. <li class="fake-image"></li>
  170. <li class="fake-image"></li>
  171. <li class="fake-image"></li>
  172. <li class="fake-image"></li>
  173. </ul>
  174. </div>
  175. </gemini-scrollbar>
  176. </aside>
  177. </div>
  178. <script src="../js/vue.js" type="text/javascript"></script>
  179. <script src="../js/vue-gemini-scrollbar.js" type="text/javascript"></script>
  180. <script>
  181. new Vue({
  182. el: '#app',
  183. methods: {
  184. sidebarResize: function () {
  185. console.log('sidebarResize')
  186. },
  187. mainScrollbarResize:function(){
  188. console.log('mainScrollbarResize')
  189. }
  190. }
  191. })
  192. </script>
  193. </body>
  194. </html>