Gostaria de criar uma div, situada abaixo de um bloco de conteúdo, mas que, uma vez que a página tenha sido rolada o suficiente para entrar em contato com seu limite superior, fique fixa no local e role com a página.
javascript
jquery
css
scroll
positioning
evanr
fonte
fonte
position: sticky; top:0;
funciona na maioria dos navegadores em janeiro de 2017.position: sticky;
é mágico.Respostas:
Você pode usar simplesmente css, posicionando seu elemento como fixo :
Editar: você deve ter o elemento com posição absoluta; assim que o deslocamento da rolagem atingir o elemento, ele deve ser alterado para fixo e a posição superior deve ser definida como zero.
Você pode detectar o deslocamento da rolagem superior do documento com a função scrollTop :
Quando o deslocamento da rolagem atingiu 200, o elemento gruda na parte superior da janela do navegador, porque é colocado como fixo.
fonte
if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
new example
link que você deu é tão limpo e claro que eu nem consigo vê-lo! -_-Você viu este exemplo na página de problemas do Google Code e (apenas recentemente) na página de edição do Stack Overflow.
A resposta do CMS não reverte o posicionamento quando você rolar para cima. Aqui está o código descaradamente roubado do Stack Overflow:
E uma simples demonstração ao vivo .
Uma alternativa nascente e sem scripts
position: sticky
é suportada no Chrome, Firefox e Safari. Veja o artigo sobre HTML5Rocks e demo e os documentos da Mozilla .fonte
offset
deve ter parado de aceitar um objeto como entrada api.jquery.com/offset . @ Eddie Sua modificação deve ser segura com o jQuery atual.var d = $("#scroller-anchor").offset().top;
comvar d = $("#sidebar").offset().top;
e se livrar do div scroller-âncora vazia todos juntos? Aqui está o meu garfo demonstrando o que estou falando.Desde janeiro de 2017 e o lançamento do Chrome 56, a maioria dos navegadores de uso comum suporta a
position: sticky
propriedade em CSS.faz o truque para mim no Firefox e Chrome.
No Safari, você ainda precisa usar
position: -webkit-sticky
.Polyfills estão disponíveis para Internet Explorer e Edge; https://github.com/wilddeer/stickyfill parece ser bom.
fonte
Eu tive o mesmo problema que você e acabei criando um plugin jQuery para cuidar dele. Na verdade, ele resolve todos os problemas que as pessoas listaram aqui, além de adicionar alguns recursos opcionais.
Opções
https://github.com/donnyv/sticky-panel
demo: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm
fonte
code
// desanexar o painel node.css ({"margin": 0, "left": nodeLeft, "top": newNodeTop, "position": "fixed", "width": node.width ()});code
E aqui está como sem o jquery (UPDATE: veja outras respostas onde agora você pode fazer isso apenas com CSS)
fonte
Foi assim que fiz com jquery. Tudo isso foi elaborado a partir de várias respostas no estouro da pilha. Essa solução armazena em cache os seletores para obter um desempenho mais rápido e também resolve o problema de "pular" quando a div fixa fica pegajosa.
Confira em jsfiddle: http://jsfiddle.net/HQS8s/
CSS:
JS:
fonte
Aqui está outra opção:
JAVASCRIPT
Você
#myElementToStick
deve começar com aposition:absolute
propriedade CSS.fonte
Como Josh Lee e Colin 'Hart disseram, você pode opcionalmente usar a
position: sticky; top: 0;
aplicação na div em que deseja a rolagem ...Além disso, a única coisa que você precisará fazer é copiar isso no topo da página ou formatá-lo para caber em uma folha CSS externa:
Apenas substitua
#sticky_div's_name_here
pelo nome da sua div, ou seja, se sua div fosse,<div id="example">
você colocaria#example { position: sticky; top: 0; }
.fonte
Minha solução é um pouco detalhada, mas lida com o posicionamento variável da borda esquerda para layouts centralizados.
fonte
Aqui está mais uma versão para tentar para aqueles que têm problemas com os outros. Ele reúne as técnicas discutidas nesta pergunta duplicada e gera dinamicamente as DIVs auxiliares necessárias, para que nenhum HTML extra seja necessário.
CSS:
JQuery:
Para tornar um elemento grudento, faça:
Quando o elemento fica pegajoso, o código gerencia a posição do conteúdo restante para evitar que ele salte para o espaço deixado pelo elemento pegajoso. Ele também retorna o elemento adesivo à sua posição original não adesivo ao rolar para trás acima dele.
fonte
Aqui está uma versão estendida da resposta de Josh Lee. Se você deseja que a div esteja na barra lateral à direita e flutue dentro de um intervalo (ou seja, é necessário especificar as posições de ancoragem superior e inferior). Ele também corrige um erro quando você o exibe em dispositivos móveis (você precisa verificar a posição de rolagem esquerda, caso contrário, a div sairá da tela).
fonte
Me deparei com isso ao procurar a mesma coisa. Sei que é uma pergunta antiga, mas pensei em oferecer uma resposta mais recente.
O Scrollorama tem um recurso 'fixe', que é exatamente o que eu estava procurando.
http://johnpolacek.github.io/scrollorama/
fonte
As informações fornecidas para responder a essa outra pergunta podem ser úteis para você, Evan:
Verifique se o elemento está visível após a rolagem
Basicamente, você deseja modificar o estilo do elemento para defini-lo como fixo somente depois de verificar se o valor document.body.scrollTop é igual ou superior à parte superior do seu elemento.
fonte
A resposta aceita funciona, mas não volta à posição anterior se você rolar acima dela. É sempre preso ao topo depois de ser colocado lá.
A resposta de jleedev daria certo, mas não consegui fazê-la funcionar. Sua página de exemplo também não funcionou (para mim).
fonte
Você pode adicionar 3 linhas extras para que, quando o usuário rolar de volta para o topo, a div fique no seu antigo local:
Aqui está o código:
fonte
Eu tenho links configurados em uma div, por isso é uma lista vertical de links de letras e números.
Em seguida, configurei esta útil função jQuery para salvar a posição carregada e, em seguida, alterei a posição para fixa ao rolar além dessa posição.
NOTA: isso só funciona se os links estiverem visíveis no carregamento da página!
fonte
Eu usei alguns dos trabalhos acima para criar essa tecnologia. Melhorei um pouco e pensei em compartilhar meu trabalho. Espero que isto ajude.
Código jsfuddle
Esta é uma maneira um pouco mais dinâmica de fazer a rolagem. Ele precisa de algum trabalho e, em algum momento, vou transformá-lo em um plug-in, mas é isso que eu descobri após uma hora de trabalho.
fonte
Em javascript, você pode fazer:
fonte
Não é uma solução exata, mas uma ótima alternativa a considerar
essa CSS SOMENTE Barra de rolagem na parte superior da tela . Resolvido todo o problema com apenas CSS , NO JavaScript, NO JQuery, No Brain ( lol ).
Aproveite o meu violino : D todos os códigos estão incluídos lá :)
CSS
Coloque o conteúdo por tempo suficiente para que você possa ver o efeito aqui :) Ah, e a referência também está lá, porque ele merece seu crédito
SOMENTE CSS Barra de rolagem na parte superior da tela
fonte
Aqui está um exemplo que usa o plugin jquery-visible: http://jsfiddle.net/711p4em4/ .
HTML:
CSS:
JS (inclua o plugin jquery-visible):
fonte
pegajoso até o rodapé atingir a div:
fonte