Пользовательская панель прокрутки CSS для Firefox

Я хочу настроить полосу прокрутки с помощью CSS.

Я использую этот код WebKit CSS, который хорошо работает для Safari и Chrome:

::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

Как я могу сделать то же самое в Firefox?

Я знаю, что могу легко сделать это с помощью jQuery, но я бы предпочел сделать это с чистым CSS, если это возможно.

Буду признателен за консультацию специалиста!

Ответ 1

По состоянию на конец 2018 года в Firefox доступно ограниченное количество настроек!

Смотрите эти ответы:

И это для справочной информации: https://bugzilla.mozilla.org/show_bug.cgi?id=1460109


Там нет Firefox, эквивалентного ::-webkit-scrollbar и друзьям.

Вам придется придерживаться JavaScript.

Многие люди хотели бы эту функцию, смотрите: https://bugzilla.mozilla.org/show_bug.cgi?id=77790


Что касается замены JavaScript, вы можете попробовать:

Ответ 2

Могу ли я предложить альтернативу?

Никаких сценариев вообще, только стандартизованные стили css и немного креативности. Короткий ответ - маскирование частей существующей полосы прокрутки браузера, что означает, что вы сохраняете все функциональные возможности.

.scroll_content {
    position: relative;
    width: 400px;
    height: 414px;
    top: -17px;
    padding: 20px 10px 20px 10px;
    overflow-y: auto;
}

Для демонстрации и немного более подробного объяснения, проверьте здесь...

jsfiddle.net/aj7bxtjz/1/

Ответ 3

Я думал, что поделюсь своими выводами на случай, если кто-то рассматривает плагин JQuery для этой работы.

Я дал JQuery Custom Scrollbar попробовать. Он довольно модный и выполняет плавную прокрутку (с инерцией прокрутки) и имеет множество параметров, которые вы можете настроить, но в итоге он оказался слишком загруженным для меня (и это добавляет изрядное количество в DOM).

Теперь я использую Perfect Scrollbar. Это простой и легкий (6 КБ), и он делает достойную работу до сих пор. Это не сильно нагружает процессор (насколько я могу судить) и очень мало добавляет к вашему DOM. Он получил только пару параметров для настройки (wheelSpeed и wheelPropagation), но это все, что мне нужно, и он прекрасно обрабатывает обновления прокручиваемого контента (такие как загрузка изображений).

PS Я быстро взглянул на JScrollPane, но @simone прав, теперь он немного устаревший и PITA.

Ответ 4

Firefox 64 добавляет поддержку черновика спецификации CSS Scrollbars Module уровня 1, который добавляет два новых свойства из scrollbar-width и scrollbar-color которые дают некоторый контроль над тем, как отображаются полосы прокрутки.

Вы можете установить scrollbar-color на одно из следующих значений (описания из MDN):

  • auto Рендеринг платформы по умолчанию для дорожки части полосы прокрутки, при отсутствии каких-либо других связанных свойств цвета полосы прокрутки.
  • dark Показать темную полосу прокрутки, которая может быть либо темным вариантом полосы прокрутки, предоставляемой платформой, либо пользовательской полосой прокрутки с темными цветами.
  • light Показать светлую полосу прокрутки, которая может быть либо облегченным вариантом полосы прокрутки, предоставляемой платформой, либо настраиваемой полосой прокрутки со светлыми цветами.
  • <color> <color> Применяет первый цвет к большому пальцу полосы прокрутки, второй - к дорожке полосы прокрутки.

Обратите внимание, что значения dark и light в настоящее время не реализованы в Firefox.

примечания macOS:

Автоматически скрывающие полупрозрачные полосы прокрутки, используемые по умолчанию в macOS, не могут быть окрашены этим правилом (они по-прежнему выбирают свой собственный контрастный цвет в зависимости от фона). Только постоянно отображаемые полосы прокрутки (Системные настройки> Показать полосы прокрутки> Всегда) окрашены.

Визуальная демонстрация:

.scroll {
  width: 20%;
  height: 100px;
  border: 1px solid grey;
  overflow: scroll;
  display: inline-block;
}
.scroll-color-auto {
  scrollbar-color: auto;
}
.scroll-color-dark {
  scrollbar-color: dark;
}
.scroll-color-light {
  scrollbar-color: light;
}
.scroll-color-colors {
  scrollbar-color: orange lightyellow;
}
<div class="scroll scroll-color-auto">
<p>auto</p><p>auto</p><p>auto</p><p>auto</p><p>auto</p><p>auto</p>
</div>

<div class="scroll scroll-color-dark">
<p>dark</p><p>dark</p><p>dark</p><p>dark</p><p>dark</p><p>dark</p>
</div>

<div class="scroll scroll-color-light">
<p>light</p><p>light</p><p>light</p><p>light</p><p>light</p><p>light</p>
</div>

<div class="scroll scroll-color-colors">
<p>colors</p><p>colors</p><p>colors</p><p>colors</p><p>colors</p><p>colors</p>
</div>

Ответ 5

Поскольку Firefox 64, можно использовать новые спецификации для простой стилизации полосы прокрутки (не такой полной, как в Chrome с префиксами поставщиков).

В этом примере можно увидеть решение, которое объединяет разные правила для работы как с Firefox, так и с Chrome с одинаковым (не равным) конечным результатом (например, используйте ваши исходные правила Chrome):

Основные правила:

Для Firefox

.scroller {
  overflow-y: scroll;
  scrollbar-color: #0A4C95 #C2D2E4;
}

Для Chrome

.scroller::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

.scroller::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

Обратите внимание, что в отношении вашего решения можно также использовать более простые правила Chrome, как указано ниже:

.scroller::-webkit-scrollbar-track  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb {
    height: 30px;
    background-color: #0A4C95;
}

Наконец, чтобы скрыть стрелки в полосах прокрутки также в Firefox, в настоящее время необходимо установить его как "тонкое" со следующим правилом scrollbar-width: thin;

Ответ 6

Полосы прокрутки Firefox 2018 года по-прежнему выглядят так же плохо, как и 1992 год, это PITA, но теперь мы можем использовать фильтры CSS для них.

Вот пример с зеленоватым перекрестным браузером, совместимым с гомогенным оттенком сверху.

Используйте с умом.

div {
  max-height: 200px;
  max-width: 80%;
  overflow-x: hidden;
  overflow-y: scroll;

  filter: sepia(100%) saturate(360%) grayscale(0) contrast(140%) hue-rotate(56deg) invert(16%)

}
<div>

<ul>
<li><a href="/wiki/Chapati" title="Chapati">Chapati</a>, unleavened flatbread from the <a href="/wiki/Indian_subcontinent" title="Indian subcontinent">Indian subcontinent</a></li>
<li><a href="/wiki/Wheat_tortilla" title="Wheat tortilla">Flour tortilla</a>, a thin unleavened flatbread from <a href="/wiki/Mexico" title="Mexico">Mexico</a></li>
<li><a href="/wiki/Focaccia" title="Focaccia">Focaccia</a>, a flat oven-baked bread from <a href="/wiki/Italy" title="Italy">Italy</a></li>
<li><a href="/wiki/Injera" title="Injera">Injera</a>, a sourdough-risen flatbread from <a href="/wiki/East_Africa" title="East Africa">East Africa</a></li>
<li><a href="/wiki/Khachapuri" title="Khachapuri">Khachapuri</a>, a breaded cheese dish from <a href="/wiki/Georgia_(country)" title="Georgia (country)">Georgia</a></li>
<li><a href="/wiki/Khubz" title="Khubz">Khubz</a>, a round bread from the <a href="/wiki/Arabian_Peninsula" title="Arabian Peninsula">Arabian Peninsula</a></li>
<li><a href="/wiki/Matnakash" title="Matnakash">Matnakash</a>, a leavened bread from <a href="/wiki/Armenia" title="Armenia">Armenia</a> (related to the <a href="/wiki/Ramadan_pita" class="mw-redirect" title="Ramadan pita">Ramadan pita</a>)</li>
<li><a href="/wiki/Naan" title="Naan">Naan</a>, a leavened, oven-baked flatbread from <a href="/wiki/Central_Asian_cuisine" class="mw-redirect" title="Central Asian cuisine">Central</a> and <a href="/wiki/South_Asian_cuisine" title="South Asian cuisine">South Asia</a></li>
<li><a href="/wiki/Pit%C4%83_de_Pecica" title="Pită de Pecica">Pită de Pecica</a>, a round bread from <a href="/wiki/Romania" title="Romania">Romania</a></li>
<li><a href="/wiki/Rghaif" class="mw-redirect" title="Rghaif">Rghaif</a>, a pancake-like bread from <a href="/wiki/Maghreb" title="Maghreb">Northwest Africa</a></li>
</ul>

</div>

Ответ 7

Он работает в пользовательском стиле и, похоже, не работает на веб-страницах. Я не нашел официального руководства от Mozilla. Хотя, возможно, в какой-то момент он работал, Firefox не имеет официальной поддержки для этого. Эта ошибка по-прежнему открыта https://bugzilla.mozilla.org/show_bug.cgi?id=77790

scrollbar {
/*  clear useragent default style*/
   -moz-appearance: none !important;
}
/* buttons at two ends */
scrollbarbutton {
   -moz-appearance: none !important;
}
/* the sliding part*/
thumb{
   -moz-appearance: none !important;
}
scrollcorner {
   -moz-appearance: none !important;
   resize:both;
}
/* vertical or horizontal */
scrollbar[orient="vertical"] {
    color:silver;
}

Подробнее о http://codemug.com/html/custom-scrollbars-using-css/.

Ответ 8

@-moz-document url-prefix(http://),url-prefix(https://) {
    scrollbar {
       -moz-appearance: none !important;
       background: rgb(0,255,0) !important;
    }
    thumb,scrollbarbutton {
       -moz-appearance: none !important;
       background-color: rgb(0,0,255) !important;
    }

    thumb:hover,scrollbarbutton:hover {
       -moz-appearance: none !important;
       background-color: rgb(255,0,0) !important;
    }
    scrollbarbutton {
       display: none !important;
    }
    scrollbar[orient="vertical"] {
      min-width: 15px !important;
    }
}