2012-08-08 9 views

risposta

5

Soluzione sporca per questo, ma funziona, grazie @SteveJenkins per aver inventato questo, anche se ho aggiunto un tweak.

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

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

Questo lo ha fatto :-) Proprio come misura di sicurezza ho usato un punto come testo, per essere sicuro che comunque non si sarebbe intromesso. – noregt

1

Aggiungi un elemento Hiden 200px inferiore e fa un ancoraggio ad esso, invece.

+0

Sto cercando di evitarlo, questo era ciò che avevo originariamente fatto ma non ha causato alcuna sofferenza quando ho cercato di far funzionare la spaziatura dei miei contenuti. – Francesca

+0

Quindi puoi provare una soluzione di @Steven Jenkins. – Kolyunya

8

Sono stato in grado di risolvere questo problema applicando il CSS all'ancora. Così per l'ancora avrei questo ...

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

E poi in CSS avrei questo ...

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

Nota che ho notato alcune imprecisioni in quanto lontano l'ancora è spostato in diversi browser. Quindi potrebbe non essere possibile allineare perfettamente le cose. Probabilmente avresti bisogno di un po 'di jQuery o qualcosa di simile se volessi che fosse perfettamente posizionato.

+0

Provato questo e non * davvero * funziona. Quando lo si applica al mio H1 trascina semplicemente la h1 fino alla cima della pagina, fuori dalla vista. Così l'ho rimosso dalla mia h1 e l'ho inserito in un link vuoto, come il tuo codice. Questo non ha funzionato. Quando ho inserito il link per dire "anchor" al suo interno, ha funzionato, ma ora nella mia pagina c'è un testo orribile che dice "anchor". Mentre questo funziona correttamente su questa area del sito, non funzionerà sulle altre pagine. Non è possibile avere il testo che dice "ancora" scritto in tutto il negozio. – Francesca

+0

Ho intenzione di darvi una soluzione per questo, perché funziona anche se con una piccola correzione. Per rendere il testo di ancoraggio che ho dovuto inserire non lo ho modificato in font-size: 0; in modo che non venga visualizzato. Non pensare che sia il modo migliore per farlo come testo invisibile nella pagina non è buono, ma dovrà fare. Accetterò tutti gli altri che arrivano e posso offrire soluzioni per risolvere questo problema senza nascondere il testo della pagina. – Francesca

+0

Hmm ... Non ho avuto questi problemi. Forse perché lo stavo facendo così:

Anchor Text
Comunque, comunque. Sono felice che tu abbia funzionato! – rgbflawed

3

Ho avuto un problema simile e venne su questa domanda. Nessuna risposta funzionava come volevo. Dovevo andare un po 'oltre e volevo condividere le mie scoperte.

Un po 'di contesto prima. Stavo facendo una sorta di analisi degli errori che evidenziava le aree interessanti in una pagina di visualizzazione codice sorgente resa HTML. C'è una tabella degli indici che consente una navigazione veloce, che si trova in un'intestazione a variabile dell'altezza fissa. Questo spiega perché sono finito su questa pagina di domande.

mio problema era che l'ancora è stata prendendo spazio visivo e spostando il codice sorgente intorno, spostando il testo in base alla lunghezza del ancoraggio e scherzi con formattazione del codice. Ho provato diversi modi per farlo NON occupano spazio ma esistono ancora nella pagina in modo che l'ancoraggio funzioni. Alla fine, invece di un . (come nel commento di @ noregt), ho optato per &#008; che sarebbe il carattere backspace.

Ogni ancore viene generata dinamicamente come <a name="[some unique name]" class="anchor">&#008;</a> e quindi indicata nell'intestazione fissa.

Un po 'di JavaScript aiuta con il posizionamento altezza intestazione dinamica ed ancoraggi (afferra tutte le ancore e regolare il padding superiore dinamicamente):

<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> 

Questa soluzione funziona perfettamente per tasselli generati dinamicamente con altezza variabile ma intestazione fissa. Spero che questo possa aiutare qualcun altro.