Comment réparer un en-tête de défilement
Je suis entrain de créer un en-tête qui une fois défile à une certaine quantité de pixels il fixe et qui reste en place.
Puis-je le faire en utilisant simplement le css et le html ou ai-je besoin de jquery trop?
J'ai créé une démonstration de sorte que vous pouvez comprendre. Toute aide serait super!
body{
margin:0px;
padding:0px;
}
.clear{
clear:both;
}
.container{
height:2000px;
}
.cover-photo-container{
width:700px;
height: 348px;
margin-bottom: 20px;
background-color:red;
}
.small-box{
width:163px;
height:100px;
border:1px solid blue;
float:left;
}
.sticky-header{
width:700px;
height:50px;
background:orange;
postion:fixed;
}
- vous n'avez pas le faire sans l'aide de JS
- Le problème avec cette approche et la suite des réponses est que vous vous retrouvez en s'appuyant sur le récipient étant rien de plus que le 2000px que vous spécifiez. Ce serait un échec dans la production, soit parce que vous devez garder le réglage. Ou vous poser les rédacteurs à ne jamais ajouter plus de contenu au-delà d'un certain nombre de mots. De toute façon cette approche n'est pas à l'échelle.
- Quelque chose avec jquery et CSS peuvent vous aider à atteindre collant en-tête de défilement kvcodes.com/2017/03/jquery-simple-sticky-header-on-scroll
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de JS pour faire défiler les événements. La meilleure façon de faire cela est de définir une nouvelle classe CSS pour la position fixe qui sera affecté à la div lors du défilement va au-delà d'un certain point.
HTML
CSS
jQuery
Exemple de violon: http://jsfiddle.net/gxRC9/501/
EDIT: exemple
Si le point de déclenchement est inconnu mais devrait être à chaque fois que le collant élément atteint le haut de l'écran,
offset().top
peut être utilisé.Exemple de violon: http://jsfiddle.net/gxRC9/502/
</div>
avant le collant en-tête. Veuillez vérifier votre code.100px
?J'ai modifié la Coop de réponse. Veuillez consulter l'exemple VIOLON
Voici mes modifications:
Je sais Coop a déjà répondu à cette question, mais voici une version qui a aussi des pistes où dans le document, le div est, plutôt que de compter sur une valeur statique:
http://jsfiddle.net/gxRC9/16/
Javascript
CSS
Coop de réponse est excellent.
Cependant, il dépend de jQuery, voici une version qui n'a pas de dépendances:
HTML
CSS
JS
(Cela utilise eyelidlessness réponse pour trouver des décalages dans Vanilla JS.)
Exemple
https://jsbin.com/walabebita/edit?html,css,js,sortie
Coopératives réponse est bonne, la solution la plus simple, cependant, une fois que vous appliquez le fixe de la classe de la page devient beaucoup plus court et le contenu de "saut", et que si la page est d'une longueur où le défilement de la distance est inférieure à la hauteur de l'élément d'en-tête, il apparaîtra à sauter et ne pas les laisser vous voir au bas de la page.
La réponse que j'ai trouvé a été d'ajouter une entretoise div au-dessus de l'élément fixe (l'élément nav dans mon cas), et le mettre à la même hauteur que l'élément nav, et le configurer pour afficher aucun.
Lors de l'ajout de l' .fixes de classe à la valeur liquidative, de montrer le .nav-entretoise div, et lors du retrait, les cacher. Étant donné que la hauteur de la page change instantanément j'ai fixé la durée à 0.
HTML
CSS
JavaScript
Juste bâtiment sur Riche de réponse, qui utilise le décalage.
J'ai modifié comme suit:
$sticky
Riches de l'exemple, il n'a rien faitJ'ai déplacé le décalage de vérifier dans une fonction séparée, et l'a appelé
sur le document prêt, ainsi que sur de défilement si la page se rafraîchit avec l'
faites défiler jusqu'à mi-chemin en bas de la page, il redimensionne droite de suite sans avoir à attendre pour un défilement de déclenchement
Glorieux, en Pur HTML/CSS Solution
En 2019 avec CSS3, vous pouvez le faire sans Javascript. J'ai souvent faire collante en-têtes comme ceci:
CSS:
HTML:
position: -webkit-sticky; /* Safari */
Ou tout simplement ajouter un
span
de la balise avec la hauteur de l'en-tête fixe définie comme sa hauteur puis insérez-le à côté du collant en-tête:Il fonctionne parfaitement.
La solution choisie ne rentre pas bien dans ma page. C'est donc une version plus avancée qui fonctionne avec bootstrap.
Le javascript
Le CSS
Et le HTML
Espérons que cette seule pièce, une autre solution sera aussi utile à quelqu'un d'autre qu'elle était pour moi.
Situation:
Dans une page HTML5, j'ai eu un menu qui a été un élément nav à l'intérieur d'un en-tête (ne pas L'en-tête mais un en-tête dans un autre élément).
Je voulais la navigation de bâton à la tête, une fois qu'un utilisateur fait défiler jusqu'à elle, mais avant cela, l'en-tête absolu placé (si je pouvais l'avoir superposition de quelque chose d'autre un peu).
Les solutions ci-dessus ne jamais déclenché un changement parce que .offsetTop n'allait pas changer car c'était un absolu positionné sur l'élément. En outre, l' .scrollTop propriété était tout simplement le top du top de la plupart des élément... c'est-à-dire 0 et serait toujours 0.
Tout les tests que j'ai effectués en utilisant ces deux (et même avec getBoundingClientRect résultats) ne serait pas me dire si le haut de la barre de navigation toujours défile vers le haut de la partie visible de la page (encore une fois, comme indiqué dans la console, ils sont simplement restés les mêmes numéros pendant le défilement s'est produite).
la Solution
La solution pour moi a été d'utiliser
La valeur de la pageTop propriété reflète la taille de l'écran, donc de me permettre de suivre lorsqu'un élément est en référence aux limites de la zone visible.
Cela a permis à une simple fonction assignée à l'événement scroll de la fenêtre pour détecter lorsque le haut de la barre de navigation recoupé avec le haut de la zone visible et appliquer le style à faire coller vers le haut.
Sans doute inutile de dire, chaque fois que je fais affaire avec défilement je m'attends à utiliser cette solution par programmation répondent au mouvement des éléments de défilement.
Espère que cela aide quelqu'un d'autre.