Comment puis-je faire un div stick vers le haut de l'écran une fois que c'est fait défiler à l'?
Je voudrais créer un div, qui est situé sous un bloc de contenu, mais une fois que la page a été défile assez de contacter sa limite supérieure, se fixe en lieu et défile avec la page.
- En juin 2014, le Collant-kit plugin jQuery est l'un des plus faciles options, fournir une très faible barrière à l'entrée et beaucoup de fonctionnalités. Excellent endroit pour commencer si vous êtes à la recherche d'un moyen facile de démarrer rapidement.
- Quelques astuces de CSS: css-tricks.com/scroll-fix-content
- L'ajout de CSS
position: sticky; top:0;
fonctionne dans la plupart des navigateurs en janvier 2017. - Holy crap, qui
position: sticky;
chose, c'est magique.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser simplement le css, le positionnement de votre élément fixe:
Edit: Vous devriez avoir l'élément à la position absolue, une fois le rouleau offset a atteint l'élément, il doit être changé à fixe, et la position du haut doit être à zéro.
Vous pouvez détecter le haut faire défiler décalage de document avec la scrollTop fonction:
Lorsque le défilement décalage atteint les 200, l'élément bâton en haut de la fenêtre du navigateur, car il est placé comme fixe.
if ($(this).scrollTop() < 200 && $el.css('position') == 'fixed') { $('.fixedElement').css({'position': 'static', 'top': '0px'}); }
new example
lien que tu as donné est tellement propre et clair que je ne peux même pas le voir! -_-Vous avez vu de cet exemple sur Google Code problème de page et (récemment) sur un Débordement de Pile de modifier la page.
Du CMS de réponse ne veut pas revenir sur le positionnement lorsque vous faites défiler vers le haut. Voici la volé sans vergogne code de Débordement de Pile:
Et un simple démonstration en direct.
Naissant, script sans alternative est
position: sticky
, qui est pris en charge dans Chrome, Firefox et Safari. Voir la article sur HTML5Rocks et démo, et Mozilla docs.offset
doit avoir cessé d'accepter un objet en entrée api.jquery.com/offset. @Eddie Votre modification doit être en sécurité avec courant de jQuery.var d = $("#scroller-anchor").offset().top;
avecvar d = $("#sidebar").offset().top;
et de se débarrasser de la vide de la barre de défilement-ancre div tous ensemble? Voici mon fork démontrer de quoi je parle.À compter de janvier 2017 et de la libération de Chrome 56, la plupart des navigateurs dans l'usage commun de soutien à la
position: sticky
propriété en CSS.fait le truc pour moi sous Firefox et Chrome.
Dans Safari, vous devez toujours utiliser
position: -webkit-sticky
.Polyfills sont disponibles pour Internet Explorer et le Bord; https://github.com/wilddeer/stickyfill semble être une bonne idée.
J'ai eu le même problème que vous et a fini par faire un plugin jQuery pour prendre soin d'elle. Il résout tous les problèmes que les gens ont répertorié ici, et en plus il ajoute un couple de fonctionnalités optionnelles trop.
Options
https://github.com/donnyv/sticky-panel
démo: http://htmlpreview.github.io/?https://github.com/donnyv/sticky-panel/blob/master/jquery.stickyPanel/Main.htm
code
// détacher le panneau de nœud.css({ "marge": 0, "gauche": nodeLeft, "top": newNodeTop, "position": "" fixe", "width": nœud.largeur() });code
Et voici comment sans jquery (mise à JOUR: voir les autres réponses où vous pouvez désormais le faire avec CSS)
JS:
CSS:
HTML:
C'est la façon dont je l'ai fait avec jquery. C'était tout bricolé à partir des réponses très diverses sur un débordement de pile. Cette solution met en cache les sélecteurs pour des performances plus rapides et résout également le "saut" problème lors de la collante div devient collante.
Le vérifier sur jsfiddle: http://jsfiddle.net/HQS8s/
CSS:
JS:
Ici est une autre option:
JAVASCRIPT
Votre
#myElementToStick
devrait commencer avecposition:absolute
propriété CSS.Comme Josh Lee et Colin 't Hart l'ai dit, vous pouvez éventuellement simplement utiliser
position: sticky; top: 0;
l'application de la div que vous voulez que le défilement à...Plus, la seule chose que vous avez à faire est de copier dans le haut de votre page ou de format, de s'insérer dans une feuille CSS externe:
Il suffit de remplacer
#sticky_div's_name_here
avec le nom de votre div, c'est à dire si votre div a été<div id="example">
vous mettez#example { position: sticky; top: 0; }
.Ma solution est un peu verbeux, mais il gère le positionnement variable à partir du bord gauche centré mises en page.
Voici encore une version à essayer pour ceux qui ont des problèmes avec les autres. Il rassemble les techniques abordées dans cette double question, et génère le nécessaire helper DIVs dynamiquement donc pas de supplément HTML n'est requise.
CSS:
JQuery:
Pour en faire un élément collant, n':
Lorsque l'élément devient collante, le code permet de gérer la position du reste du contenu pour l'empêcher de sauter dans le vide laissé par le collant de l'élément. Il renvoie également le collant élément d'origine de la non-collante position lors du défilement en arrière au-dessus d'elle.
Ici est une version étendue de Josh Lee réponse. Si vous voulez la div pour être sur la barre latérale à droite, et flotter à l'intérieur d'une fourchette (c'est à dire, vous devez spécifier le haut et le bas d'ancrage des postes). Elle corrige également un bug lors de l'affichage de ce sur les appareils mobiles (vous devez cocher la case à gauche la position de défilement sinon la div vont se déplacer hors de l'écran).
Je suis tombé sur ce lors de la recherche de la même chose. Je sais que c'est une vieille question, mais je pensais que je voudrais offrir une plus récente réponse.
Scrollorama a un "pin it" fonctionnalité qui est exactement ce que je cherchais.
http://johnpolacek.github.io/scrollorama/
Les infos fournies pour répondre à cette autre question peut être vous aider, Evan:
Vérifier si l'élément est visible après le défilement
Fondamentalement, vous voulez modifier le style de l'élément pour le mettre en fixe qu'après avoir vérifié que le document.corps.scrollTop valeur est égale ou supérieure à la partie supérieure de votre élément.
La accepté de répondre fonctionne, mais ne pas revenir à la position précédente si vous faites défiler au-dessus d'elle. Il est toujours coincé vers le haut après avoir été placé là.
jleedev la réponse devrait fonctionner, mais je n'ai pas réussi à le faire fonctionner. Son exemple la page ne fonctionne pas (pour moi).
Vous pouvez ajouter un supplément de 3 lignes donc lorsque l'utilisateur de revenir en arrière et vers le haut, la div coller sur son ancienne place:
Voici le code:
J'ai des liens d'installation dans un div c'est donc une liste verticale de la lettre et le nombre de liens.
Je puis l'installation de cette pratique jQuery fonction pour enregistrer la position de chargement et puis changer la position fixe lors du défilement au-delà de cette position.
REMARQUE: cela ne fonctionne que si les liens sont visibles sur le chargement de la page!!
J'ai utilisé une partie du travail ci-dessus pour créer cette technologie. J'ai amélioré un peu et pensé que je voudrais partager mon travail. Espérons que cette aide.
jsfuddle Code
C'est un peu plus dynamique, de manière à faire défiler. Il n'a besoin de quelques travaux et je serez à un point de la transformer en un pluging mais mais c'est ce que j'ai trouvé après des heures de travail.
En javascript que vous pouvez faire:
Pas une solution exacte, mais une excellente alternative à considérer
ce CSS UNIQUEMENT le Haut de l'écran de la barre de défilement. Résolu tous les problèmes avec SEULEMENT CSS, PAS JavaScript, PAS JQuery, Pas Cerveau (lol).
Profiter de mon violon 😀 tous les codes sont inclus dedans 🙂
CSS
Mettre le contenu assez longtemps de sorte que vous pouvez voir l'effet que ici 🙂
Oh, et la référence est là, pour le fait qu'il méritent son crédit
CSS UNIQUEMENT le Haut de l'écran de la barre de défilement
Voici un exemple qui utilise jquery-visible plugin: http://jsfiddle.net/711p4em4/.
HTML:
CSS:
JS (jquery comprend visible plugin):
collant jusqu'au pied de frappe de la div:
Vous pouvez faire cela avec le
css()
méthode de jQuery: