2012-08-08 18 views
5

Tengo un anclaje en un elemento que hace que la navegación salte a ese punto. Sin embargo, el ancla se ajusta a la parte superior de la ventana gráfica. Debido a una navegación fija, ahora está oculta detrás.Ancla no a la parte superior de la página, pero 200px abajo

¿Es posible hacer que el anclaje no encaje en la parte superior de la ventana gráfica y en su lugar 200px en la página?

sitio aquí: http://www.haselden.co.uk/james/docs

+0

asumiendo que está hablando de la flecha verde? –

Respuesta

5

Solución sucia para esto, pero funciona, gracias @SteveJenkins por idear esto, aunque agregué una modificación.

<a name="AnchorName" class="anchor">anchor text [invisible]</a> 

.anchor { 
    position: relative; 
    top: -[number]px; 
    visibility:hidden; 
} 
+0

Eso lo hizo :-) Al igual que una medida de seguridad utilicé un punto como texto, para asegurarme de que no se interponga de ninguna manera. – noregt

1

Añadir un elemento hiden 200 píxeles inferior y crea un ancla a la misma vez.

+0

Estoy tratando de evitar esto, esto fue lo que originalmente hice, pero causó un gran dolor al tratar de hacer que el espaciado de mi contenido funcionara. – Francesca

+0

Entonces puede probar una solución de @Steven Jenkins. – Kolyunya

8

Pude resolver esto aplicando CSS al ancla. Así que para el anclaje Tendría esto ...

<a name="AnchorName" class="anchor"></a> 

Y luego en el CSS que tendría este ...

.anchor { 
    position: relative; 
    top: -[number]px; 
} 

Tenga en cuenta que he notado algunas imprecisiones en qué medida el hipervínculo es el movido en diferentes navegadores. Por lo tanto, podría no ser posible hacer que las cosas se alineen perfectamente. Probablemente necesites un jQuery elegante o algo así si quieres que esté perfectamente posicionado.

+0

Intenté esto y no funcionó * realmente *. Al aplicarlo a mi H1 simplemente arrastra el h1 hasta la parte superior de la página, fuera de la vista. Así que lo saqué de mi h1 y lo convertí en un enlace vacío, como tu código. Esto no funcionó. Cuando llené el enlace para decir 'ancla' dentro de él funcionó, pero ahora hay un texto horrible en mi página que dice 'ancla'. Si bien esto funciona bien en esta área del sitio, no funcionará en las otras páginas. No puede haber texto que diga 'anclaje' escrito en toda la tienda. – Francesca

+0

Voy a darle una solución para esto, porque funciona aunque con una pequeña solución. Para hacer que el texto de anclaje que tenía que poner no apareciera, lo cambié a font-size: 0; para que no se muestre No piense que es la mejor manera de hacerlo, ya que el texto invisible en la página no es bueno, pero tendrá que funcionar. Aceptaré cualquier otro que venga y puedo ofrecer soluciones para arreglar esto sin ocultar el texto sobre la página. – Francesca

+0

Hmm ... No tuve esos problemas. Tal vez porque lo he estado haciendo como:

Anchor Text
Sin embargo, lo que sea. ¡Me alegro que lo hicieras funcionar! – rgbflawed

3

Tuve un problema similar y me encontré con esta pregunta. Ninguna respuesta funcionaba como yo quería. Tenía que ir un poco más lejos y quería compartir mis hallazgos.

Un poco de contexto primero. Estaba haciendo un tipo de análisis de errores que resalta áreas interesantes en una página de visualización de código fuente renderizada en HTML. Hay una tabla de índice que permite una navegación rápida, que está en un encabezado fijo de altura variable. Lo que explica por qué terminé en esta página de preguntas.

Mi problema era que el ancla se tomando el espacio visual ymover el código fuente en torno, cambiando el texto por la longitud del ancla y de jugar con el formato de código. Intenté varias formas de hacerlo NO tomar espacio, pero todavía existe en la página para que funcione el anclaje. Al final, en lugar de un . (según el comentario de @noregt), me conformé con &#008;, que sería el carácter de retroceso.

Cada anclaje se genera dinámicamente como <a name="[some unique name]" class="anchor">&#008;</a> y luego se hace referencia en el encabezado fijo.

Un poco de Javascript ayuda con la altura del encabezado dinámico y anclajes de posicionamiento (coge todos los anclajes y ajustar el relleno superior de forma dinámica):

<script type="text/javascript"><!-- 
var height = document.getElementById("head").offsetHeight; 
var a = document.getElementsByClassName('anchor'); 
// src: http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript 
for(key in a) { 
    if (a.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) { 
     a[key].style.paddingTop = height + 'px'; 
    } 
} 
--></script> 

Esta solución funciona perfectamente para anclajes generados dinámicamente con una altura variable pero fijo el encabezado. Espero que esto pueda ayudar a alguien más.

0

Esto es mucho más fácil ahora con CSS3. La explicación larga está aquí: https://css-tricks.com/hash-tag-links-padding/ pero la versión corta es

a::before { 
    display: block; 
    content: " "; 
    margin-top: -70px; 
    height: 70px; 
    visibility: hidden; 
} 
Cuestiones relacionadas