Пользовательская полоса прокрутки CSS для Firefox - PullRequest
270 голосов
/ 29 мая 2011

Я хочу настроить полосу прокрутки с помощью 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, если это возможно.

Буду признателен за чей-либо экспертный совет!

Ответы [ 7 ]

210 голосов
/ 29 мая 2011

По состоянию на конец 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, вы можете попробовать:

41 голосов
/ 26 мая 2015

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

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

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

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

jsfiddle.net / aj7bxtjz / 1 /

35 голосов
/ 28 июля 2013

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

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

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

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

26 голосов
/ 09 января 2019

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

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

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

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

macOS notes:

Автоматически скрывающие полупрозрачные полосы прокрутки, используемые по умолчанию в 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>

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

  • auto Ширина полосы прокрутки по умолчанию для платформы.
  • thin Тонкий вариант ширины полосы прокрутки на платформах, которые предоставляют эту опцию, или более тонкая полоса прокрутки, чем ширина полосы прокрутки платформы по умолчанию.
  • none Полоса прокрутки не отображается, однако элемент все еще можно прокручивать.

Вы также можете установить конкретное значение длины в соответствии со спецификацией. И thin, и определенная длина могут ничего не делать на всех платформах, и что именно она делает, зависит от платформы. В частности, Firefox в настоящее время, похоже, не поддерживает определенное значение длины ( этот комментарий к их баг-трекеру, кажется, подтверждает это ). Клавиатура thin, по-видимому, хорошо поддерживается, по крайней мере, с поддержкой MacOS и Windows.

Вероятно, стоит отметить, что опция значения длины и все свойство scrollbar-width рассматриваются для удаления в будущем проекте, и если это произойдет, это конкретное свойство может быть удалено из Firefox в будущей версии.

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

.scroll {
  width: 30%;
  height: 100px;
  border: 1px solid grey;
  overflow: scroll;
  display: inline-block;
}
.scroll-width-auto {
  scrollbar-width: auto;
}
.scroll-width-thin {
  scrollbar-width: thin;
}
.scroll-width-none {
  scrollbar-width: none;
}
<div class="scroll scroll-width-auto">
<p>auto</p><p>auto</p><p>auto</p><p>auto</p><p>auto</p><p>auto</p>
</div>

<div class="scroll scroll-width-thin">
<p>thin</p><p>thin</p><p>thin</p><p>thin</p><p>thin</p><p>thin</p>
</div>

<div class="scroll scroll-width-none">
<p>none</p><p>none</p><p>none</p><p>none</p><p>none</p><p>none</p>
</div>
14 голосов
/ 12 декабря 2018

Поскольку 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, в настоящее время необходимо установить его как " thin " со следующим правилом scrollbar-width: thin;

0 голосов
/ 29 января 2016
@-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;
    }
}
0 голосов
/ 31 июля 2013

Он работает в пользовательском стиле и, похоже, не работает на веб-страницах. Я не нашел официального направления от 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/ для деталей.

...