CSS Scrollbar Customizada
Gere CSS de scrollbar customizada compatível com WebKit e Firefox. Ajuste cor, largura e cantos arredondados, veja o resultado e copie o código pronto.
CSS
—
Customizando scrollbars no Chromium, WebKit e Firefox
Scrollbars são um dos últimos elementos de UI que os navegadores ainda pintam com os defaults do sistema operacional — e um dos primeiros que designers querem personalizar. Existem duas APIs paralelas: as pseudo-classes mais antigas com prefixo WebKit/Blink, que funcionam em Chrome, Edge, Safari e Opera, e o novo CSS Scrollbars Module (padronizado pelo W3C) implementado no Firefox e em rollout progressivo nos demais. Projetos modernos usam os dois lado a lado para cobertura completa.
A API padronizada são duas propriedades:
.scrollable {
scrollbar-width: thin; /* auto | thin | none */
scrollbar-color: #4f46e5 #f3f4f6; /* thumb track */
}
O WebKit/Blink oferece controle mais fino via pseudo-elementos:
.scrollable::-webkit-scrollbar { width: 8px; height: 8px; }
.scrollable::-webkit-scrollbar-track { background: #f3f4f6; }
.scrollable::-webkit-scrollbar-thumb { background: #4f46e5; border-radius: 4px; }
.scrollable::-webkit-scrollbar-thumb:hover { background: #4338ca; }
Evitando layout shift com scrollbar-gutter
Quando o conteúdo cresce além da viewport e a scrollbar aparece, a área útil encolhe 15-17px — um reflow desagradável. A propriedade scrollbar-gutter: stable (Chrome 94+, Firefox 97+) reserva o espaço de antemão para o layout nunca pular. Combine com stable both-edges para manter simetria visual em idiomas RTL.
Convenções de plataforma com as quais não brigar
O macOS oculta scrollbars quando o trackpad está ocioso e só as mostra durante o scroll. Tentar forçar scrollbar permanente lá deixa o site com cara de não-nativo. iOS e Android renderizam scrollbars como overlays efêmeros — suas regras ::-webkit-scrollbar são amplamente ignoradas no mobile, então foque o design visual no desktop. Windows tradicionalmente mostrava scrollbars persistentes, mas o Windows 11 também caminhou para auto-hide.
Anti-padrões e acessibilidade
- Scrollbars invisíveis (
scrollbar-width: none) eliminam a pista visual de que a área é rolável. Se precisar, adicione um fade com mask-image nas bordas ou um indicador "mais". - Finas demais para arrastar. Usuários com limitação motora precisam de alvo perto do mínimo de 24x24 CSS pixels sugerido pelo WCAG 2.5.8 Target Size. Uma scrollbar de 4px é estilosa, mas impraticável.
- Track e thumb na mesma cor — parece minimalista mas mata a affordance. Mantenha pelo menos 3:1 de contraste entre thumb e track, conforme WCAG 1.4.11.
- Cores chamativas em todas as scrollbars — funciona numa hero section, cansa numa tabela de dados.
Estilo Apple Music: overlay que cresce no hover
Um design popular é uma scrollbar fina ociosa que cresce no hover. Com WebKit:
.scrollable::-webkit-scrollbar { width: 6px; transition: width .2s; }
.scrollable:hover::-webkit-scrollbar { width: 12px; }
Perguntas frequentes
Preciso usar as propriedades do Firefox e os pseudo-elementos do WebKit ao mesmo tempo? Sim, até chegar a paridade. Os navegadores ignoram regras que não entendem, então escrever os dois blocos é seguro e dá cobertura completa em todos os engines.
Como esconder a scrollbar mas manter o scroll funcionando? Use scrollbar-width: none (Firefox) e ::-webkit-scrollbar { display: none } (Chrome/Safari). Scroll por roda, toque e teclado continuam funcionando. Lembre de adicionar alguma affordance visual de scroll.
Posso estilizar a scrollbar horizontal de forma diferente? Sim — alvo ::-webkit-scrollbar:horizontal e ::-webkit-scrollbar:vertical separadamente. O Firefox não expõe hooks de orientação; o mesmo scrollbar-color vale para as duas.
Devo usar um polyfill JavaScript como SimpleBar? Só se precisar de overlay scroll em toda plataforma, independente do setting do SO. Para a maioria dos sites, a abordagem CSS é suficiente, não adiciona peso e mantém acessibilidade por padrão.
Ferramentas Relacionadas
CSS Cor de Seleção
Gere o CSS de ::selection para personalizar a cor do texto selecionado no seu site. Escolha as cores de fundo e texto, veja a prévia e copie o código pronto.
CSS Clip-Path Estrela
Gere um CSS clip-path em formato de estrela com o número de pontas que você quiser. Crie estrelas perfeitas para badges e selos e copie o código.
Gerador CSS Padrão Xadrez (Checker)
Gere um padrão xadrez (checkerboard) em CSS puro com gradientes, sem usar imagens. Ajuste cores e tamanho, veja a prévia e copie o código pronto para o seu site.