Barra di scorrimento CSS personalizzata per Firefox


313

Voglio personalizzare una barra di scorrimento con CSS.

Uso questo codice CSS WebKit, che funziona bene con Safari e Chrome:

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

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

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

Come posso fare la stessa cosa in Firefox?

So che posso farlo facilmente usando jQuery, ma preferirei farlo con CSS puro se è fattibile.

Sarei grato per il parere di un esperto!


1
Si prega di condividere come è possibile farlo utilizzando jQuery. Sono di fronte allo stesso problema, ma ho usato CSS per risolverlo per Webkit. Tuttavia, Firefox pone un problema che la soluzione jQuery potrebbe essere in grado di aiutare.
iGbanam,

1
Consiglio di usare il plugin jQuery jscrollpane.
Dimitri Vorontzov,

Si è verificato un problema con jScrollPane in Firefox. jScrollPane funziona perfettamente in Chrome ma in Firefox hai una barra di scorrimento del sistema vuota a destra della barra di scorrimento jScrollPane. Dovrebbe esserci solo una barra di scorrimento
iGbanam,

1
Non vero. Se ce l'hai, hai fatto qualcosa di sbagliato da qualche parte.
Dimitri Vorontzov,

Risposte:


239

A partire dalla fine del 2018, ora è disponibile una personalizzazione limitata in Firefox!

Vedi queste risposte:

E questo per informazioni di base: https://bugzilla.mozilla.org/show_bug.cgi?id=1460109


Non esiste un equivalente di Firefox ::-webkit-scrollbare amici.

Dovrai attenersi a JavaScript.

Molte persone vorrebbero questa funzione, vedi: https://bugzilla.mozilla.org/show_bug.cgi?id=77790


Per quanto riguarda le sostituzioni JavaScript, puoi provare:


2
Grazie, ThirtyDot. Una domanda però: che dire di -moz-aspect: scrollbartrack-vertical - e di altre estensioni CSS correlate? Forse possono essere usati in qualche modo?
Dimitri Vorontzov,

2
No. Sfortunatamente, nessuno dei possibili valori per -moz-appearancepuò aiutare. "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."- otterrai solo una barra di scorrimento nativa.
trenta,

15
Nel caso in cui chiunque legga questo abbia bisogno di una soluzione pratica, ho finito per usare il plugin jQuery jscrollpane.
Dimitri Vorontzov,

1
@JacquesMathieu, capisco cosa intendi. Sebbene ciò non sia colpa di Baron, se scarico la pagina e prevengo l'inizializzazione di Baron, il bug si verifica comunque. Quindi sembra che Chrome sia in colpa qui.
thephpdev,

3
drafts.csswg.org/css-scrollbars-1 è l'inizio della fase 1 della specifica, ma è abilitato in Firefox Nightly ora pronto all'uso per impostazione predefinita.
Wegry,

53

Firefox 64 aggiunge il supporto per il progetto di specifiche CSS Barre di scorrimento modulo di livello 1 , che aggiunge due nuove proprietà di scrollbar-widthe scrollbar-colorche danno un po 'di controllo su come vengono visualizzate le barre di scorrimento.

È possibile impostare scrollbar-coloruno dei seguenti valori (descrizioni da MDN):

  • auto Rendering predefinito della piattaforma per la parte della traccia della barra di scorrimento, in assenza di altre proprietà relative al colore della barra di scorrimento.
  • dark Mostra una barra di scorrimento scura, che può essere una variante scura della barra di scorrimento fornita dalla piattaforma o una barra di scorrimento personalizzata con colori scuri.
  • light Mostra una barra di scorrimento chiara, che può essere una variante leggera della barra di scorrimento fornita dalla piattaforma o una barra di scorrimento personalizzata con colori chiari.
  • <color> <color> Applica il primo colore al pollice della barra di scorrimento, il secondo alla traccia della barra di scorrimento.

Si noti che darke i lightvalori non sono attualmente implementati in Firefox .

note macOS:

Le barre di scorrimento semitrasparenti che si nascondono automaticamente che sono l'impostazione predefinita macOS non possono essere colorate con questa regola (scelgono comunque il proprio colore contrastante in base allo sfondo). Vengono colorate solo le barre di scorrimento visualizzate permanentemente (Preferenze di Sistema> Mostra barre di scorrimento> Sempre).

Demo visiva:

È possibile impostare scrollbar-widthuno dei seguenti valori (descrizioni da MDN):

  • auto La larghezza della barra di scorrimento predefinita per la piattaforma.
  • thin Una variante di larghezza della barra di scorrimento sottile su piattaforme che forniscono tale opzione o una barra di scorrimento più sottile rispetto alla larghezza della barra di scorrimento della piattaforma predefinita.
  • none Nessuna barra di scorrimento visualizzata, tuttavia l'elemento sarà comunque scorrevole.

È inoltre possibile impostare un valore di lunghezza specifico, in base alle specifiche. Entrambe thine una lunghezza specifica potrebbero non fare nulla su tutte le piattaforme e ciò che fa esattamente è specifico della piattaforma. In particolare, Firefox non sembra supportare attualmente un valore di lunghezza specifico ( questo commento sul loro bug tracker sembra confermarlo ). Il thinkeywork sembra comunque ben supportato, almeno con macOS e Windows.

Probabilmente vale la pena notare che l'opzione del valore di lunghezza e l'intera scrollbar-widthproprietà vengono prese in considerazione per la rimozione in una bozza futura e, in tal caso, questa particolare proprietà potrebbe essere rimossa da Firefox in una versione futura.

Demo visiva:


Grazie per questa risposta Ho aggiornato la mia risposta accettata per promuovere questa (e l'altra risposta pertinente) in modo che le persone abbiano maggiori probabilità di vederla.
tredici

1
Questo essenzialmente duplica la risposta di Luca di tre settimane prima.
Josh Habdas,

@JoshHabdas Quella risposta non contiene quasi altrettante informazioni sulla compatibilità o sull'utilizzo. Ho creato questa risposta perché l'altra risposta non aveva le informazioni importanti che stavo cercando.
Alexander O'Mara,

1
Potresti dare loro credito, suggerire un feedback o considerare la modifica della loro risposta.
Josh Habdas il

2
@JoshHabdas Bene, 5 persone l'hanno già trovato utile e contiene informazioni non reperibili in nessun'altra parte del Web, quindi non sono d'accordo.
Alexander O'Mara

43

Posso offrire un'alternativa?

Nessuna sceneggiatura, solo stili CSS standardizzati e un po 'di creatività. Risposta breve: mascherare parti della barra di scorrimento del browser esistente, il che significa che si conserva tutta la sua funzionalità.

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

Per la demo e una spiegazione un po 'più approfondita, controlla qui ...

jsfiddle.net/aj7bxtjz/1/


7
Questo non risponde alla domanda, sfortunatamente. Dimitri sta provando a modellare la barra di scorrimento, non a nasconderla.
stvnrynlds,

14
Sono passati 4 anni (ne sono consapevole) quindi sono sicuro che ormai abbia già fatto qualcosa. Ma l'argomento è ancora rilevante oggi - mentre altri browser consentono un tipo di modifica "illegale" delle barre di scorrimento, FF no. Ecco perché ho deciso di pubblicarlo e il risultato del front-end è la barra di scorrimento in stile visivo, indipendentemente dal fatto che il modo in cui farlo sia nasconderne una parte.
Tomaz,

adoro questa soluzione ad eccezione di tutto il markup extra con posizionamento assoluto (rende le cose di dimensioni variabili un incubo) e in più non puoi davvero cambiare lo stile, stai semplicemente mascherando / nascondendo elementi dello scroller esistente - peccato se voglio una barra verde!
RozzA

3
sì, dopo quattro anni, non si tratta di rispondere alla domanda del PO tanto quanto sta contribuendo alla comunità.
tmthyjames,

3
L'essenza del problema è che le soluzioni fornite da alcuni motori di rendering non sono standard. Questa è la domanda che meglio risponde alle mie preoccupazioni e questa è la risposta che cercavo.
Filip Dupanović,

36

Ho pensato di condividere le mie scoperte nel caso in cui qualcuno stia considerando un plugin JQuery per fare il lavoro.

Ho provato la barra di scorrimento personalizzata di JQuery . È piuttosto elegante e fa uno scorrimento regolare (con inerzia di scorrimento) e ha un sacco di parametri che puoi modificare, ma alla fine è stato un po 'troppo intenso per la CPU per me (e aggiunge una buona dose al DOM).

Ora sto provando Perfect Scrollbar . È semplice e leggero (6KB) e finora sta facendo un lavoro decente. Non richiede affatto CPU (per quanto ne so) e aggiunge molto poco al DOM. Ha solo un paio di parametri da modificare (wheelSpeed ​​e wheelPropagation), ma è tutto ciò di cui ho bisogno e gestisce bene gli aggiornamenti del contenuto a scorrimento (come caricare le immagini).

PS Ho dato una rapida occhiata a JScrollPane, ma @simone ha ragione, ora è un po 'datato e un PITA.


3
C'è anche l'emulatore di scorrimento del trackpad : è ciò che utilizza twitch.tv.
forivall

1
La barra di scorrimento perfetta è davvero ottima. Dopo aver esaurito molte altre opzioni, ho scoperto che era la soluzione migliore. Grazie per averlo suggerito.
Leonard Teo,

Anche nanoScroller è davvero buono e relativamente snello. jamesflorentino.github.io/nanoScrollerJS Opposto ai pesanti plugin JS, questo nasconde semplicemente lo scroller nativo e mostra uno scroller alternativo usando l'evento nativo 'scroll'
Danny R

1
ho evitato tutte le soluzioni jquery, dal momento che sono tutte in ritardo su macchine più lente o macchine sotto stress, ma PS sembra un vincitore
RozzA,

31

Da Firefox 64 , è possibile utilizzare nuove specifiche per un semplice stile della barra di scorrimento ( non completo come in Chrome con prefissi del fornitore ).

In questo esempio è possibile vedere una soluzione che combina regole diverse per indirizzare sia Firefox che Chrome con un risultato finale simile (non uguale) (ad esempio utilizzare le regole di Chrome originali):

Le regole chiave sono:

Per Firefox

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

Per 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;
}

Tieni presente che, rispetto alla tua soluzione, è possibile utilizzare anche le regole di Chrome più semplici come le seguenti:

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

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

Infine, per nascondere le frecce nelle barre di scorrimento anche in Firefox, attualmente è necessario impostarlo come " sottile " con la seguente regolascrollbar-width: thin;


1
Sembra che IE 5.5 possa aver ottenuto qualcosa subito dopo tutto. :)
Josh Habdas il


0

Funziona in stile utente e sembra non funzionare nelle pagine Web. Non ho trovato la direzione ufficiale di Mozilla su questo. Anche se potrebbe aver funzionato ad un certo punto, Firefox non ha supporto ufficiale per questo. Questo bug è ancora aperto 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;
}

consultare http://codemug.com/html/custom-scrollbars-using-css/ per i dettagli.


2
ho provato lo stesso come hai scritto, ma non funziona per il mio in FF, controlla jsfiddle.net/gGbkY/1 Mi sto perdendo qualcosa?
Satinder singh,

Funziona in stile utente e sembra non funzionare nelle pagine Web. Non ho trovato la direzione ufficiale di Mozilla su questo.
Ipirlo,

1
controlla lo stesso link: non funziona più
Krunal Shah,

3
Qual è lo stile dell'utente?
Marecky,

Il bug che hai collegato è stato segnalato 17 anni fa e non è stato ancora assegnato. Penso che sia sicuro affermare che FF non supporterà mai il nascondimento delle barre di scorrimento native.
Sterling Bourne,

-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
È stato fornito a un BLOB di codice informazioni poco o nulla che descrivono cosa fa o come lo fa.
Josh Habdas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.