CSS dostosowany pasek przewijania w div
Jak mogę dostosować pasek przewijania za pomocą CSS (kaskadowe arkusze stylów) dla jednego div
, a nie całej strony?
14 answers
Pomyślałem, że pomocne będzie skonsolidowanie najnowszych informacji na temat pasków przewijania, CSS i kompatybilności przeglądarki.
Scroll Bar obsługa CSS
Obecnie nie istnieje definicja stylów CSS paska przewijania między przeglądarkami. artykuł W3C wspominam na końcu ma następujące stwierdzenie i został ostatnio zaktualizowany (10 paź 2014):
Niektóre przeglądarki (IE, Konqueror) obsługują niestandardowe właściwości 'scrollbar-shadow-color', 'scrollbar-track-color' i inni te właściwości są nielegalne: nie są zdefiniowane w żadnej specyfikacji CSS ani oznaczone jako własnościowe (przez przedrostek " - vendor-")
Microsoft
Jak wspomnieli inni, Microsoft obsługuje stylizację paska przewijania, ale tylko dla IE8 i wyższych.
Przykład:
<!-- 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)
Podobnie WebKit ma teraz swoją własną wersję:
- Style scrollbars: https://www.webkit.org/blog/363/styling-scrollbars /
- Demo wszystkich stylizacji paska przewijania WebKit
-
From Custom scrollbars in WebKit , relevant 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 nie ma własnej wersji stylów paska przewijania zgodnie z to więc odpowiedz.
Nie ma odpowiednika Gecko
::-webkit-scrollbar
i przyjaciół.Będziesz musiał trzymać się jQuery.
Wielu osobom spodobałaby SIĘ Ta funkcja, zobacz:
https://bugzilla.mozilla.org/show_bug.cgi?id=77790Ten raport prosi o dokładnie to samo, o co prosisz: https://bugzilla.mozilla.org/show_bug.cgi?id=547260
Style paska przewijania między przeglądarkami
Biblioteki JavaScript i wtyczki mogą zapewnić rozwiązanie między przeglądarkami. Istnieje wiele opcji.
- 20 jQuery Scrollbar plugin z przykładami (24 lipca 2012)
- 30 + JavaScript/Ajax metod dla suwaków, przewijania i pasków przewijania (07 maja 2008)
- 21 przydatne Scrollbar CSS / JavaScript Styling Tutorials (sierpień, 2012)
- 15+ gratis i Premium jQuery Scrolling Plugins (26 sierpnia 2012)
Zapobieganie Nielegalnej Stylizacji Paska Przewijania
Na wypadek, gdybyś chciał zapobiec stylowaniu paska przewijania, które nie zostało poprawnie poprzedzone "-vendor", Ten artykuł w W3C zawiera podstawowe instrukcje. Zasadniczo, będziesz musisz dodać następujący CSS do arkusza stylów użytkownika powiązanego z przeglądarką. Te definicje zastąpią nieprawidłową stylizację paska przewijania na każdej odwiedzanej stronie.
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;
}
Duplikat lub podobne pytania / źródło Nie linkowane powyżej
- zmiana stylu pasków przewijania
- CSS scrollbar style cross browser
- Jak utworzyć niestandardowy pasek przewijania na div (styl Facebook)
Uwaga: Ta odpowiedź zawiera informacje z różnych źródeł. Jeśli użyto źródła, to jest ono również powiązane w tej odpowiedzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 18:41:28
Niestandardowe paski przewijania nie są możliwe z CSS, będziesz potrzebował trochę magii JavaScript.
Niektóre przeglądarki obsługują niestandardowe reguły CSS, takie jak ::-webkit-scrollbar
W Webkit, ale nie jest to idealne rozwiązanie, ponieważ będzie działać tylko w Webkit. IE też coś takiego miało, ale chyba już tego nie popierają.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-25 19:02:49
Spróbuj
Źródło: http://areaaperta.com/nicescroll/
Prosta Implementacja
<script type="text/javascript">
$(document).ready(
function() {
$("html").niceScroll();
}
);
</script>
Jest to pasek przewijania wtyczki jQuery, więc twoje paski przewijania są sterowane i wyglądają tak samo w różnych systemach operacyjnych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 08:43:48
Myślę, że w tym wątku brakuje jednej rzeczy. Jeśli chciałbyś zaimplementować przewijanie za pomocą wtyczki, zdecydowanie najlepszy w 2014 jest Sly .
Jest to czysty pasek przewijania javascript, więc twoje paski przewijania są sterowalne i wyglądają tak samo na różnych systemach operacyjnych.
Ma najlepszą wydajność i funkcje. Żaden inny nawet nie jest blisko. Nie trać czasu wybierając z miriady halfbaked buggy innych bibliotek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 23:07:21
Próbowałem wielu wtyczek, większość z nich nie obsługuje wszystkich przeglądarek, wolę iScroll oraz nanoScroller działa dla wszystkich tych przeglądarek:
- IE11 - > IE6
- IE10 - WP8
- IE9 - WP7
- IE Xbox One
- IE Xbox 360
- Google Chrome
- FireFox
- Opera
- Safari
Ale iScroll nie działa z dotykiem!
Demo iScroll : http://lab.cubiq.org/iscroll/examples/simple/
demo nanoScroller : http://jamesflorentino.github.io/nanoScrollerJS/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 13:56:43
Oto przykład webkit, który działa dla Chrome i 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;
}
Wyjście:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-12 07:20:31
Jak wielu ludzi, szukałem czegoś, co było:
- konsekwentnie stylizowane i funkcjonalne w większości nowoczesnych przeglądarek
- nie jakieś śmieszne 3000-liniowe rozszerzenie jQuery cr * p
...Ale niestety-nic!
Cóż, jeśli praca jest warta wykonania... Udało mi się coś uruchomić w około 30 minut. Zastrzeżenie: jest sporo znanych (i prawdopodobnie kilka jeszcze nieznanych) problemów z nim, ale to sprawia, że zastanawiam się, co na ziemi inne 2920 linii JS jest w wielu ofertach!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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 21:19:12
Proszę sprawdzić ten link. Przykład z roboczym demo
#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, to jest to, co google używa w niektórych swoich aplikacjach od dawna. Sprawdź w jsfiddle, że jeśli zastosujesz następne klasy, w jakiś sposób ukryją pasek przewijania w chrome, ale nadal działa.
jfk-scrollbar jfk-scrollbar-borderless jfk-scrollbar-dark
Http://jsfiddle.net/76kcuem0/32/
Po prostu uznałem, że warto usunąć strzałki z pasków przewijania. od 2015 roku jest używany w maps.google.com podczas wyszukiwania miejsc na liście wyników w interfejsie projektowania materiałów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 05:01:06
Webkit scrollbar nie obsługuje większości przeglądarek.
Obsługuje CHROME
Oto demo webkit scrollbar WebKit scrollbar DEMO
Jeśli szukasz więcej przykładów sprawdź to więcej przykładów
Inną metodą jest jQuery Scroll Bar Plugin
Obsługuje wszystkie przeglądarki i jest łatwy do zastosowania
Pobierz plugin z Pobierz tutaj
Jak używać i więcej opcji sprawdź to
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 10:26:53
Wypróbowałem wiele JS i CSS scroll i stwierdziłem, że jest to bardzo łatwe w użyciu i przetestowane na IE, Safari i FF i działało dobrze
Jak sugeruje @thebluefox
Oto Jak to działa
Dodaj poniższy skrypt do
<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>
I to tutaj w akapicie gdzie trzeba przewijać
<div id="demo1" style="width:300px; height:250px; padding:8px; resize:both; overflow:scroll">
**Your Paragraph Comes Here**
</div>
Po Więcej szczegółów odwiedź Stronę wtyczki
Hope it help ' S
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 09:28:29
.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;
}
Dał mi ładny mobile / osx jak jeden.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 12:41:25
Istnieje sposób, w jaki można zastosować niestandardowe paski przewijania do niestandardowych elementów div w dokumentach HTML. Oto przykład, który pomaga. https://codepen.io/adeelibr/pen/dKqZNb ale w skrócie. Możesz zrobić coś takiego.
<div class="scrollbar" id="style-1">
<div class="force-overflow"></div>
</div>
Plik CSS wygląda tak.
.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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 11:38:25
Lub użyj czegoś takiego:
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}};
I inicjalizuj:
<body onload="new MiniScroll(this);"></body>
I dostosuj:
.scroll-place { // ... // }
.scroll { // ... // }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 13:47:51