Scrollbar no Firefox

Por: Henrique C. Pereira

Publicado em Monday 16 October 2006 às 13:17

Categoria: HTML/CSS/JScript

Uma das coisas que eu mais odeio no Firefox é o fato de a barra de rolagem (scrollbar) vertical não aparece por default mesmo quando não há conteúdo para dar rolagem, como é no Internet Explorer. Ou seja, quando não há conteúdo para rolagem vertical, o Firefox não exibe e não ocupa o espaço que será utilizado quando o conteúdo for suficiente para dar rolagem. Isso causa um efeito de realinhar o conteúdo horizontalmente toda vez que você vai pra uma página em que dá a rolagem vertical. Isso acontece por que o Firefox coloca essa scrollbar no mesmo espaço reservado para o site. O resultado é um site dançante que se realinha (principalmente sites centralizados) toda vez que a barra de rolagem vertical aparece ou desaparece.

Para evitar isto, existe uma forma de dizer ao Firefox por CSS, que mesmo quando o conteúdo vertical não é suficiente para dar rolagem, a barra deveria existir assim mesmo, só que esmaecida. Para isso basta colocar a seguinte regra no início da sua folha de estilos:


  html {
     overflow: -moz-scrollbars-vertical;
  }

Se você for experto já percebeu que isso é um código proprietário do Mozilla Firefox e que não funciona (e nem faz sentido) pra nenhum outro browser. Eu encontrei isso navegando nas documentações do Firefox . Sim, sua folha de estilos não vai passar no validador da W3C. Não, eu sinceramente não me importo em não ter minha folha de estilos validada. O único validador que eu utilizo é o Tidy e somente quando eu suspeito que tem algo de errado no meu CSS. Daí ele me ajuda a encontrar.

Este assunto de validar a folha de estilos fica pra um próximo post. De qualquer maneira esta regrinha funciona perfeitamente no Firefox impedindo com que seu site se realinhe toda vez que o conteúdo der rolagem vertical.

Comentários dos leitores

Este artigo possui 47 comentários

  1. Chan Monday 16 October 2006 às 10:33

    Verdade !!! é muito ruim esse lance do scroll, valeu a dica vai ser bem útil pra mim… brigadao

  2. Thiago Machado #1° Monday 16 October 2006 às 10:38

    boa essa!!

    e eu tb não me importo e uso tidy

    afinal, produção em série é oq liga. (desde que bem treinado)

    abraço CADE A VERSAO PRA IMPRESSÃO POMBAS ??

    hehehe

  3. Ariel #2° Monday 16 October 2006 às 11:33

    muito bom, vlw!

  4. Christiano Milfont #3° Monday 16 October 2006 às 11:36

    Henrique, mas aí não caimos no mesmo problema que existia? ter que usar uma especificação proprietária?

    se por algum motivo o firefox um dia chegasse a ser supremacia como o IE foi… estaríamos fazendo o que fazem com o IE hoje, não?

    até hoje enfrento sites que so funcionam no IE, aqui onde trabalho tem um sistema que resolvemos nem deixar abrir em outro browser enquanto não consertarem, para evitar tanto chamado…

    sei que uma marcação ou uma tag não provocaria um crash, mas estaríamos abrindo a porta para voltar toda a tosqueira que se fazia, afinal princípios são princípios e nunca devem ser relegados…

  5. Alenônimo #4° Monday 16 October 2006 às 11:42

    Parei de validar estritamente os documentos no W3C quando percebi que seus validadores não são lá muito válidos. Vale o bom senso nessas horas.

    A sugestão realmente é muito boa.

  6. Carlos Eduardo #5° Monday 16 October 2006 às 14:06

    Sei lá… Nunca me incomodei com esse lance da barra de rolagem.

  7. Alexandre Fugita #6° Monday 16 October 2006 às 14:08

    Engraçado, eu acho exatamente o contrário… ficava incomodado com a barra no IE qdo não era necessária…

  8. Rafael Dourado #7° Monday 16 October 2006 às 15:13

    O próprio tempo de transição de uma página a outra já corta o efeito de mudança de posicionamento.

    Isso só me incomoda quando é uma aplicação Ajax como o Netvibes. Quando mudo de uma aba com poucos feeds para uma com muitos o conteúdo se desloca um pouco.

    Cuidado com essa história de validar não é importante porque pelo visto tem muita gente com um pensamento binário de ou valida tudo ou não valida nada.

  9. Rodrigo #8° Monday 16 October 2006 às 15:58

    Nunca tinha reparado nesse detalhe do firefox! Mesmo porque os portais que crio são todos alinhados à esquerda (padrão da agência que trabalho). Mas vou ficar atento à isso. Valeu pela dica!

  10. Rafael Arcanjo #9° Monday 16 October 2006 às 16:42

    Se eu entendi direito, concordo com o Alexandre Fugita.

  11. Shino #10° Monday 16 October 2006 às 16:49

    Isso faz tanta diferença assim? o.o

  12. Zephon #11° Monday 16 October 2006 às 18:02

    No Firefox 2.0 RC3 isso não acontece… Sendo que dependendo da aplicação, não é necessário colocar este código no CSS do site mas em Arquivos de programasMozilla Firefox
    eshtml.css a não ser que você esteja desenvolvendo um site que mude sua estrutura drasticamente e uma página a outra e queira evitar este problema.

  13. Jader Rubini #12° Monday 16 October 2006 às 18:08

    Ótima dica.

    Eu também detesto isso. Principalmente em formulários.

  14. Cristiano Dias #13° Monday 16 October 2006 às 18:10

    Esse cara é bom.

  15. Eugenio Grigolon #14° Tuesday 17 October 2006 às 07:26

    Ótima dica, mas como disseram #6 e #7, acho que não é um problema tão grande assim ter ou não a barra de rolagem.

    Mas valeu pela dica ;)

  16. Regionaldo Sousa #15° Tuesday 17 October 2006 às 08:58

    Concordo com o Christiano Milfont.

    Se todos nós tivermos que fazer isso em todos os sites, só para o mozilla, de que adiantaram as brigas para o IE seguir os padrões?

  17. Ivo Gomes #16° Tuesday 17 October 2006 às 10:31

    A minha opinião é que o espaço no browser é mais importante do que a barra de rolagem. Por isso acho que não faz sentido estar a remover espaço à página só porque "não gosto" de ver a barra de rolagem a aparecer e a desaparecer (com o consequente realinhamento da página). Nos dias que correm, o espaço disponível no ecrã é importante demais para ser desperdiçado dessa forma.

    Faz todo o sentido não haver barra nenhuma se tal não justifique a sua presença. É uma questão de aproveitamento de espaço ao máximo. No Safari e Opera também acontece o mesmo. Aliás, só o IE é que tem esse comportamento de mostrar sempre a barra de rolagem!

  18. JOrge Wagner #17° Tuesday 17 October 2006 às 14:00

    Experto? Expert e esperto? ;)

  19. Pingback: Scrollbar no Firefox « [REF]

  20. Ricardo Seiji #18° Wednesday 18 October 2006 às 06:52

    Concordo que não seja um problema tão grande, mas é um detalhe que incrivelmente todo cliente (pelo menos, os que já tive) nota. E isso torna-se ainda mais incômodo em sistemas com interface web.

    Interessante a solução a pesar de concordar que desse modo podemos cair na mesma questão do uso de códigos propietários no IE.

  21. Pingback: Links comentados via del.icio.us - 3 » Japs

  22. Samuel Guilherme #19° Wednesday 18 October 2006 às 15:27

    Eu nunca me importei com a barra de rolagem. Pra ser sincero até gosto de ela não aparecer quando não há conteúdo a ser "rolado". Aí vai o gosto de cada um.

  23. Anderson Sá #20° Thursday 19 October 2006 às 09:57

    Solução simples e boa!

    É muito estranho, de repente o scroll sumir e aparecer. Incomoda bastante, principalmente em sites que possuem páginas curtas e longas verticalmente.

  24. Manoel Netto #21° Tuesday 24 October 2006 às 08:18

    Como já foi disposto, eu já me incomodei muitas vezes com o inverso, o fato da barra no IE ocupar o espaço da tela que eu gostaria de usar ao máximo, em hotsites por exemplo. Na agência onde trabalhava, rolavam muitos hotsites de lançamentos imobiliários, em Flash, retangulares com um anúncio, e aquela "barrinha esmaecida" do IE sempre era questionada pelo cliente: "Não tem como tirar essa barrinha, já que não tem rolagem?" … SEMPRE!

    Passei a apresentar os hotsites no FF e aproveitei pra catequisá-lo como usuário. ;-)

  25. Luis Vulcanis #22° Friday 03 November 2006 às 09:27

    Cada um cada um… Sempre odiei a barra que o explorer coloca mesmo quando não há conteúdo. E uma das coisas que eu gosto no fire-fox é justamente o fato de ele não colocar a barra…

    acabo usand overflow: auto; no IE pra tirar a barra…

    é a vida… uns gostam de avermelho e outros de grená…

  26. Anderson Cust&oacute #23° Saturday 04 November 2006 às 01:40

    Na verdade não precisa usar o seletor HTML pode ser o body mesmo!

  27. Genima Pina #24° Monday 06 November 2006 às 11:50

    Antes tarde do que nunca…

    Mas vc pode simplesmente usar:

    html {height:100%; margin-bottom:1px;/* Não oculta a barra de rolagem em Firefox */}

  28. Mau #25° Tuesday 07 November 2006 às 21:42

    Ja pensou o dia que vc ver o seu site no Firefox rodando no Linux, vais ter um ataque de nervos…

  29. Vinícius Cama #26° Thursday 25 January 2007 às 16:44

    Boa tarde Henrique! Eu tenho um problema com a barra de rolagem um pouco diferente. Possuo um site na internet (da minha banda) no qual uso um script para editar as cores da "scrollbar":

    body { scrollbar-face-color: #FFFFFF;

    scrollbar-darkshadow-color: #000000;

    scrollbar-highlight-color: #000000;

    scrollbar-base-color: #000000;

    scrollbar-track-color: #000000;}

    Este script funciona normalmente no meu Internet Explorer, mas o FireFox recusa a entender esta linha de comando. Existe algum código similar que seja interpretado corretamente pelo FireFox, ou alguma maneira de adaptar este que eu uso atualmente?

    Site: http://www.fallover.com.br
    Valeu cara, um abraço!

  30. Pingback: Blog HotSync » Coleção dicas CSS

  31. Ricardo #27° Monday 25 June 2007 às 18:09

    Solução dos problemas (link)
    http://www.hesido.com/web.php?page=customscrollba

  32. Everton Fraga #28° Wednesday 18 July 2007 às 01:15

    Boa! essa semana mesmo, estava tendo problemas com isto!

    mas ao invés de xingar o FF, eu xinguei o IE! heheheh

  33. Leandro #29° Wednesday 22 August 2007 às 10:00

    Gostei, mas vc sabe como faz pra mudar a cor pro firefox ? Por css eu n estou conseguindo.

  34. Matheus de Oliveira #30° Friday 31 August 2007 às 00:38

    Muito boa a dica…mas…

    Eu já havia reparado nisso e encontrei uma outra forma, que eu considero melhor…

    Sabemos que barra de rolagem que vemos está no elemento BODY (ou HTML, não sei ao certo), e que o overflow coloca, ou tira uma barra de rolagem num elemento, então é só usá-lo:

    body{

    overflow:scroll;

    }

    E o melhor, é validade pela W3C…O único problema é que também coloca a barra horizontal, pra resolver isso dá pra usar o overflow-y (este não é válidado pela W3C, mas é aceito por mais de um navegador, pelo menos o IE e o FF):

    body{

    overflow-y:scroll;

    }

    Bom, esta é uma solução que eu encontrei antes de ver este artigo, e prefiro, pois defendo a entrada do overflow-x e overflow-y como um atributo válido, já que é bem útil…

    E pra galera desatenta aí em cima, alterar as cores da barra de rolagem, é coisa do IE e só funfa nele mesmo…

    abços

  35. Matheus de Oliveira #31° Friday 31 August 2007 às 01:06

    Gente, desculpem o erro acima, é no elemento HTML que deve ser colocado, e não no body (se não vão enfrentar problemas com o IE, pra variar)…E sendo assim acho que confirmou a minha dúvida, a barra se encontra no HTML e não no BODY…

    Ah, no final ficaria:

    html{

    overflow:scroll;

    }

    ou:

    html{

    overflow-y:scroll;

    }

  36. Pingback: Osny Santos Netto » Blog Archive » Barra de rolagem vertical fixa no Firefox

  37. José Lara #32° Thursday 25 October 2007 às 19:19

    Ou, o firefox não é ruim, so precisa que os códigos estejam certos.

    Valew pela dica. Abraço

  38. Pedro #33° Thursday 01 November 2007 às 12:07

    Legal, eu preferi usar:

    html { overflow: hidden; }

    só para parecer menos hack haha

    isso desativa completamente o scroll, para páginas flash ou pequenas..

  39. Pércoles Tiag #34° Tuesday 06 November 2007 às 09:44

    DE: Pércoles

    PARA: Matheus de Oliveira

    Cara…. overflow-x e overflow-y é validado sim… Mas como CSS 3

  40. Cristiano Lagame #35° Tuesday 11 December 2007 às 01:00

    Matéria velha, mas a utilidade dela é pra sempre!

    Me incomodo com essa barra sumindo, achei uma ótima sacada!

    Mas acho melhor usar algumas das alternativas propostas que sejam validadas, pois por mais que eu não consiga validar tudo, pelo menos o que der pra validar já tá bom!

  41. Matheus de Oliveira #36° Tuesday 12 February 2008 às 08:08

    @Pedro,

    Seria melhor então usar:

    html{overflow:auto}

    Pois da forma como fez, a barra não aparece "nunca", mesmo que precise dela (se o conteúdo sumir). Com o "auto" ela não aparece, ao menos que necessite, e funciona perfeitamente no IE e nos browsers de verdade…flw

  42. Leyrson #37° Tuesday 29 April 2008 às 08:59

    prefiro

    overflow-y:scroll -moz-scrollbars-vertical;

    caso queira esconder vertical .. de um height e overflow-x:hidden;

    aconselho que leiam mais em:
    http://www.w3.org/TR/css3-box/#overflow

    grande abraço

  43. ana #38° Monday 24 November 2008 às 23:01

    Muito bom! Tava aqui há horas tentando descobrir isso.. Eita bug do firefox. Valeu!

  44. Gabriel Ferrari #39° Wednesday 17 March 2010 às 13:38

    Se quiserem fazer de uma forma válida pelos padrões W3C e funcione nos demais navegadores além do FireFox basta fazer isso:

    body{

    overflow: scroll;

    }

  45. Gabriel Ferrari #40° Tuesday 13 April 2010 às 06:20

    Só para corrigir:

    html{

    overflow: scroll;

    }

  46. Pingback: Coleção dicas CSS - Blog Área Local

  47. Leandro #41° Saturday 13 November 2010 às 07:46

    Pessoal, muitos aqui não se preocupam com validação w3c, então pq se preocupar com o padrão que o navegador usa ou deixa de usar? Não acham contraditório? Que padrão acham que o Firefox usa? Ele usa o padrão que vc ignora em validar no w3c. Vamos ter um pouco de coerência galera!

Deixe seu comentário:

Observação: Todos os campos obrigatórios estão marcados com um asterisco (*).

  1. As seguintes tags podem ser inseridas nos comentários: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Sobre este blog

Meu nome é Henrique C. Pereira e o Revolução Etc é o meu blog pessoal. Eu trabalho com design de interfaces, dispositivos móveis, planejamento de soluções web, arquitetura da informação, programação de interfaces, acessibilidade, padrões web, e-commerce e outras coisas relacionadas.
Leia mais sobre o autor.