Спеціальна панель прокрутки CSS для Firefox


313

Я хочу налаштувати смугу прокрутки за допомогою 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
Поділіться, будь ласка, як це можна зробити за допомогою jQuery. Я зіткнувся з тією ж проблемою, але використовував CSS, щоб виправити це для Webkit. Однак Firefox створює проблему, з якою може допомогти ваше рішення jQuery.
iGbanam

1
Я рекомендую використовувати плагін jscrollpane jQuery.
Димитрій Воронцов

У Firefox виникла проблема з jScrollPane. jScrollPane прекрасно працює в Chrome, але у Firefox у вас порожня системна смуга прокрутки праворуч від панелі прокрутки jScrollPane. Має бути лише одна смуга прокрутки
iGbanam

1
Неправда. Якщо у вас це є, ви десь щось зробили не так.
Димитрій Воронцов

Дивіться моя відповідь тут: stackoverflow.com/questions/7357203/custom-scrollbars / ...
Buzinas

Відповіді:


239

Станом на кінець 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
Дякую, ThirtyDot. Хоча одне питання: а як щодо -moz-поява: scrollbartrack-вертикальна - та інші пов'язані з цим розширення CSS? Можливо, їх можна якось використати?
Димитрій Воронцов

2
Ні. На жаль, жодне з можливих значень для не -moz-appearanceможе допомогти. "The -moz-appearance CSS property is used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme."- ви просто отримаєте рідну смугу прокрутки.
тридцятьдот

15
На всякий випадок, коли хтось, хто читає це, потребує практичного рішення, я в кінцевому підсумку використовував плагін jscrollpane jQuery.
Димитрій Воронцов

1
@JacquesMathieu, я бачу, що ти маєш на увазі. Хоча це не винна Барону, якщо я завантажую сторінку і не дозволяю бароні ініціалізуватися, помилка все-таки виникає. Тож схоже, що тут у вині Chrome.
thephpdev

3
drafts.csswg.org/css-scrollbars-1 є початковим етапом першого етапу, але він включений у Firefox Nightly зараз поза полем за замовчуванням.
wegry

53

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

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

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

Зауважте, що darkі lightзначення наразі не реалізовані у Firefox .

нотатки macOS:

Напівпрозорі панелі прокрутки, які автоматично переховуються, які є типовими для macOS, не можуть бути забарвлені цим правилом (вони все одно вибирають свій контрастний колір залежно від фону). Кольоровими є лише постійно показані смуги прокрутки (Налаштування системи> Показати смуги прокрутки> Завжди).

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

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

  • auto Ширина смуги прокрутки за замовчуванням для платформи.
  • thin Варіант ширини тонкої смуги прокрутки на платформах, які надають цю опцію, або тонший смуги прокрутки, ніж ширина смуги прокрутки платформи за замовчуванням.
  • none Не відображається смуга прокрутки, однак елемент все одно буде прокручуватися.

Ви також можете встановити значення конкретної довжини відповідно до специфікації. І thinдовжина, і конкретна довжина можуть нічого не робити на всіх платформах, і те, що саме вона робить, залежить від платформи. Зокрема, схоже, що Firefox наразі не підтримує певну величину довжини ( цей коментар щодо їх помилки про помилку, схоже, підтверджує це ). thinKeywork дійсно , здається, добре підтримується , проте, з MacOS і підтримки Windows , в- крайней мере.

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

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


Дякую за цю відповідь. Я оновив свою прийняту відповідь, щоб просувати цю (та іншу відповідну відповідь), щоб люди швидше її бачили.
тридцятьдот

1
Це по суті дублює відповідь Лука за три тижні до цього.
Джош Хабдас

@JoshHabdas Ця відповідь не містить майже стільки інформації про сумісність чи використання. Я створив цю відповідь, оскільки в іншій відповіді не було важливої ​​інформації, яку я шукав.
Олександр О'Мара

1
Ви можете дати їм кредит, запропонувати відгук або розглянути можливість редагування їх відповіді.
Джош Хабдас

2
@JoshHabdas Ну, 5 людей вже вважають його корисною, і вона містить інформацію, яку не можна знайти ніде в Інтернеті, тому я не згоден.
Олександр О'Мара

43

Чи можу я запропонувати альтернативу?

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

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

Для демонстрації та трохи детальнішого пояснення перевірте тут ...

jsfiddle.net/aj7bxtjz/1/


7
На жаль, це не відповідає на питання. Димитрій намагається стилізувати смугу прокрутки, а не приховувати її.
stvnrynlds

14
Це було 4 роки тому (я це знаю), тож я впевнений, що він уже щось робив. Але ця тема є актуальною і сьогодні - в той час як інші браузери допускають певний тип "незаконної" модифікації смуг прокрутки, FF не робить. Ось чому я вирішив опублікувати його. А підсумковим результатом є візуально стилізація смуги прокрутки, незалежно від того, що спосіб цього зробити - це приховує її частину.
Томаз

Мені подобається це рішення, за винятком усієї додаткової розмітки з абсолютним розміщенням (робить змінні розміри речі кошмаром), плюс ви фактично не можете змінити стиль, ви просто маскуєте / ховаєте елементи існуючого скролера - занадто погано, якщо я хочу зелену смугу!
RozzA

3
так, через чотири роки справа не в тому, щоб відповісти на питання ОП стільки, скільки зробити внесок у співтовариство.
tmthyjames

3
Суть проблеми полягає в тому, що рішення, надані деякими рендерингами, є нестандартними. Це питання, яке найкраще стосується моїх проблем, і це відповідь, яку я прокручував.
Філіп Дупанович

36

Я думав, що поділюсь своїми висновками, якщо хтось розглядає плагін JQuery, щоб виконати цю роботу.

Я дав JQuery користувальницькій смузі прокрутки . Це досить фантазії і робить плавне прокручування (з інерцією прокрутки) і має безліч параметрів, які ви можете налаштувати, але це в кінцевому підсумку було занадто інтенсивним процесором для мене (і це додає DOM неабияку суму).

Тепер я даю ідеальну смугу прокрутки . Він простий і легкий (6 КБ) і до цього часу робить гідну роботу. Це зовсім не інтенсивний процесор (наскільки я можу сказати) і додає дуже мало вашому DOM. У нього є лише пара параметрів для налаштування (wheelSpeed ​​і wheelPropagation), але це все, що мені потрібно, і він прекрасно обробляє оновлення вмісту прокрутки (наприклад, завантаження зображень).

PS У мене був швидкий погляд на JScrollPane, але @simone вірно, це трохи датовано зараз і PITA.


3
Також є емулятор прокрутки трекпадів - це те, що використовується twitch.tv.
forivall

1
Ідеальна смуга прокрутки насправді гарна. Вичерпавши багато інших варіантів, я знайшов це найкращим рішенням. Дякуємо, що запропонували це.
Леонард Тео

nanoScroller також дуже хороший і відносно худорлявий. jamesflorentino.github.io/nanoScrollerJS На противагу важким плагінам JS, цей просто приховує нативний скроллер і показує альтернативну скроллер, використовуючи натиснуту подію "прокрутки"
Danny R

1
Я уникаю всіх рішень jquery, оскільки всі вони відстають від повільніших машин або машин під напругою, але PS виглядає як переможець
RozzA

31

Оскільки 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;


1
Схоже, IE 5.5, можливо, щось отримав відразу. :)
Джош Хабдас


0

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


2
Я намагався так само, як ви написали, але це не працює для мого в FF, перевірте jsfiddle.net/gGbkY/1 я щось пропускаю?
Satinder singh

Він працює в користувальницькому стилі, і, здається, не працює на веб-сторінках. Я не знайшов офіційного напрямку від Mozilla з цього приводу.
ipirlo

1
перевірте те ж посилання: воно більше не працює
Krunal Shah

3
Що таке стиль користувача?
Marecky

Про помилку, з якою ви зв’язувались, повідомлялося 17 років тому і досі не призначено. Я думаю, що можна впевнено сказати, що FF ніколи не підтримає приховування нативної смуги прокрутки.
Стерлінг Борн

-2
@-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;
    }
}

5
Ви надали кодову крапку з малою кількістю інформації, яка описує, що вона робить або як це робить.
Джош Хабдас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.