DESATIVAR o Scroll Horizontal [fechado]


180

Ok, por algum motivo, minha página rola da esquerda para a direita e mostra muito espaço feio.

Eu procurei por resultados, mas eles apenas fizeram a barra de rolagem ESCONDIDA

Agora é isso que eu quero, quero DESATIVAR fisicamente o recurso de rolagem horizontal. Eu não quero que o usuário possa rolar da esquerda para a direita na minha página apenas para cima e para baixo!

Eu tentei: overflow-x:hiddenem css na minha htmltag, mas apenas ocultou a barra de rolagem e não desativou a rolagem.

Por favor me ajude!

Aqui está um link para a página: http://www.green-panda.com/usd309bands/ (link quebrado)

Isso pode lhe dar uma idéia melhor do que estou falando:

É quando a primeira página é carregada:

insira a descrição da imagem aqui

E isso é depois que eu rolo para a direita:

insira a descrição da imagem aqui


1
Como você pode rolar horizontalmente se não houver barra de rolagem horizontal?
Roddy das ervilhas congeladas

9
Dois dedos no mouse indo da esquerda para a direita em um laptop.
user2371301

1
Por curiosidade, o que na sua página cria uma barra de rolagem padrão?
Trojan

4
Como rolar sem uma barra de rolagem? Arraste com o botão direito do mouse no Windows.
Nayuki

deve haver um bloco com estofamento extra, ou seja, estender a remoção de 100% da largura, o que seria uma boa prática
erupção cutânea

Respostas:


494

Tente adicionar isso ao seu CSS

html, body {
    max-width: 100%;
    overflow-x: hidden;
}

5
Isso funcionou muito bem. Fico feliz por ter encontrado alguém que entendeu o que eu estava dizendo! Eu aceitarei o mais rápido que puder.
user2371301

44
No Chrome 34, isso realmente não impede a rolagem. Oculta a barra de rolagem, mas, com a rolagem do botão do meio, ainda vejo os elementos ocultos à esquerda.
Gphilip

2
Isso não funciona quando você minimizar a janela do navegador para que é thinest capacidade
dspacejs

4
: - / Causada toque / impulso de rolagem para parar de trabalhar no iPhone
MarkWPiper

2
eu te amo Cara!!
rochasdv

13

este é o filho desagradável do seu código :)

.container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container {
width: 1170px;
}

substitua-o por

.container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container {
width: 100%;
}

13

Então, para corrigir isso corretamente, fiz o que os outros aqui fizeram e usei o css para ocultar a barra de ferramentas horizontal:

.name {
  max-width: 100%;
  overflow-x: hidden;
}

Em js, criei um ouvinte de eventos para procurar rolagem e contrariei a tentativa de rolagem horizontal dos usuários.

var scrollEventHandler = function()
{
  window.scroll(0, window.pageYOffset)
}

window.addEventListener("scroll", scrollEventHandler, false);

Vi alguém fazer algo parecido, mas aparentemente isso não funcionou. No entanto, isso está funcionando perfeitamente bem para mim.


Isso funciona para mim; no entanto, existe um tremor no celular ao deslizar; enquanto o movimento diminui.
HardlyNoticeable

"corretamente" Não é bem assim, mas ainda é uma resposta boa e criativa.
Feathercrown

9

Eu sei que é tarde demais , mas existe uma abordagem em javascript que pode ajudá-lo a detectar que o elemento html está causando o estouro horizontal -> barra de rolagem para aparecer

Aqui está um link para o post sobre CSS Tricks

var docWidth = document.documentElement.offsetWidth;
[].forEach.call(
  document.querySelectorAll('*'),
  function(el) {
    if (el.offsetWidth > docWidth) {
      console.log(el);
    }
  }
);

Pode retornar algo como isto:

<div class="div-with-extra-width">...</div>

então você apenas remove a largura extra do divou definemax-width:100%

Espero que isto ajude!

Corrigiu o problema para mim:]


Como uma observação no site, boundingClientRect é mais preciso que offsetWidth: - developer.mozilla.org/en-US/docs/Web/API/Element/… - stackoverflow.com/questions/43537559/…
The Fool

salva-vidas absoluto!
Tails

8

Tente este para desativar a rolagem de largura apenas para o corpo, todo o documento é apenas corpo body{overflow-x: hidden;}


5

koala_dev respondeu que isso vai funcionar:

html, body {
   max-width: 100%;
   overflow-x: hidden;
}

E o MarkWPiper comenta que ": - / fez com que a rolagem por toque / momento parasse de funcionar no iPhone"

A solução para manter o toque / momento no iPhone é adicionar esta linha dentro do bloco css para html, body:

    height:auto!important;

onde colocá-lo? sob a etiqueta do corpo ou uma consulta de mídia para telas pequenas?
Umair

1
@Umair thanks - comentário editado para esclarecer que a linha height: auto entra no bloco html body css.
Ffffff

Muito obrigado pela altura: solução automática!
quer

2

A resposta de Koala_dev funcionará, mas caso você esteja se perguntando, esse é o motivo pelo qual ele funciona:

.
q.html, body {              <--applying this css block to everything in the
                             html code.

q.max-width: 100%;          <--all items created must not exceed 100% of the 
                             users screen size. (no items can be off the page 
                             requiring scroll)

q.overflow-x: hidden;       <--anything that occurs off the X axis of the 
                             page is hidden, so that you wont see it going 
                             off the page.     

.


Thx, adorei a educação.
Pimp Trizkit

2

Se você deseja desativar a rolagem horizontal em toda a largura da tela, use este código.

element {
  max-width: 100vw;
  overflow-x: hidden;
}

Isso funciona melhor que "100%" porque ignora a largura do pai e usa a janela de exibição.


2

Você pode tentar esse método todo em nossa página html.

1ª via

body { overflow-x:hidden; }

2ª maneira Você pode usar o seguinte na sua tag body CSS:

overflow-y: scroll; overflow-x: hidden;

Isso removerá sua barra de rolagem.

3ª via

body { min-width: 1167px; }

5ª via

html, body { max-width: 100%; overflow-x: hidden; }

6ª via

element { max-width: 100vw; overflow-x: hidden; }

4ª via ..

var docWidth = document.documentElement.offsetWidth; [].forEach.call( document.querySelectorAll('*'), function(el) { if (el.offsetWidth > docWidth) { console.log(el); } } );

Agora estou pesquisando mais .. !!!!


1

Eu só tive que lidar com isso sozinho. Afinal, achei esse método mais fácil e útil. Basta adicionar

overflow-x: hidden;

Para o seu pai externo. No meu caso, fica assim:

<body style="overflow-x: hidden;">

Você precisa usar, overflow-xporque, se usar, overflowdesativa também a rolagem vertical, a saberoverflow-y

Se a rolagem vertical ainda estiver desativada, você poderá ativá-la explicitamente com:

overflow-y: scroll;

Eu sei que não é uma maneira adequada, porque se tudo estivesse bem configurado, não seria necessário usar esse método rápido e sujo.


1
.name 
  { 
      max-width: 100%; 
       overflow-x: hidden; 
   }

Você aplica o estilo acima ou pode criar uma função em javaScript para resolver esse problema


0

Você pode substituir o evento de rolagem do corpo pelo JavaScript e redefinir a rolagem horizontal para 0.

function bindEvent(e, eventName, callback) {
    if(e.addEventListener) // new browsers
        e.addEventListener(eventName, callback, false);
    else if(e.attachEvent) // IE
        e.attachEvent('on'+ eventName, callback);
};

bindEvent(document.body, 'scroll', function(e) {
    document.body.scrollLeft = 0;
});

Não aconselho fazer isso porque limita a funcionalidade para usuários com telas pequenas.


2
Vou tentar fazer isso, a correção CSS não funciona no meu projeto, ugh mesmo isso não funciona :(
Leon Gaban

isso não funciona para mim
Souhail Ben Slimene
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.