![カスタム Webkit スクロールバーを無効にする方法はありますか?](https://rvso.com/image/1302214/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%20Webkit%20%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
Google Chrome などの Webkit ベースのブラウザでスクロールバーのカスタマイズを無効にしたり元に戻したりする拡張機能、カスタム ユーザー スタイルシートなどはありますか? プレーンなネイティブ スクロールバーは気に入っていますが、CSS でスタイル設定した後でスクロールバーを元に戻すための CSS の組み合わせが見つからないようです。
答え1
残念ながら、CSS は一度有効にすると「無効」にしたり元に戻したりすることはできません。
::-webkit-scrollbar を単純にオーバーライドしてデフォルトのスタイルにすることはできません。これを行う唯一の方法は、コードから ::-webkit-scrollbar ルールをすべて削除することです。その時点で、スクロール可能な領域でスクロールバーを再描画するように強制する必要があります。これを行うには、スクロール可能な要素で display:none; をすばやく追加して削除するか、同じことを overflow:hidden; で行います。最初の方法の問題は、ページが読み込まれるたびにページが白く点滅することです。2 番目の方法は、ページ上の要素がオーバーフローしているかどうかを確認する必要があるため、リソースを大量に消費します。理想的ではありません。
上記のリンクは、カスタム バーを完全に削除してスクロール バーをなくすスクリプトからのものです。
答え2
バイナリクリーンなテキストエディタまたは 16 進エディタで Web ブラウザの実行ファイルを開き、「webkit-scrollbar」のすべての出現箇所を「webkit-scrollb4r」などの他のジャンクに置き換えます。これを Chrome で試したところ、問題は解決しました。
答え3
私は @bumfo の回答を参考にして、Chrome のこのセキュリティ問題を修正しました。https://stackoverflow.com/questions/49161159/uncaught-domexception-failed-to-read-the-rules-property-from-cssstylesheet
これをコンソールに貼り付けると、スクロール バーが元に戻ります。
for (var sheetI = 0; sheetI < document.styleSheets.length; ++sheetI) {
var sheet = document.styleSheets[sheetI];
try {
var ruleSet = sheet.rules || sheet.cssRules;
for (var i = 0; i < ruleSet.length; ++i) {
var rule = ruleSet[i];
if (/scrollbar/.test(rule.selectorText)) {
sheet.deleteRule(i--);
}
}
} catch (e) {
console.warn("Can't read the css rules of: " + sheet.href, e);
}
};
これに該当する Chrome 拡張機能は次のとおりです。https://chrome.google.com/webstore/detail/default-scrollbar/nkjmoagfbmeafonfhbkeicjdhjlofplo
そしてその github リポジトリ:https://github.com/ubershmekel/default-scrollbar
答え4
注: この回答は 2015 年に最後にテストされたため、新しい環境では機能しない可能性があります。
以下のコードは、一致するすべての CSS ルールを削除するユーザー スクリプトです::-webkit-scrollbar
。
// ==UserScript==
// @name My Fancy Scrollbar Userscript
// @namespace http://your.homepage/
// @version 0.1
// @description enter something useful
// @author You
// @match http://*/*
// @grant none
// ==/UserScript==
[].forEach.call(document.styleSheets, function(sheet) {
for (var i = 0; i < sheet.rules.length; ++i) {
var rule = sheet.rules[i];
if (/::-webkit-scrollbar/.test(rule.selectorText)) {
sheet.deleteRule(i--);
}
}
});