Je ne suis pas sûr de la meilleure façon de poser / rechercher cette question:
Lorsque vous cliquez sur un lien d'ancrage, cela vous amène à cette section de la page avec la zone liée maintenant en TRÈS HAUT de la page. J'aimerais que le lien d'ancrage m'envoie vers cette partie de la page, mais j'aimerais un peu d'espace en haut. Comme dans, je ne veux pas qu'il m'envoie à la partie liée avec lui au TRÈS HAUT, je voudrais environ 100 pixels d'espace là-bas.
Est-ce que ça a du sens? Est-ce possible?
Édité pour afficher le code - c'est juste une balise d'ancrage:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
Damon
la source
la source
Réponses:
Cela permettra au navigateur de faire le travail de sauter à l'ancre pour nous, puis nous utiliserons cette position pour décaler.
MODIFIER 1:
Comme l'a souligné @erb, cela ne fonctionne que si vous êtes sur la page pendant que le hachage est modifié. La saisie de la page avec un
#something
déjà dans l'URL ne fonctionne pas avec le code ci-dessus. Voici une autre version pour gérer cela:REMARQUE: pour utiliser jQuery, vous pouvez simplement remplacer
window.addEventListener
par$(window).on
dans les exemples. Merci @Neon.MODIFIER 2:
Comme quelques-uns l'ont souligné, l'opération ci-dessus échouera si vous cliquez sur le même lien d'ancrage deux fois ou plus de suite car il n'y a pas d'
hashchange
événement pour forcer le décalage.Cette solution est une version très légèrement modifiée de la suggestion de @Mave et utilise des sélecteurs jQuery pour plus de simplicité
JSFiddle pour cet exemple est ici
la source
example.com/#anchor
partir deexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. De cette façon, si lehref
d'una
élément commence par a#
, vous appelez la même fonction.$(window).on("hashchange",
parwindow.addEventListener("hashchange",
En travaillant uniquement avec css, vous pouvez ajouter un remplissage à l'élément ancré (comme dans une solution ci-dessus) Pour éviter les espaces inutiles, vous pouvez ajouter une marge négative de la même hauteur:
Je ne suis pas sûr que ce soit la meilleure solution dans tous les cas, mais cela fonctionne très bien pour moi.
la source
position: relative
propriété css. Donc, ce serait commeposition: relative; top: -50px;
Encore meilleure solution:
Positionnez simplement l'
<a>
étiquette avec un positionnement absolu à l'intérieur d'un objet relativement positionné.Fonctionne lors de l'entrée dans la page ou via un changement de hachage dans la page.
la source
href="#anchor"
qui s'y trouve pointe là, au lieu de pointer<p>
directement vers l' élément. Mais un avertissement: utilisezid
plutôt quename
dans HTML5, voir: stackoverflow.com/questions/484719/html-anchors-with-name-or-idVoici la réponse 2020 à cela:
Parce que c'est largement soutenu !
la source
Meilleure solution
la source
Cela fonctionnera sans jQuery et au chargement de la page.
la source
Pour créer un lien vers un élément, puis `` positionner '' cet élément à une distance arbitraire du haut de la page, en utilisant du CSS pur, vous devrez utiliser
padding-top
, de cette façon, l'élément est toujours positionné en haut de la fenêtre, mais il apparaît , visiblement, positionné à une certaine distance du haut du port de vue, par exemple:CSS:
Démo de JS Fiddle .
Pour utiliser une approche JavaScript simple:
Démo de JS Fiddle .
la source
Cela devrait fonctionner:
Changez simplement le .top-49 en fonction de votre lien d'ancrage.
la source
Si vous utilisez des noms d'ancrage explicites tels que,
puis en css, vous pouvez simplement définir
Cela fonctionnera tant que vos balises d'ancrage HREF ne spécifient pas également un attribut NAME
la source
La réponse d'Eric est excellente, mais vous n'avez vraiment pas besoin de ce délai. Si vous utilisez jQuery, vous pouvez simplement attendre que la page se charge. Je suggère donc de changer le code en:
Cela nous permet également de nous débarrasser de ce facteur arbitraire.
la source
essayez ce code, il a déjà une animation fluide lorsque vous cliquez sur le lien.
la source
La solution la plus simple:
CSS
HTML
la source
Une variante de la solution de Thomas: élément CSS > sélecteurs d' élément peut être pratique ici:
CSS
HTML
Un clic sur le lien déplacera la position de défilement à 100px ci-dessus là où l'élément avec une classe de
paddedAnchor
est positionné.Pris en charge dans les navigateurs non IE et dans IE à partir de la version 9. Pour une prise en charge sur IE 7 et 8, a
<!DOCTYPE>
doit être déclaré.la source
Je viens de trouver une solution facile pour moi-même. Avait une marge supérieure de 15 px
HTML
CSS
la source
En utilisant uniquement css et n'ayant aucun problème avec le contenu couvert et non cliquable auparavant (le point en est le pointeur-événements: aucun):
CSS
HTML
la source
Mettez cela avec style:
et utilisez cette classe dans une
div
balise séparée avant les liens, exemple:ou utilisez ce code php pour la balise echo link:
la source
Je sais que c'est un peu tard, mais j'ai trouvé quelque chose de très important à mettre dans votre code si vous utilisez Scrollspy de Bootstrap. ( http://getbootstrap.com/javascript/#scrollspy )
Cela m'a rendu fou pendant des heures.
Le décalage de l'espion de défilement DOIT correspondre à window.scrollY sinon vous courrez le risque de:
la source
Basé sur la solution @Eric Olson , modifiez un peu pour inclure l'élément d'ancrage que je veux aller spécifiquement
la source
J'ai juste le même problème. J'ai un nav posé pixed et je veux que l'angkor démarre sous le nav. La solution
window.addEventListener...
ne fonctionne pas pour moi parce que j'ai configuré ma page pourscroll-behavior:smooth
qu'elle définisse le décalage au lieu de faire défiler vers l'angkor. lesetTimeout()
travail si le temps est écoulé pour faire défiler jusqu'à la fin mais il ne semble toujours pas bon. ma solution a donc été d'ajouter un div absolu posé dans angkor, avecheight:[the height of the nav]
etbottom:100%
. dans ce cas, ce div se termine en haut de l'élément angkor, et commence à la position où vous voulez faire défiler l'angkor. maintenant tout ce que je fais est de définir le lien angkor vers ce div absolu et le travail est fait :)la source
J'étais confronté au problème similaire et j'ai résolu en utilisant le code suivant
la source
la source