Tornando a barra de rolagem principal sempre visível

179

Qual CSS é necessário para tornar a barra de rolagem vertical do navegador visível quando um usuário visita uma página da Web (quando a página não possui conteúdo suficiente para acionar a ativação da barra de rolagem)?

Deniz Dogan
fonte
1
Para evitar pular barras de rolagem no Windows, existe uma solução melhor .
Josh Habdas

Respostas:

333
html {
    overflow: -moz-scrollbars-vertical; 
    overflow-y: scroll;
}

Isso torna a barra de rolagem sempre visível e ativa apenas quando necessário.

Atualização: Se o descrito acima não funcionar, basta usar esta opção.

html {
    overflow-y:scroll;
}
Corv1nus
fonte
3
Você tem alguma ideia de qual versão do FF trouxe suporte overflow-y? Como parece que -moz-scrollbars-verticalé preterido em favor da overflow-ypropriedade.
Ionuţ G. Stan
Acho Internet Explorer 6.x +, Firefox 1.5+, se bem me lembro. Eu tenho usado o código acima e funciona em FF1.5-3.5.1 e IE6-8 para mim.
Corv1nus 29/07/2009
2
Existem alternativas para o "salto de página" quando determinadas páginas do seu site são muito pequenas para ter uma barra de rolagem e outras? Ou essa é a "melhor prática"? Vou ter que admitir, não vejo muitas páginas na web que não ocupam uma página inteira.
21413 Jess
2
Não tenho certeza se é uma prática recomendada, mas ter barras de rolagem em todas as páginas e ativá-las somente quando necessário, para evitar o salto de página, geralmente é uma solução aceitável. Eu tendem a preferir a barra de rolagem constante sobre o salto.
Corv1nus 26/09
1
Para aqueles (como eu) que acham o estilo htmlum pouco hackeado , observe que você pode usar o pseudo-seletor estrutural em :rootvez de html. Veja: developer.mozilla.org/pt-BR/docs/Web/CSS/:root
Rounin
31

Verifique se o estouro está definido como "rolagem" e não "automático". Dito isto , no OS X Lion, o estouro definido como "scroll" se comporta mais como automático, pois as barras de rolagem ainda serão exibidas apenas quando estiverem sendo usadas. Portanto, se alguma das soluções acima não parecer estar funcionando, talvez seja por isso.

É isso que você precisa para corrigi-lo:

::-webkit-scrollbar {
  -webkit-appearance: none;
  width: 7px;
}
::-webkit-scrollbar-thumb {
  border-radius: 4px;
  background-color: rgba(0, 0, 0, .5);
  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
}

Você pode estilizá-lo adequadamente se não gostar do padrão.

molls223
fonte
1
Essa coisa funciona! Mas como você pode fazer isso apenas em uma div específica?
Rich
@ Rich como qualquer outro elemento css. .yourdiv :: - webkit-scrollbar {...}
Kris
@ Kris Oi, obrigado pela resposta, aqui está o exemplo disso. stackoverflow.com/a/54667091/2637261
Rich
Por que isso é usado?-webkit-appearance: none;
Suraj Jain
Isso é ótimo! Deve ser a resposta aceita.
Cyberpunker
25

As coisas mudaram nos últimos anos. As respostas acima não são mais válidas em todos os casos. A Apple está empurrando barras de rolagem desaparecendo em todos os lugares. Safari, Chrome e até Firefox no MacOs (e iOs) apenas mostram barras de rolagem quando rolam de verdade - eu não sei sobre o Windows / IE atual. No entanto, existem maneiras não padronizadas de estilizar barras de rolagem no Webkit (o IE caiu há muito tempo).

Frank Lämmer
fonte
mas degradam graciosamente os novos?
Ben
3
Obrigado por este excelente ponto nas barras de rolagem que desaparecem. Para mim, a razão de manter a barra de rolagem visível era evitar esse empurrão leve, mas muito perceptível e muito irritante, à medida que o conteúdo muda de ter rolagem para não. Com as barras de rolagem desaparecendo, eles não sacudem o corpo quando aparecem e se escondem, então está tudo bem para mim. Mas obrigado por este excelente ponto.
Noitidart 17/09/2015
4
Do ponto de vista do UX, na maioria das vezes queremos a barra de rolagem visível. De acordo com a tendência atual, se uma barra de rolagem não estiver visível, é uma etapa adicional ter que "experimentar" uma lista visível para obter mais informações na lista. Uma pista visual adicional de que a lista suspensa ou contém mais itens não é necessária se as pessoas virem uma barra de rolagem.
windsurf88
24
html {
    overflow-y: scroll;
}

É isso que você quer?

Infelizmente, o Opera 9.64 parece ignorar a declaração CSS quando aplicada a HTMLou BODY, embora funcione para outros elementos no nível de bloco DIV.

Ionuț G. Stan
fonte
13
html {height: 101%;}

Eu uso esta solução entre navegadores (observação: eu sempre uso a declaração DOCTYPE na 1ª linha, não sei se funciona no modo quirksmode, nunca testei ).

Isso sempre mostra uma barra de rolagem vertical ATIVA em todas as páginas; a barra de rolagem vertical será rolável apenas com alguns pixels.

Quando o conteúdo da página é mais curto que a área visível do navegador (porta de visualização), você ainda verá a barra de rolagem vertical ativa e será rolável apenas com alguns pixels.

Caso você esteja obcecado com a validação CSS (sou obcecado apenas com a validação HTML), usando esta solução, seu código CSS também valeria para o W3C porque você não está usando atributos CSS não padrão, como -moz-scrollbars-vertical

Marco Demaio
fonte
1
Solução elegante
Artur Keyan
12

body { height:101%; } "recortará" páginas maiores.

Em vez disso, eu uso:

body { min-height:101%; }
Scott
fonte
1
Esta pergunta foi feita há 5 anos e já tem uma resposta aceita. Sua resposta não fornece uma resposta melhor do que a resposta já aceita.
Dipen Shah
18
Esta resposta realmente fornece informações adicionais não fornecidas nas outras respostas.
GaTechThomas
2

Consegui fazer isso funcionar adicionando-o à tag body. Foi melhor para mim porque não tenho nada sobre o elemento html.

body {
    overflow-y: scroll;
}
Jazzepi
fonte
2

Uma abordagem alternativa é definir a largura do elemento html para 100vw. Em muitos, se não na maioria dos navegadores, isso nega o efeito das barras de rolagem na largura.

html { width: 100vw; }
Lunelson
fonte
0

Definir altura para 101% é a minha solução para o problema. As suas páginas não serão mais "trocadas" ao alternar entre aquelas que excedem a altura da janela de exibição e as que não o fazem.

Sanjaal Corps
fonte
0
body { 
    min-height: 101vh; 
} 

funciona melhor para mim

Lolo
fonte
0

Eu faço isso:

html {
    margin-left: calc(100vw - 100%);
    margin-right: 0;
}

Então não preciso olhar para a barra de rolagem cinza feia quando ela não é necessária.

Stian
fonte
A pergunta pede que seja sempre visível.
Corv1nus 24/06