Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
How do html, body and window interact while scrolling programmatically?

I have been trying to implement a scroll-to-top button. Searching online I found this piece of code:

$('html, body').animate({scrollTop:0}, 'slow');  

I am confused, why would they try to scroll both html and body and then playing around with overflow: hidden on body tag, I noticed you can't have a scrollbar for both html and body. Then on MDN I found another way to achieve the same thing as:

window.scroll({
  top: 0,
  left: 0,
  behavior: 'smooth'
});

As we know window is the global object, which obviously can't be scrolled.

  1. Does window.scroll internally scroll the html element or the body element?
  2. Can body element be scrolled at all? I tried overflow: hidden on html and then overflow: scroll on body but don't see a scrollbar.
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

  1. Does window.scroll internally scroll the html element or the body element?

Neither. It scrolls the viewport. The precise description of the scrolling is given in the CSSOM view spec.

  1. Can body element be scrolled at all? I tried overflow: hidden on html and then overflow: visible on body but don't see a scrollbar.

Yes. but overflow: visible won't display a scrollbar. You need overflow: scroll or overflow: auto. And to make it scroll, the content must overflow the body. e.g.

html {
  overflow: scroll;
  width: 630px;
}  
body { 
  height: 80px;
  overflow: auto;
}
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Here you can see two vertical scrollbars. The one on the viewport, forced to display by the overflow: scroll on the html element, and the one on body because the content overflows it, and it has overflow: auto.

We can make both scrollbars scrollable if both are overflowed by their contents.

html  {
  overflow: auto;
  border:2px solid red;
}  
body { 
  height: 110vh; /* overflows the viewport - but note: 
                    as you can see from the red and 
                    blue borders, not the html emlement. */
  overflow: auto;
  border:2px solid blue;
}
p { 
  height: 130vh; /* overflows the body element */
}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<p>

about 4 years ago · Juan Pablo Isaza Relatório

0

window.scroll() effectively scrolls the document.scrollingElement* which is now defined as being the <html> element, but used to be the <body> one in some UAs and still in Quirks mode.

This document.scrollingElement is a relatively recent addition and that's why you may still find old code that dealt with both <body> and <html> to honor all browsers.

*Per specs it scrolls the "viewport" but that boils down to the same since the step 12 of the scroll algorithm passes the " document’s root element as the associated element" to the actual "Perform a scroll" operation.

const frameContent = `<html>
  <body><h1 style='height:300vh'>%s Mode</h1>
  <script>
    scroll(0, 200);
    parent.postMessage({
      compatMode: document.compatMode,
      html: document.documentElement.scrollTop,
      body: document.body.scrollTop,
    }, '*')
  <\/script>`;
document.querySelectorAll("iframe").forEach((el, i) => {
  el.src = `data:text/html,` + encodeURIComponent(
      (i ? "<!DOCTYPE html>" : "") + // set the first frame to Quirk mode
      frameContent.replace("%s", i ? "Default" : "Quirk")
    );
});
onmessage = ({data}) => console.log(data)
<iframe></iframe>
<iframe></iframe>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda