Barra de rolagem CSS personalizada para Firefox


313

Eu quero personalizar uma barra de rolagem com CSS.

Eu uso esse código CSS do WebKit, que funciona bem para o Safari e o Chrome:

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

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

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

Como posso fazer a mesma coisa no Firefox?

Eu sei que posso fazê-lo facilmente usando jQuery, mas eu preferiria fazê-lo com CSS puro, se possível.

Ficaria grato pelo conselho de alguém!


1
Compartilhe como você pode fazer isso usando o jQuery. Estou com o mesmo problema, mas usei CSS para corrigi-lo no Webkit. No entanto, o Firefox apresenta um problema que sua solução jQuery pode ajudar.
IGbanam

1
Eu recomendo usar o plugin jscrollpane jQuery.
Dimitri Vorontzov 26/07/12

Há um problema com o jScrollPane no Firefox. O jScrollPane funciona perfeitamente no Chrome, mas no Firefox você tem uma barra de rolagem vazia do sistema à direita da barra de rolagem do jScrollPane. Deve haver apenas uma barra de rolagem
iGbanam

1
Não é verdade. Se você tem isso, você fez algo errado em algum lugar.
Dimitri Vorontzov 19/08/2012

Respostas:


239

A partir do final de 2018, agora existe uma personalização limitada disponível no Firefox!

Veja estas respostas:

E isso para obter informações básicas: https://bugzilla.mozilla.org/show_bug.cgi?id=1460109


Não há Firefox equivalente a ::-webkit-scrollbare amigos.

Você terá que ficar com o JavaScript.

Muitas pessoas gostariam desse recurso, consulte: https://bugzilla.mozilla.org/show_bug.cgi?id=77790


No que diz respeito às substituições de JavaScript, você pode tentar:


2
Obrigado, ThirtyDot. Porém, uma pergunta: e quanto a -moz-aparecimento: scrollbartrack-vertical - e outras extensões CSS relacionadas? Talvez eles possam ser usados ​​de alguma maneira?
Dimitri Vorontzov 29/05

2
Não. Infelizmente, nenhum dos valores possíveis -moz-appearancepode ajudar. "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."- você apenas terá uma barra de rolagem nativa.
thirtydot

15
Caso alguém que esteja lendo isso precise de uma solução prática, acabei usando o plugin jscrollpane jQuery.
Dimitri Vorontzov

1
@JacquesMathieu, entendo o que você quer dizer. Embora isso não seja culpa do Baron, se eu baixar a página e impedir que o barão seja inicializado, o bug ainda ocorre. Portanto, parece que o Chrome está com falha aqui.
precisa saber é o seguinte

3
drafts.csswg.org/css-scrollbars-1 é o início do estágio 1 da especificação, mas está ativado no Firefox Nightly agora por padrão.
Wegry #

53

O Firefox 64 adiciona suporte ao rascunho de especificação CSS Scrollbars Module Level 1 , que adiciona duas novas propriedades de scrollbar-widthe scrollbar-colorque dão algum controle sobre como as barras de rolagem são exibidas.

Você pode definir scrollbar-colorum dos seguintes valores (descrições do MDN):

  • auto Renderização de plataforma padrão para a parte da faixa da barra de rolagem, na ausência de outras propriedades de cores relacionadas à barra de rolagem.
  • dark Mostrar uma barra de rolagem escura, que pode ser uma variante escura da barra de rolagem fornecida pela plataforma ou uma barra de rolagem personalizada com cores escuras.
  • light Mostre uma barra de rolagem leve, que pode ser uma variante leve da barra de rolagem fornecida pela plataforma ou uma barra de rolagem personalizada com cores claras.
  • <color> <color> Aplica a primeira cor ao polegar da barra de rolagem e a segunda à faixa da barra de rolagem.

Observe que os valores darke não estão atualmente implementados no Firefox .light

notas do macOS:

As barras de rolagem semi-transparentes que ocultam automaticamente e que são o padrão do macOS não podem ser coloridas com esta regra (elas ainda escolhem sua própria cor contrastante com base no plano de fundo). Somente as barras de rolagem permanentemente exibidas (Preferências do sistema> Mostrar barras de rolagem> Sempre) são coloridas.

Demonstração visual:

Você pode definir scrollbar-widthum dos seguintes valores (descrições do MDN):

  • auto A largura da barra de rolagem padrão para a plataforma.
  • thin Uma variante fina da largura da barra de rolagem nas plataformas que fornecem essa opção ou uma barra de rolagem mais fina que a largura da barra de rolagem padrão da plataforma.
  • none Nenhuma barra de rolagem é exibida; no entanto, o elemento ainda pode ser rolado.

Você também pode definir um valor de comprimento específico, de acordo com as especificações. Tanto o thincomprimento quanto o comprimento específico podem não fazer nada em todas as plataformas, e o que exatamente ele faz é específico da plataforma. Em particular, o Firefox atualmente não parece oferecer suporte a um valor específico de comprimento ( esse comentário no rastreador de erros parece confirmar isso ). No thinentanto, o trabalho com as teclas parece ser bem suportado, com pelo menos suporte para macOS e Windows.

Provavelmente, vale a pena notar que a opção de valor do comprimento e toda a scrollbar-widthpropriedade estão sendo consideradas para remoção em um rascunho futuro e, se isso acontecer, essa propriedade específica poderá ser removida do Firefox em uma versão futura.

Demonstração visual:


Obrigado por esta resposta. Atualizei minha resposta aceita para promover essa (e a outra resposta relevante) para que as pessoas tenham mais probabilidade de vê-la.
thirtydot

1
Isso basicamente duplica a resposta de Luca das três semanas anteriores.
21719 Josh Habdas

@ JoshHabdas Essa resposta não contém quase tanta informação de compatibilidade ou uso. Eu criei esta resposta porque a outra resposta não tinha as informações importantes que eu estava procurando.
Alexander O'Mara

1
Você pode dar crédito a eles, sugerir comentários ou considerar editar a resposta deles.
21719 Josh Habdas

2
@ JoshHabdas Bem, 5 pessoas já o acharam útil e contém informações não encontradas em nenhum outro lugar da web, então eu discordo.
Alexander O'Mara

43

Posso oferecer uma alternativa?

Sem scripts, apenas estilos CSS padrão e um pouco de criatividade. Resposta curta - mascarar partes da barra de rolagem do navegador existente, o que significa que você mantém toda a sua funcionalidade.

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

Para demonstração e uma explicação um pouco mais aprofundada, confira aqui ...

jsfiddle.net/aj7bxtjz/1/


7
Infelizmente, isso não responde à pergunta. Dimitri está tentando estilizar a barra de rolagem, não a oculta.
Stvnrynlds 26/05

14
Isso foi há 4 anos (eu sei disso), então eu tenho certeza que ele já fez algo até agora. Mas o tópico ainda é relevante hoje - enquanto outros navegadores permitem algum tipo de modificação "ilegal" das barras de rolagem, o FF não. É por isso que decidi publicá-lo. E o resultado do front-end é denominar visualmente a barra de rolagem, independentemente do fato de que a maneira de fazer isso oculte parte dela.
Tomaz

Eu amo essa solução, exceto por toda a marcação extra com posicionamento absoluto (torna coisas de tamanho variável um pesadelo) e você não pode realmente mudar o estilo, você está simplesmente ocultando / ocultando elementos do scroller existente - muito ruim se eu quiser uma barra verde!
RozzA

3
sim, depois de quatro anos, não se trata de responder à pergunta do OP, mas de contribuir para a comunidade.
tmthyjames

3
A essência do problema é que as soluções fornecidas por alguns mecanismos de renderização não são padrão. Essa é a pergunta que melhor atende às minhas preocupações e esta é a resposta que eu estava procurando.
Filip Dupanović

36

Eu pensei em compartilhar minhas descobertas caso alguém esteja considerando um plugin JQuery para fazer o trabalho.

Eu dei a barra de rolagem personalizada do JQuery . É bem chique e faz rolagem suave (com inércia de rolagem) e possui vários parâmetros que você pode ajustar, mas acabou sendo um pouco intenso de CPU para mim (e adiciona uma quantidade razoável ao DOM).

Agora estou dando uma chance à Perfect Scrollbar . É simples e leve (6KB) e está fazendo um trabalho decente até agora. Não requer muita CPU (pelo que sei) e adiciona muito pouco ao seu DOM. Ele tem apenas alguns parâmetros para ajustar (wheelSpeed ​​e wheelPropagation), mas é tudo o que preciso e lida com as atualizações do conteúdo de rolagem (como carregar imagens).

PS: Eu dei uma olhada rápida no JScrollPane, mas o @simone está certo, está um pouco datado agora e é um PITA.


3
Há também emulador de rolagem do trackpad - é o que o twitch.tv usa.
Forivall

1
Barra de rolagem perfeita é realmente muito boa. Depois de esgotar muitas outras opções, achei a melhor solução. Obrigado por sugerir.
21414 Leonard Teo

O nanoScroller também é muito bom e relativamente enxuto. jamesflorentino.github.io/nanoScrollerJS oposição aos pesados plugins JS, esta simplesmente esconde o scroller nativa, e mostra um scroller alternativo utilizando a 'rolar' evento nativo
Danny R

1
Tenho evitado todas as soluções jQuery, uma vez que todos ficam em máquinas mais lentas ou máquinas sob estresse, mas PS parece com um vencedor
ROZZA

31

Desde o Firefox 64 , é possível usar novas especificações para um estilo simples na barra de rolagem ( não tão completo quanto no Chrome com prefixos de fornecedor ).

Em este exemplo é possível ver uma solução que combine regras diferentes para o endereço Firefox e Chrome com uma semelhante (não igual) resultado final (exemplo uso suas regras Chrome originais):

As principais regras são:

Para o Firefox

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

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

Observe que em relação à sua solução, é possível usar também regras mais simples do Chrome, como a seguir:

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

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

Finalmente, para ocultar setas nas barras de rolagem também no Firefox, atualmente é necessário defini-lo como " fino " com a seguinte regrascrollbar-width: thin;


1
Parece que o IE 5.5 pode ter conseguido algo certo, afinal. :)
Josh Habdas


0

Funciona no estilo do usuário e parece não funcionar em páginas da web. Eu não encontrei orientação oficial da Mozilla sobre isso. Embora possa ter funcionado em algum momento, o Firefox não possui suporte oficial para isso. Este bug ainda está aberto 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;
}

consulte http://codemug.com/html/custom-scrollbars-using-css/ para obter detalhes.


2
Eu tentei o mesmo que você escreveu, mas não está funcionando para o meu no FF, verifique o jsfiddle.net/gGbkY/1 Estou faltando alguma coisa?
Satinder singh

Funciona no estilo do usuário e parece não funcionar em páginas da web. Eu não encontrei orientação oficial da Mozilla sobre isso.
Ipirlo

1
confira o mesmo link: ele não funciona mais
Krunal Shah

3
Qual é o estilo do usuário?
Marecky

O bug que você vinculou foi relatado há 17 anos e ainda não foi atribuído. Eu acho que é seguro dizer que o FF nunca apoiará a ocultação de barras de rolagem nativas.
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
Você forneceu um blob de código com pouca ou nenhuma informação descrevendo o que faz ou como faz.
21719 Josh Habdas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.