Eu tenho um site com DIV alinhado ao centro. Agora, algumas páginas precisam ser roladas, outras não. Quando passo de um tipo para outro, a aparência de uma barra de rolagem move a página alguns pixels para o lado. Existe alguma maneira de evitar isso sem mostrar explicitamente as barras de rolagem em cada página?
218
overflow-y: overlay
neste tópico?overflow-y: overlay
é depreciado: developer.mozilla.org/pt-BR/docs/Web/CSS/overflowRespostas:
overflow-y: scroll está correto, mas você deve usá-lo com a tag html, não body, ou então obterá uma barra de rolagem dupla no IE 7.
Portanto, o css correto seria:
fonte
Coloque o conteúdo do seu elemento rolável em uma div e aplique
padding-left: calc(100vw - 100%);
.O truque é que
100vw
representa 100% da janela de visualização, incluindo a barra de rolagem. Se você subtrair100%
, que é o espaço disponível sem a barra de rolagem, você terá a largura da barra de rolagem ou0
se ela não estiver presente. Criar um preenchimento dessa largura à esquerda simulará uma segunda barra de rolagem, deslocando o conteúdo centralizado de volta para a direita.Observe que isso só funcionará se o elemento rolável usar toda a largura da página, mas isso não deve ser um problema na maioria das vezes, porque existem apenas alguns outros casos em que você centralizou o conteúdo rolável.
fonte
100vw
e100%
medido coisas diferentes, então aprendi algo útil com isso!@media screen and (min-width: 800px) {...}
. Nos casos em que o conteúdo caberá na largura da página. Por exemplo, em pequenas resoluções haverá lacuna desnecessários, mudando o conteúdo para a direitaEu acho que não. Mas estilizar
body
comoverflow: scroll
deve servir. Você parece saber disso, no entanto.fonte
overflow-y: scroll
:)Com a rolagem sempre sendo exibida, talvez não seja bom para o layout.
Tente limitar a largura do corpo com css3
vw
é a largura da janela de exibição (veja este link para obter algumas explicações)calc
calcular em css334px
significa largura da barra de rolagem dupla (veja isso para fixo ou para calcular se você não confia em tamanhos fixos)fonte
padding-left: 34px;
para centralizar uniformemente minha página.Exemplo . Clique no botão "alterar altura mínima".
Com
calc(100vw - 100%)
podemos calcular a largura da barra de rolagem (e, se não for exibida, será 0). Idéia: usando margem negativa direita, podemos aumentar a largura<html>
para essa largura. Você verá uma barra de rolagem horizontal - ela deve estar oculta usandooverflow-x: hidden
.fonte
calc(100% - 100vw)
invés de multiplicar-1
?Não sei se este é um post antigo, mas tive o mesmo problema e se você quiser rolar verticalmente, tente
overflow-y:scroll
fonte
Se alterar o tamanho ou depois de carregar alguns dados, estiver adicionando a barra de rolagem, você pode tentar seguir, criar classe e aplicar essa classe.
fonte
Resolvi o problema em um dos meus sites, definindo explicitamente a largura do corpo em javascript pelo tamanho da janela de exibição menos a largura da barra de rolagem. Eu uso uma função baseada em jQuery documentada aqui para determinar a largura da barra de rolagem.
fonte
Expandindo a resposta usando isso:
Um comentarista sugeriu a adição de preenchimento à esquerda também para manter a centralização:
Mas as coisas não parecerão corretas se o seu conteúdo for maior que a janela de visualização. Para corrigir isso, você pode usar consultas de mídia, assim:
Onde 1058 px = largura do conteúdo + 17 * 2
Isso permite que uma barra de rolagem horizontal lide com o excesso de x e mantém o conteúdo centralizado quando a janela de exibição é ampla o suficiente para conter seu conteúdo de largura fixa
fonte
Estendendo-se de a resposta do Rapti , isso também deve funcionar, mas adiciona mais margem ao lado direito
body
e oculta comhtml
margem negativa , em vez de adicionar preenchimento extra que pode afetar o layout da página. Dessa forma, nada é alterado na página real (na maioria dos casos) e o código ainda está funcional.fonte
overflow-x: hidden
e isso foi corrigido.A solução do @ kashesandr funcionou para mim, mas para ocultar a barra de rolagem horizontal, adicionei mais um estilo ao corpo. aqui está a solução completa:
CSS
JS
Solução JS Only (quando o 2º modal foi aberto a partir do 1º modal):
fonte
Tentei corrigir provavelmente o mesmo problema causado pela
.modal-open
classe de inicialização do twitter aplicadabody
. A soluçãohtml {overflow-y: scroll}
não ajuda. Uma solução possível que encontrei é adicionar{width: 100%; width: 100vw}
aohtml
elemento.fonte
html { width: 100vw; }
funcionou para mim #Eu costumava ter esse problema, mas a maneira simples de corrigi-lo é esta (isso funciona para mim):
no tipo de arquivo CSS:
tão simples assim! :)
fonte
As soluções postadas usando calc (100vw - 100%) estão no caminho certo, mas há um problema com isso: você sempre terá uma margem à esquerda do tamanho da barra de rolagem, mesmo se redimensionar a janela para que o o conteúdo preenche toda a janela de exibição.
Se você tentar contornar isso com uma consulta de mídia, terá um momento de embaraço estranho, porque a margem não ficará progressivamente menor à medida que você redimensionar a janela.
Aqui está uma solução que contorna isso e o AFAIK não tem desvantagens:
Em vez de usar margin: auto para centralizar seu conteúdo, use o seguinte:
Substitua 500 px pela metade da largura máxima do seu conteúdo (portanto, neste exemplo, a largura máxima do conteúdo é 1000 px). O conteúdo agora permanecerá centralizado e a margem diminuirá progressivamente até o conteúdo preencher a janela de exibição.
Para impedir que a margem fique negativa quando a viewport for menor que a largura máxima, adicione uma consulta de mídia da seguinte forma:
Et voilà!
fonte
Se a largura da tabela não for alterada, você poderá definir a largura do elemento (como tbody) que contém a barra de rolagem> 100% (permitindo espaço extra para a barra de rolagem) e definir overflow-y como "overlay" (assim que a barra de rolagem permanece fixa e não muda a tabela para a esquerda quando aparece). Defina também uma altura fixa para o elemento com a barra de rolagem, para que a barra de rolagem apareça quando a altura for excedida. Igual a:
Nota: você terá que ajustar manualmente a largura%, pois o% de espaço ocupado pela barra de rolagem será relativo à largura da sua tabela (ou seja: largura menor da tabela, mais% necessário para ajustar a barra de rolagem, pois o tamanho em pixels é constante )
Um exemplo de tabela dinâmica:
fonte
Basta definir a largura do seu elemento de contêiner dessa maneira.
Isso fará com que esse elemento ignore a barra de rolagem e funcione com cores ou imagens de plano de fundo.
fonte
Eu usei algum jquery para resolver isso
fonte
fonte
Ao contrário da resposta aceita, que sugere uma barra de rolagem permanente na janela do navegador, mesmo que o conteúdo não ultrapasse a tela , eu prefiro usar:
Isso ocorre porque a aparência da barra de rolagem faz mais sentido se o conteúdo realmente exceder o limite .
Isso faz mais sentido do que isso .
fonte