1

I'm using the following method, but it doesn't work:

  1. first, the CSS style of my HTML contains
::webkit-scrollbar
{
  width:12px;
}
  1. To change the css style, I create a <style> with id = "my_sheet"
  2. then, I use my_sheet = document.getElementById("my_sheet").sheet; to get the css style sheet.
  3. I use the command sheet.addRule('::webkit-scrollbar', 'width:10px;'); but the console shows
VM1023:1 Uncaught DOMException: Failed to execute 'addRule' on 'CSSStyleSheet': Failed to parse the rule '::webkit-scrollbar { width:10px; }'.
    at <anonymous>:1:7
(anonymous) @ VM1023:1

But this way works to change other elements of HTML. What's the right way to change the CSS style of ::webkit-scrollbar

Dheeraj Kumar
  • 410
  • 6
  • 16
NiaBie
  • 55
  • 1
  • 9

2 Answers2

2

You can achieve this using CSS without JavaScript

Here is the updated fiddle:

::-webkit-scrollbar {
  width: 10px;
}

::-webkit-scrollbar-track {
  background: #f1f1f1;
}

::-webkit-scrollbar-thumb {
  background: #888;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}
<!DOCTYPE html>
<html>

<head>

</head>

<body>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
  <p>Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum </p>
</body>

</html>
Vikas Jadhav
  • 4,597
  • 2
  • 19
  • 37
  • The thing I want to do is: when hovering the cursor on both thumb and track, the width of the scrollbar can be changed. But now I can trigger the event only by hovering the cursor on the thumb, it seems that I can't change the scrollbar's width by changing the css style of scrollbar-track, so I try to do this by javascript... Is there a better way? – NiaBie Mar 19 '19 at 11:43
0

Instead of trying to change ::webkit-scrollbar in the CSS using javascript (which is apparently not possible), apply it to your element in the first place with a class in the CSS, and then just remove the class from the element using classList.remove("mystyle")

My aim was to create a listbox in HTML that works more like a listbox in Windows, rather than a combobox or dropdown. With this approach the listbox works the same for Firefox and Chrome now -- there's no scrollbar in the listbox until I add the 6th option with javascript, then the scrollbar appears in Firefox and Chrome. Here's the code for an example:

<html>
<head>
<style>
#mySelect {
    overflow-y: scroll;
    scrollbar-width: none; /* Firefox */
   -ms-overflow-style: none;  /* Internet Explorer 10+ */
}

 .sbar::-webkit-scrollbar { /* WebKit */
    width: 0;
    height: 0
}

</style>

</head>
<body>

<h3>Demonstration of a cross-browser method to make the scrollbar appear and disappear via javascript</h3>

<select id="mySelect" class="sbar" size="5">
  <option>Chevy</option>
  <option>Dodge</option>
  <option>Jeep</option>
</select>

<p>Click the button to get the number of option elements found in a drop-down list.</p>

<button onclick="myFunction()">Count</button>
<br/>
<button id="my" onclick="myFunction2()">Add element</button>
<br/>
<button id="my2" onclick="myFunction3()">Remove element</button>
<p id="demo"></p>

<script>
function myFunction() {
  var x = document.getElementById("mySelect").length;
  document.getElementById("demo").innerHTML = x;
}


function myFunction2() {
    var y = document.getElementById("mySelect") ;
    var opt = document.createElement("option");
    opt.text = "Tesla";
    y.add(opt); 
    if (y.length > 5) {element = document.styleSheets[0].cssRules[0].style;
            element.removeProperty('scrollbar-width');
            y.classList.remove("sbar");
}
}

function myFunction3() {
    var y = document.getElementById("mySelect") ;
    var ol = y.length
    y.remove(y.selectedIndex); 
    if (ol == 6) {element = document.styleSheets[0].cssRules[0].style;
            element.setProperty('scrollbar-width','none');
            y.classList.add("sbar");
}
}




</script>   

</body>
</html>
AlexS
  • 1
  • 1