No estoy seguro de la mejor manera de hacer / buscar esta pregunta:
Cuando haces clic en un enlace de anclaje, te lleva a esa sección de la página con el área enlazada ahora en la parte SUPERIOR de la página. Me gustaría que el enlace de anclaje me envíe a esa parte de la página, pero me gustaría un poco de espacio en la parte superior. Como en, no quiero que me envíe a la parte vinculada a ella en la parte SUPERIOR, me gustaría tener más o menos 100 píxeles de espacio allí.
¿Esto tiene sentido? es posible?
Editado para mostrar código, es solo una etiqueta de anclaje:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
damon
fuente
fuente
Respuestas:
Esto permitirá que el navegador haga el trabajo de saltar al ancla para nosotros y luego usaremos esa posición para compensar.
EDITAR 1:
Como señaló @erb, esto solo funciona si está en la página mientras se modifica el hash. Entrar a la página con un
#something
ya en la URL no funciona con el código anterior. Aquí hay otra versión para manejar eso:NOTA: Para usar jQuery, puede reemplazar
window.addEventListener
con$(window).on
en los ejemplos. Gracias @Neon.EDITAR 2:
Como señalaron algunos, lo anterior fallará si hace clic en el mismo enlace de anclaje dos o más veces seguidas porque no hay ningún
hashchange
evento que fuerce el desplazamiento.Esta solución es una versión ligeramente modificada de la sugerencia de @Mave y utiliza selectores jQuery para simplificar
JSFiddle para este ejemplo está aquí
fuente
example.com/#anchor
deexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. De esta manera, si lahref
de una
elemento comienza con a#
, se llama a la misma función.$(window).on("hashchange",
conwindow.addEventListener("hashchange",
Al trabajar solo con CSS, puede agregar un relleno al elemento anclado (como en una solución anterior) Para evitar espacios en blanco innecesarios, puede agregar un margen negativo de la misma altura:
No estoy seguro si esta es la mejor solución en cualquier caso, pero funciona bien para mí.
fuente
position: relative
propiedad css. Entonces, sería comoposition: relative; top: -50px;
Aún mejor solución:
Simplemente coloque la
<a>
etiqueta con posicionamiento absoluto dentro de un objeto relativamente posicionado.Funciona al ingresar a la página o mediante un cambio hash dentro de la página.
fuente
href="#anchor"
dentro apunte allí, en lugar de apuntar al<p>
elemento directamente. Pero una advertencia: usar enid
lugar dename
en HTML5, ver: stackoverflow.com/questions/484719/html-anchors-with-name-or-idAquí está la respuesta 2020 para esto:
¡Porque es ampliamente compatible !
fuente
Mejor solución
fuente
Esto funcionará sin jQuery y en la carga de la página.
fuente
Para vincular a un elemento, y luego 'posicionar' ese elemento a una distancia arbitraria de la parte superior de la página, usando CSS puro, tendrías que usarlo
padding-top
, de esa manera el elemento todavía está posicionado en la parte superior de la ventana, pero parece , visiblemente, estar ubicado a cierta distancia de la parte superior del puerto de visualización, por ejemplo:CSS:
Demostración de JS Fiddle .
Para usar un enfoque simple de JavaScript:
Demostración de JS Fiddle .
fuente
Esto debería funcionar:
Simplemente cambie el .top-49 a lo que encaje con su enlace de anclaje.
fuente
Si usa nombres de ancla explícitos como,
entonces en CSS puedes simplemente configurar
Esto funcionará siempre que sus etiquetas de anclaje HREF no especifiquen un atributo NAME
fuente
La respuesta de Eric es genial, pero realmente no necesitas ese tiempo de espera. Si está utilizando jQuery, puede esperar a que se cargue la página. Entonces sugiero cambiar el código a:
Esto también nos libera de ese factor arbitrario.
fuente
pruebe este código, ya tiene una animación suave cuando hace clic en el enlace.
fuente
La solución más fácil:
CSS
HTML
fuente
Una variante de la solución de Thomas: los elementos CSS > selectores de elementos pueden ser útiles aquí:
CSS
HTML
Un clic en el enlace moverá la posición de desplazamiento a 100 px arriba donde sea que se encuentre el elemento con una clase de
paddedAnchor
.Compatible con navegadores que no son IE, y en IE desde la versión 9. Para compatibilidad con IE 7 y 8,
<!DOCTYPE>
debe declararse a.fuente
Acabo de encontrar una solución fácil para mí. Tenía un margen superior de 15 px
HTML
CSS
fuente
Usar solo css y no tener problemas con el contenido cubierto y no cliqueable antes (el punto es los eventos de puntero: ninguno):
CSS
HTML
fuente
Pon esto en estilo:
y use esta clase en una
div
etiqueta separada antes de los enlaces, por ejemplo:o use este código php para la etiqueta de enlace de eco:
fuente
Sé que esto es un poco tarde, pero encontré algo muy importante para poner en su código si está utilizando Bootstrap's Scrollspy. ( http://getbootstrap.com/javascript/#scrollspy )
Esto me estaba volviendo loco por horas.
El desplazamiento para el espía de desplazamiento DEBE coincidir con el window.scrollY o de lo contrario correrá el riesgo de:
fuente
Basado en la solución @Eric Olson , solo modifique un poco para incluir el elemento de anclaje que quiero ir específicamente
fuente
Solo tengo el mismo problema. Tengo una navegación colocada pixelada y quiero que el angkor comience debajo de la navegación. La solución
window.addEventListener...
no funciona para mí porque configuré mi página parascroll-behavior:smooth
que establezca el desplazamiento en lugar de desplazarme al angkor. elsetTimeout()
trabajo si el tiempo es suficiente para desplazarse hasta el final pero aún no se ve bien. entonces mi solución fue agregar un div absoluto posicionado en el angkor, conheight:[the height of the nav]
ybottom:100%
. en este caso, este div terminó en la parte superior del elemento angkor, y comienza en la posición donde se desplaza el angkor. ahora todo lo que hago es establecer el enlace de angkor a este div absoluto y el trabajo hecho :)fuente
Estaba enfrentando un problema similar y lo resolví usando el siguiente código
fuente
fuente