2010-05-10 17 views

risposta

89

È un "frammento" o "ancora denominata". È possibile utilizzare per collegare a parte di un documento. In genere quando si collega a una pagina, il browser lo apre nella parte superiore della pagina. Ma ti colleghi a una sezione a metà, puoi usare il frammento per collegarti a quell'intestazione (o qualsiasi altra cosa).

Se non c'è un tag <a name="whatever"/> all'interno della pagina, il browser si collegherà solo all'inizio della pagina. Se il frammento è vuoto, si collegherà anche alla parte superiore della pagina.

Per un frammento solo<a href="#">Link name</a>, quindi questo è solo un link alla parte superiore della pagina di corrente.

Spesso si vede quel tipo di collegamento utilizzato in congiunzione con javascript. L'HTML conforme agli standard richiede un attributo href, ma se hai intenzione di gestire la richiesta con javascript, allora "#" funge da titolare del posto ragionevole.

+1

+1 Sebbene il termine ufficiale sia un frammento di URL, non un "riferimento all'hash": http://www.w3.org/TR/WD-html40-970708/htmlweb.html#h-4.1.1 –

+0

Sì , L'ho cambiato in "frammento" nella mia risposta, perché è quello che la maggior parte delle persone usa. Non ho mai saputo che avesse un nome "ufficiale" però :) –

+2

Perché i browser lo trattano come "vai in cima alla pagina": tecnicamente hai cambiato pagina. Dopo aver fatto clic sul collegamento, noterai che il # viene effettivamente aggiunto all'URL nella barra degli indirizzi e se fai clic sul pulsante Indietro lo rimuoverà di nuovo. Non direi che è un collegamento a una parte di un documento, più un link a un posto all'interno del documento. Altrimenti, fondamentalmente la stessa cosa che stavo scrivendo ... – animuson

2

Questo collega alla pagina stessa. Viene spesso utilizzato con collegamenti che eseguono effettivamente JavaScript.

22

... solo per aggiungere alcuni suggerimenti utili extra.

È possibile accedervi e modificarlo con document.location.hash in JavaScript.

Si può indicare una chiamata ancoraggio (per esempio <a name="top"></a>) o ad un elemento con una corrispondente id (per esempio <div id="top"></div>).

Vedere uno a sé stante (ad esempio <a href="#" onclick="pop()">popup</a>) significa in genere un collegamento viene utilizzato per eseguire JavaScript in modo esclusivo. Questa è una cattiva pratica.

Qualsiasi elemento a deve avere un href che punta a una risorsa valida. Se uno non esiste, considera l'utilizzo di un altro elemento, ad esempio button.

+1

Questo è un buon punto a riguardo, non particolarmente buone pratiche ... ma solo perché non è buono non significa che non lo si troverà usato in quel modo per tutto il posto :) –

+1

@alex, se è una cattiva pratica, allora dicci quale sarebbe la migliore pratica * da usare. –

+0

@Kyralessa Era proprio lì nel prossimo paragrafo. Comunque, ho fatto una modifica quindi spero sia più chiara. – alex

9

# indica un collegamento a un'ancora.

mi thougt Vorrei anche menzionare un'altra cosa:

Usando '#' come il href per un link che attiva JavaScript è un male perché scorre la pagina verso l'alto - che probabilmente non è ciò che si vuole. Utilizzare invece javascript:void(0).

+0

+1 per aver menzionato che facendo clic su questi collegamenti, la pagina viene spostata verso l'alto. –

+4

Non hai più bisogno di un ancoraggio. A partire da HTML5 (e forse HTML 4) qualsiasi elemento con un tag può essere scelto come target da un identificatore di frammento. Vedi documenti HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#scroll-to-fragid –

+1

Non utilizzare 'javascript: void (0)' usa un 'pulsante' se non è un link. – alex

6

Il simbolo cancelletto (#) indica di individuare un'ancora sulla pagina. Ad esempio, se si include questo da qualche parte sulla pagina:

<a name="foo"></a> 

o, più recentemente:

<div id="foo">*part of page*</div> 

e poi si fa clic su un link sulla pagina che ha il href #foo, si navigherà all'ancora con il nome o div con l'id foo.

Tuttavia, se si dispone solo dello href #, questo verrà visualizzato nella parte superiore della pagina.

Problemi correlati