Teste cada opção do scrollIntoView em uma caixa ao vivo, corrija títulos escondidos sob um header fixo com scroll-margin-top e copie código de rolagem suave em JavaScript e em CSS puro.
Chame element.scrollIntoView({ behavior: 'smooth', block: 'start' }) para trazer um elemento para a tela. O block decide onde ele fica na vertical: start, center, end ou nearest. Se um header fixo cobrir o alvo, dê ao alvo um scroll-margin-top igual à altura do header no CSS, em vez de calcular deslocamentos em JavaScript.
Opções do scrollIntoView
Há três formas de levar a página até um elemento: scrollIntoView no elemento, scrollTo com uma posição em pixels e um link simples para um id. O playground mostra o que cada valor de block faz e como o scroll-margin-top mantém um título livre de uma barra fixa; depois, os exemplos cobrem o código de que você precisa para menus, erros de formulário e listas no estilo de chat.
Adicione scroll-margin-top ao alvo, por exemplo h2 { scroll-margin-top: 80px }. A especificação de CSS scroll snap pede que os navegadores respeitem essa margem no scrollIntoView e em links para #ids, mesmo sem nenhum snapping em uso.
Passe behavior: 'smooth' para o scrollIntoView ou o scrollTo, ou defina scroll-behavior: smooth no elemento html para que toda rolagem via código e todo link interno sejam animados. O scroll-behavior não tem efeito na rolagem feita pelo usuário com a roda do mouse ou o toque.
O scrollIntoView parte de um elemento e calcula a posição para você. O window.scrollTo({ top, behavior }) vai para uma posição exata em pixels, e o scrollBy se move por uma quantidade relativa. Use scrollTo quando você já tem um número, como ao voltar para uma posição salva.
window.scrollTo({ top: 0, behavior: 'smooth' }). Para um painel rolável, chame o mesmo método no elemento do painel em vez de window.
As causas comuns são chamá-lo antes de o elemento existir (rode depois da renderização, por exemplo em um effect do React), o elemento estar com display: none, ou a opção nearest com um elemento que já está totalmente visível.
Busca o elemento pelo id e leva a borda superior dele até o topo da tela.
Uma regra resolve a sobreposição tanto nas rolagens via script quanto nos links que terminam em #id. A media query pula a animação para quem prefere movimento reduzido.
O center mantém o campo e o rótulo dele no meio da tela; o foco também leva os usuários de teclado até lá.
Usa a posição do item dentro do painel, então a página em volta não se move.
A ref aponta para o nó do DOM depois que ele foi renderizado, então a chamada acontece em um handler de clique ou em um effect.
Playground do scrollIntoView
Esta caixa tem a sua própria barra fixa. Escolha uma linha e as opções, depois role. A caixa aplica o mesmo cálculo de alinhamento com scrollTo, então o resto da página fica parado.
Linha alvo: {n}
scroll-margin-top: {n}px
Rolar
Voltar ao topo da caixa
Barra fixa, 40px de altura
Linha {n}
Caixa de rolagem de demonstração
Código para a sua página
Comece grátis · Sem cartão de crédito