CSS настроил полосу прокрутки в div
Как я могу настроить полосу прокрутки с помощью CSS (Каскадные Таблицы Стилей) для одного div
а не всю страницу?
14 ответов:
Я подумал, что было бы полезно объединить последнюю информацию о полосах прокрутки, CSS и совместимости браузера.
поддержка CSS полосы прокрутки
В настоящее время не существует определений стилей CSS в кросс-браузере. статьи консорциума W3C я упоминаю в конце имеет следующие заявление и был недавно обновлен (10 октября 2014 года):
некоторые браузеры (например, Konqueror) поддерживают нестандартные свойства 'полоса прокрутки-тень-цвет', 'прокрутка-трек-Цвет' и другие. эти свойства являются незаконными: они не определены ни в одной спецификации CSS и не помечены как проприетарные (путем префикса их с помощью "-vendor-")
Microsoft
как уже упоминалось, Microsoft поддерживает стиль полосы прокрутки, но только для IE8 и выше.
пример:
<!-- language: lang-css --> .TA { scrollbar-3dlight-color:gold; scrollbar-arrow-color:blue; scrollbar-base-color:; scrollbar-darkshadow-color:blue; scrollbar-face-color:; scrollbar-highlight-color:; scrollbar-shadow-color: }
Chrome & Safari (WebKit)
аналогично, WebKit теперь имеет свою версию:
- стиль полосы прокрутки:https://www.webkit.org/blog/363/styling-scrollbars/
- демонстрация всех стилей полосы прокрутки WebKit
С пользовательские полосы прокрутки в WebKit, соответствующий CSS:
/* pseudo elements */ ::-webkit-scrollbar { } ::-webkit-scrollbar-button { } ::-webkit-scrollbar-track { } ::-webkit-scrollbar-track-piece { } ::-webkit-scrollbar-thumb { } ::-webkit-scrollbar-corner { } ::-webkit-resizer { } /* pseudo class selectors */ :horizontal :vertical :decrement :increment :start :end :double-button :single-button :no-button :corner-present :window-inactive
Firefox (Gecko)
Firefox не имеет своей собственной версии стилей полосы прокрутки в соответствии с этой так ответ.
нет геккона, эквивалентного
::-webkit-scrollbar
и друзей.вам придется придерживаться jQuery.
многие люди хотели бы эту функцию, см.:
https://bugzilla.mozilla.org/show_bug.cgi?id=77790этот отчет просит то же самое, что и вы просите: https://bugzilla.mozilla.org/show_bug.cgi?id=547260
кроссбраузерная прокрутка Бар Стиль
библиотеки JavaScript и плагины могут обеспечить кросс-браузерное решение. Есть много вариантов.
- 20 jQuery плагин прокрутки с примерами (24 июля 2012)
- 30+ JavaScript/Ajax методы для слайдеров, скроллеров и полос прокрутки (07 мая 2008)
- 21 полезная полоса прокрутки CSS / JavaScript Styling Tutorials (август, 2012)
- 15+ бесплатные и премиум Плагины прокрутки jQuery (26 августа 2012)
список можно продолжать. Ваш лучший выбор-это поиск, исследование и тестирование имеющиеся решения. Я уверен, что вы сможете найти то, что будет соответствовать вашим потребностям.
Предотвратить Незаконный Стиль Полосы Прокрутки
на всякий случай, если вы хотите предотвратить стиль полосы прокрутки, который не был правильно префикс "- vendor",эта статья на W3C предоставляет некоторые основные инструкции. В принципе, вам нужно будет добавить следующий CSS в таблицу стилей пользователя, связанную с вашим браузером. Эти определения переопределят недопустимый стиль полосы прокрутки на любой странице вы посещаете.
body, html { scrollbar-face-color: ThreeDFace !important; scrollbar-shadow-color: ThreeDDarkShadow !important; scrollbar-highlight-color: ThreeDHighlight !important; scrollbar-3dlight-color: ThreeDLightShadow !important; scrollbar-darkshadow-color: ThreeDDarkShadow !important; scrollbar-track-color: Scrollbar !important; scrollbar-arrow-color: ButtonText !important; }
дубликаты или аналогичные вопросы / источник не связан выше
- изменение стиля полос прокрутки
- CSS scrollbar style cross browser
- как создать пользовательскую полосу прокрутки на div (стиль Facebook)
Примечание: этот ответ содержит информацию из различных источников. Если источник был использован, то это также связанный в этом ответе.
пользовательские полосы прокрутки невозможны с помощью CSS, вам понадобится магия JavaScript.
некоторые браузеры поддерживают неспецифические правила CSS, такие как
::-webkit-scrollbar
в Webkit, но не идеально, так как он будет работать только в Webkit. У IE тоже было что-то подобное, но я не думаю, что они его больше поддерживают.
попробовать
источник : http://areaaperta.com/nicescroll/
Простая Установка
<script type="text/javascript"> $(document).ready( function() { $("html").niceScroll(); } ); </script>
это jQuery плагин scrollbar, так что ваши полосы прокрутки являются управляемыми и выглядят одинаково в различных ОС.
Я думаю, что в этой теме не хватает одной вещи. Если вы случайно захотите реализовать прокрутку через плагин, безусловно, лучшим в 2014 году является хитрый.
Это чистая полоса прокрутки javascript, поэтому ваши полосы прокрутки управляемы и выглядят одинаково в разных ОС.
оно имеет самые лучшие представление и характеристики. Никто другой даже близко не подходит. Не тратьте время на выбор из мириадов полусырых багги других библиотек.
Я перепробовал много плагинов, большинство из них не поддерживают все браузеры, я предпочитаю iScroll и nanoScroller работает для всех этих браузеров:
- IE11 - > IE6
- IE10-WP8
- IE9-WP7
- IE Xbox One
- IE Xbox 360
- Google Хром
- FireFox
- Опера
- Safari
но iScroll не работает с сенсорным экраном!
демо iScroll : http://lab.cubiq.org/iscroll/examples/simple/
демо nanoScroller : http://jamesflorentino.github.io/nanoScrollerJS/
вот пример webkit, который работает для Chrome и Safari:
CSS:
::-webkit-scrollbar { width: 40px; background-color:#4F4F4F; } ::-webkit-scrollbar-button:vertical:increment { height:40px; background-image: url(/Images/Scrollbar/decrement.png); background-size:39px 30px; background-repeat:no-repeat; } ::-webkit-scrollbar-button:vertical:decrement { height:40px; background-image: url(/Images/Scrollbar/increment.png); background-size:39px 30px; background-repeat:no-repeat; }
выход:
как и многие люди, я искал что-то, что было:
- последовательно стилизованный и функциональный в большинстве современных браузеров
- не какой-то смешной 3000-строчный раздутый jQuery extension cr*p
...Но увы - ничего!
Ну, если работа стоит делать... Я был в состоянии получить что-то за 30 минут. Отказ от ответственности: есть довольно много известных (и, вероятно, несколько пока неизвестных) проблем с ним, но это делает меня интересно, что на Земле другие 2920 линий JS есть во многих предложениях!
var dragParams; window.addEventListener('load', init_myscroll); /* TODO: Much to do for v axis! */ function bardrag_mousemove(e) { var pos = (e.clientX - dragParams.clientX) + dragParams.offsetLeft; pos = Math.min(Math.max(0, pos), dragParams.maxLeft); dragParams.slider.style.left = pos + 'px'; updateScrollPosition(dragParams.slider, pos); } function updateScrollPosition(slider, offsetVal) { var bar = slider.parentNode; var myscroll = bar.parentNode; var maxView = myscroll.scrollWidth - myscroll.offsetWidth; var maxSlide = bar.offsetWidth - slider.offsetWidth; var viewX = maxView * offsetVal / maxSlide; myscroll.scrollLeft = viewX; bar.style.left = viewX + 'px'; } function drag_start(e) { var slider = e.target; var maxLeft = slider.parentNode.offsetWidth - slider.offsetWidth; dragParams = { clientX: e.clientX, offsetLeft: slider.offsetLeft, slider: e.target, maxLeft: maxLeft }; e.preventDefault(); document.addEventListener('mousemove', bardrag_mousemove); } function drag_end(e) { e.stopPropagation(); document.removeEventListener('mousemove', bardrag_mousemove); } function bar_clicked(e) { var bar = e.target; var slider = bar.getElementsByClassName('slider')[0]; if (bar.className == 'h bar') { var maxSlide = bar.offsetWidth - slider.offsetWidth; var sliderX = e.offsetX - (slider.offsetWidth / 2); sliderX = Math.max(0, Math.min(sliderX, maxSlide)); slider.style.left = sliderX + 'px'; updateScrollPosition(slider, sliderX); } } function init_myscroll() { var myscrolls = document.getElementsByClassName('container'); for (var i = 0; i < myscrolls.length; i++) { var myscroll = myscrolls[i]; var style = window.getComputedStyle(myscroll); if (style.overflowY == 'scroll' || (style.overflowY == 'auto' && myscroll.offsetHeight < myscroll.scrollHeight)) { addScroller(false, myscroll); } if (style.overflowX == 'scroll' || (style.overflowX == 'auto' && myscroll.offsetWidth < myscroll.scrollWidth)) { addScroller(true, myscroll); } } } function addScroller(isX, myscroll) { myscroll.className += ' myscroll'; var bar = document.createElement('div'); var slider = document.createElement('div'); var offsetDim = isX ? myscroll.offsetWidth : myscroll.offsetHeight; var scrollDim = isX ? myscroll.scrollWidth : myscroll.scrollHeight; var sliderPx = Math.max(30, (offsetDim * offsetDim / scrollDim)); slider.style.width = 100 * sliderPx / offsetDim + '%'; slider.className = 'slider'; bar.className = isX ? 'h bar' : 'v bar'; bar.appendChild(slider); myscroll.appendChild(bar); bar.addEventListener('click', bar_clicked); slider.addEventListener('mousedown', drag_start); slider.addEventListener('mouseup', drag_end); bar.addEventListener('mouseup', drag_end); document.addEventListener('mouseup', drag_end); }
body { background-color: #66f; } .container { background-color: #fff; width: 50%; margin: auto; overflow: auto; } .container > div:first-of-type { width: 300%; height: 100px; background: linear-gradient(to right, red, yellow); } /* TODO: Much to do for v axis! */ .myscroll { overflow: hidden; position: relative; } .myscroll .bar { background-color: lightgrey; position: absolute; } .myscroll { padding-bottom: 20px; } .myscroll .h { height: 20px; width: 100%; bottom: 0; left: 0; } .myscroll .slider { background-color: grey; position: absolute; } .myscroll .h .slider { height: 100%; }
<div class="container"> <div></div> </div>
пожалуйста, проверьте эту ссылку. Пример с рабочей демонстрацией
#style-1::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); border-radius: 10px; background-color: #F5F5F5; } #style-1::-webkit-scrollbar { width: 12px; background-color: #F5F5F5; } #style-1::-webkit-scrollbar-thumb { border-radius: 10px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); background-color: #555; }
FYI, это то, что google использует в некоторых своих приложениях с давних пор. Проверьте в jsfiddle, что если вы применяете следующие классы, они каким-то образом скрывают полосу прокрутки в chrome, но она все еще работает.
jfk-scrollbar jfk-scrollbar-borderless jfk-scrollbar-dark
http://jsfiddle.net/76kcuem0/32/
Я просто нашел полезным удалить стрелки из полос прокрутки. по состоянию на 2015 год он был использован в maps.google.com при поиске мест в списке результатов в it's material design ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.
полоса прокрутки в WebKit не поддерживает большинство браузеров.
поддержка на CHROME
вот демо для webkit scrollbar полоса прокрутки в WebKit демо
Если вы ищете больше примеров проверьте это Примеры
другой метод JQuery Scroll Bar Plugin
Он поддерживает все браузеры и прост в применении
загрузите плагин из Скачать Тут
Как использовать и для большего количества опций ПРОВЕРЬТЕ ЭТО
Я пробовал много JS и CSS scroll, и я обнаружил, что это было очень легко использовать и тестировать на IE и Safari и FF и работал нормально
как @ thebluefox предлагает
вот как это работает
добавьте следующий скрипт в
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> <script type="text/javascript" src="jquery.ui.touch-punch.min.js"></script> <script type="text/javascript" src="facescroll.js"></script> <script type="text/javascript"> jQuery(function(){ // on page DOM load $('#demo1').alternateScroll(); $('#demo2').alternateScroll({ 'vertical-bar-class': 'styled-v-bar', 'hide-bars': false }); }) </script>
и это здесь в абзаце, где вам нужно прокрутить
<div id="demo1" style="width:300px; height:250px; padding:8px; resize:both; overflow:scroll"> **Your Paragraph Comes Here** </div>
для более подробной информации посетите страницу плагина
FaceScroll Custom полоса прокрутки
надеюсь, что это поможет
.className::-webkit-scrollbar { width: 10px; background-color: rgba(0,0,0,0); } .className::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.5); border-radius: 5px; }
дал мне хороший мобильный/OSX, как один.
есть способ, с помощью которого вы можете применить пользовательские полосы прокрутки, настраиваемые элементы div в HTML-документы. Вот пример, который помогает. https://codepen.io/adeelibr/pen/dKqZNb но как суть этого. Вы можете сделать что-то подобное.
<div class="scrollbar" id="style-1"> <div class="force-overflow"></div> </div>
CSS файл выглядит так.
.scrollbar { margin-left: 30px; float: left; height: 300px; width: 65px; background: #F5F5F5; overflow-y: scroll; margin-bottom: 25px; } .force-overflow { min-height: 450px; } #style-1::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); border-radius: 10px; background-color: #F5F5F5; } #style-1::-webkit-scrollbar { width: 12px; background-color: #F5F5F5; } #style-1::-webkit-scrollbar-thumb { border-radius: 10px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); background-color: #555; }
или использовать что-то вроде этого:
var MiniScroll=function(a,b){function e(){c.scrollUpdate()}function f(){var a=new Date,b=Math.abs(a-c.animation.frame),d=c.countScrollHeight();c.animation.frame=a,c.render(b),d.height!=c.controls.height&&(e(),c.controls.height=d.height),requestAnimationFrame(f)}function g(){c.scrollUpdate()}function h(a){var b=c.target.scrollTop,d=Math.abs(a.wheelDeltaY/(10-c.speed));c.target.scrollTop=a.wheelDeltaY>0?b-d:b+d,c.scrollUpdate()}function i(a){if(a.target.classList.contains("scroll"))return a.preventDefault(),!1;var b=c.countScrollHeight();c.target.scrollTop=a.offsetY*b.mul-parseInt(b.height)/2,c.scrollUpdate()}b=b||{};var c=this,d={speed:"speed"in b?b.speed:7};this.target=document.querySelector(a),this.animation={frame:new Date,stack:[]},this.identity="scroll"+parseInt(1e5*Math.random()),this.controls={place:null,scroll:null,height:0},this.speed=d.speed,this.target.style.overflow="hidden",this.draw(),requestAnimationFrame(f),this.target.onscroll=g,this.target.addEventListener("wheel",h),this.controls.place.onclick=i};MiniScroll.prototype.scrollUpdate=function(){this.controls.place.style.height=this.target.offsetHeight+"px";var a=this.countScrollHeight();this.controls.scroll.style.height=a.height,this.controls.scroll.style.top=a.top},MiniScroll.prototype.countScrollHeight=function(){for(var a=this.target.childNodes,b=parseInt(this.target.offsetHeight),c=0,d=0;d<a.length;d++)a[d].id!=this.identity&&(c+=parseInt(a[d].offsetHeight)||0);var e=this.target.offsetHeight*parseFloat(1/(parseFloat(c)/this.target.offsetHeight)),f=this.controls.place.offsetHeight*(this.target.scrollTop/c)+"px";return{mul:c/this.target.offsetHeight,height:e>b?b+"px":e+"px",top:f}},MiniScroll.prototype.draw=function(){var a=document.createElement("div"),b=document.createElement("div");a.className="scroll-place",b.className="scroll",a.appendChild(b),a.id=this.identity,this.controls.place=a,this.controls.scroll=b,this.target.insertBefore(a,this.target.querySelector("*")),this.scrollUpdate()},MiniScroll.prototype.render=function(a){for(var b=0;b<this.animation.stack.length;b++){var c=this.animation.stack[b],d=parseInt(c.target);c.element.style[c.prop]=d+c.points}};
и инициализации:
<body onload="new MiniScroll(this);"></body>
и настройка:
.scroll-place { // ... // } .scroll { // ... // }