HTML - Server users.dimi.uniud.it

Laboratorio di Tecnologie Web
HTML: Hyperlink
Dott. Stefano Burigat
www.dimi.uniud.it/burigat
Aggiungere hyperlink
L'elemento che rende possibile aggiungere hyperlink a
risorse web è l'elemento inline contenitore <a> (anchor).
Tutto ciò che si trova tra il tag <a> di apertura ed il tag </a>
di chiusura viene automaticamente trasformato dal browser
in un hyperlink (al contrario delle versioni precedenti,
HTML5 non pone limiti al tipo di elementi che si possono
inserire all'interno dell'elemento <a>).
L'attributo “href” (hypertext reference) viene utilizzato per
specificare l'URL della risorsa (tipicamente una pagina
web) che verrà visualizzata quando l'utente cliccherà
sull'hyperlink. In assenza dell'attributo href, i browser
considerano l'elemento <a> come un placeholder per un
hyperlink ma non un hyperlink vero e proprio.
Ci sono principalmente due tipi di hyperlink:
• Gli hyperlink esterni puntano a risorse esterne al sito di
partenza
• Gli hyperlink interni puntano a risorse interne al sito di
partenza
Hyperlink a risorse esterne
Per creare un hyperlink ad una risorsa esterna, in particolare
una pagina web presente su un altro sito, è necessario
specificare l'URL della risorsa in modo assoluto,
includendo il protocollo di comunicazione (http://).
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>HTML5</h1>
<p>L'HTML5 è un <a
href="http://it.wikipedia.org/wiki/Linguaggio_di_markup">lingu
aggio di markup</a> per la strutturazione delle pagine
web...</p>
</article>
</body>
</html>
Di default, i browser visualizzano gli hyperlink (se costituiti
da testo) di colore blu e sottolineati, visualizzano il simbolo
di una mano quando si passa il puntatore del mouse sopra
un hyperlink, visualizzano gli hyperlink in rosso quando
vengono cliccati e di colore porpora quando sono stati
visitati. E' comunque possibile applicare uno stile diverso
agli hyperlink tramite CSS, anche se è sconsigliabile
modificarne in modo troppo marcato l'aspetto per non
confondere l'utente.
Hyperlink a risorse interne
La maggior parte degli hyperlink che vengono aggiunti alle
pagine web di un sito sono link a risorse interne presenti
sullo stesso server che ospita il sito (principalmente, altre
pagine web del sito). Per specificare tali hyperlink vengono
utilizzati tipicamente URL relativi, che indicano come
raggiungere una certa risorsa a partire dalla pagina web di
partenza in cui viene inserito l'hyperlink (più precisamente,
a partire dalla directory che contiene tale pagina). Gli URL
relativi vengono scritti senza indicazione del protocollo di
comunicazione e sono simili ai path dei file in un file
system tradizionale ma seguono la convenzione Unix di
separare directory e file tramite barra inclinata (forward
slash /). Gli URL relativi sono più corti e flessibili di quelli
assoluti e possono essere testati anche in locale, pur
funzionando senza alcuna modifica una volta che il sito
viene pubblicato online.
NOTA: per evitare errori nella scrittura dei path relativi,
fare attenzione alle seguenti regole:
• non usare il simbolo di backslash \ che viene utilizzato
nei path di Windows
• non utilizzare il nome del drive all'interno dei path (ad
esempio, C:). I link funzionerebbero in locale ma non
su server.
Illustrazione 1: Struttura del sito web di esempio
• non iniziare un path con “file://” (come iniziano i file
html aperti in locale). Di nuovo, i link funzionerebbero
in locale ma non su server.
• non utilizzare spazi o altri caratteri speciali nei nomi
dei file e delle directory, anche se questi sono permessi
nel file system locale.
Si supponga di avere un sito la cui struttura è rappresentata
nell'Illustrazione 1. Come per ogni altro sito web, esiste una
directory radice (indicata nell'illustrazione con il nome
“root” e tipicamente rappresentata negli URL con la barra
inclinata /) che contiene tutte le directory ed i file del sito.
All'interno della directory radice, ci sono due file html
(index.html e glossario.html) e due sottodirectory (esempi e
teoria). All'interno della directory “teoria” ci sono due file
html (html5.html e java.html) mentre all'interno della
directory “esempi” ci sono due sottodirectory (html5 e
java), ciascuna delle quali contiene due file (in entrambi i
casi, chimati esempio1.html ed esempio2.html).
NOTA: di default, il contenuto che viene mostrato quando
si apre un certo sito web senza indicare un file specifico è
quello contenuto nel file index.html (questo comportamento
viene definito a livello di server).
L'URL relativo più semplice è quello che punta ad un altro
file nella stessa directory. In tal caso, è sufficiente inserire il
nome del file di destinazione come valore dell'attributo
“href” dell'hyperlink. L'esempio seguente mostra come
creare un hyperlink dalla pagina index.html alla pagina
glossario.html.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>HTML5</h1>
<p>L'HTML5 è un <a
href="http://it.wikipedia.org/wiki/Linguaggio_di_markup">lingu
aggio di markup</a> per la strutturazione delle pagine
web...</p>
<aside>
<p><a href="glossario.html">Vai al
glossario</a></p>
</aside>
</article>
</body>
</html>
Per definire un URL verso un file appartenente ad un livello
più basso della gerarchia è necessario indicare quali
directory è necessario passare. Ad esempio, un hyperlink
dalla pagina index.html alla pagina html5.html deve passare
per la directory “teoria” che sta allo stesso livello di
index.html.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>HTML5</h1>
<p>L'HTML5 è un <a
href="http://it.wikipedia.org/wiki/Linguaggio_di_markup">lingu
aggio di markup</a> per la strutturazione delle pagine
web...</p>
<aside>
<p><a href="teoria/html5.html">Vai alla
documentazione dettagliata su HTML5.</a></p>
</aside>
</article>
</body>
</html>
Il seguente esempio mostra un hyperlink dalla pagina
index.html alla pagina esempio1.html nella cartella java,
passando per la cartella esempi.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<aside>
<p><a href="esempi/java/esempio1.html">Esempio di
codice java.</a></p>
</aside>
</article>
</body>
</html>
Per poter creare degli hyperlink a pagine presenti in un
livello superiore, è necessario includere nel path la
sequenza ../ che informa il browser di salire di un livello
nella struttura di directory del sito a partire dalla directory
corrente. L'esempio seguente mostra un hyperlink dalla
pagina html5.html alla pagina index.html.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Documentazione su HTML5</h1>
<section>
<h1>Introduzione al linguaggio</h1>
<p>Oltre ad aver introdotto alcuni nuovi elementi
di markup mirati ad arricchire il contenuto semantico dei
documenti HTML, HTML5 ...</p>
</section>
<section>
<h1>Nuovi elementi semantici HTML5</h1>
<p>L'HTML5 ha introdotto un certo numero di nuovi
elementi che servono a suddividere semanticamente una pagina
nelle sue parti costituenti ...</p>
</section>
<aside>
<a href="../index.html">Torna alla home</a>
</aside>
</article>
</body>
</html>
L'esempio seguente mostra come salire di due livelli, dalla
pagina esempio1.html nella directory java alla pagina
index.html. Come si vede, è sufficiente concatenare più
sequenze ../ per poter risalire di più livelli.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Esempio di codice Java</h1>
<p>Il codice nel frammento 1 rappresenta un esempio
minimale di classe Java.</p>
<figure>
<pre><code>
class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello world!");
}
}
</code></pre>
<figcaption>Frammento1. Esempio minimale di classe
Java.</figcaption>
</figure>
</article>
<aside>
<a href="../../index.html">Torna alla home</a>
</aside>
</body>
</html>
L'esempio seguente mosta come si possa salire di livello e
poi scendere tramite un unico link, passando in questo caso
dalla pagina java.html nella directory “teoria” alla pagina
esempio1.html nella directory “java”.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Documentazione su Java</h1>
<section>
<h1>Introduzione al linguaggio</h1>
<p>Uno dei principi fondamentali del linguaggio
Java è espresso dal motto write once, run anywhere ...</p>
</section>
<section>
<h1>Storia</h1>
<p>Java è stato creato a partire da ricerche
effettuate alla Stanford University agli inizi degli anni
Novanta ...</p>
</section>
<aside>
<a href="../esempi/java/esempio1.html">Guarda un
esempio di codice Java</a>
</aside>
</article>
</body>
</html>
In alternativa a specificare un hyperlink in modo relativo
alla pagina che contiene il link stesso è possibile specificare
gli hyperlink in modo relativo alla radice del sito. Un path
che comincia alla radice di un sito inizia sempre con il
simbolo /. Il link mostrato sopra potrebbe ad esempio essere
sostituito con quello seguente per poter ottenere lo stesso
risultato.
<a href="/esempi/java/esempio1.html">Guarda un esempio di
codice Java</a>
Specificare gli hyperlink in modo relativo alla radice
consente di poter spostare i file che li contengono senza
dover modificare il codice (utile ad esempio quando le
pagine vengono generate dinamicamente) oltre a
semplificare il riutilizzo dei link in documenti diversi.
Dall'altra parte, i link relativi alla radice non funzionano in
locale (in quanto la radice in tal caso è l'unità sulla quale è
presente il file) ma solo quando il sito viene reso
disponibile sul server (nel qual caso la radice è configurata
per essere la directory principale del sito).
Oltre a poter creare link tra pagine diverse di un sito, è
anche possibile creare link che puntano ad una parte
specifica della stessa pagina nella quale il link è inserito (in
gergo tecnico, si parla di link a frammenti di una pagina).
Ciò è utile in particolare per facilitare la navigazione
all'interno di pagine lunghe. Il processo che si deve seguire
è composta da due passi: 1) identificare la destinazione, 2)
creare il link alla destinazione.
Il primo passo consiste nel definire l'attributo “id”
dell'elemento al quale si vuole puntare, specificando un
identificatore univoco. Normalmente, si utilizzano come
destinazione elementi di tipo blocco come <h1>...<h6>,
<div>, <article>, <section>, etc. anche se non ci sono
particolari vincoli a riguardo.
A questo punto è possibile creare il link alla destinazione,
specificando come valore dell'attributo href l'identificatore
della destinazione preceduto dal simbolo #.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<nav>
<ul>
<li><a href="#intro">Introduzione al
linguaggio</a></li>
<li><a href="#storia">Storia</a></li>
</ul>
</nav>
<article>
<h1>Documentazione su Java</h1>
<section id="intro">
<h1>Introduzione al linguaggio</h1>
<p>Uno dei principi fondamentali del linguaggio
Java è espresso dal motto write once, run anywhere ...</p>
</section>
<section id="storia">
<h1>Storia</h1>
<p>Java è stato creato a partire da ricerche
effettuate alla Stanford University agli inizi degli anni
Novanta ...</p>
</section>
<aside>
<a href="/esempi/java/esempio1.html">Guarda un
esempio di codice Java</a>
</aside>
</article>
</body>
</html>
Lo stesso processo utilizzato per creare dei link a frammenti
della stessa pagina si può utilizzare per creare link a
frammenti di altre pagine o di altri siti (in quest'ultimo caso,
è necessario guardare il codice dei siti destinazione per
determinare l'identificatore dei frammenti a cui si vuole
puntare, se esistente). In tali casi, è sufficiente aggiungere
l'identificatore (preceduto dal simbolo #) in coda all'URL
(relativo o assoluto) della pagina nella quale è contenuto il
frammento destinazione.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<aside>
<p><a href="teoria/java.html#intro">Introduzione
al linguaggio.</a></p>
<p><a href="esempi/java/esempio1.html">Esempio di
codice java.</a></p>
</aside>
</article>
</body>
</html>
Aprire un link in una nuova finestra
Se è necessario aprire un link senza sovrascrivere la finestra
corrente, è possibile specificare l'attributo “target” con
valore “_blank”. A seconda di come il browser è
configurato, questo può portare alla creazione di una nuova
tab oppure di una nuova finestra vera e propria. In generale,
tale soluzione è sconsigliata e a volte viene bloccata dal
pop-up blocker del browser.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<aside>
<p><a href="teoria/java.html#intro">Introduzione
al linguaggio.</a></p>
<p><a href="esempi/java/esempio1.html"
target="_blank">Esempio di codice java.</a></p>
</aside>
</article>
</body>
</html>
Ogni link con target _blank viene aperto in una nuova tab o
finestra. Per evitare tale proliferazione, è possibile
specificare un valore diverso da _blank e utilizzare sempre
tale valore per tutti i link.
Link mail e telefonici
Utilizzando il protocollo “mailto” all'interno di un link, è
possibile fare in modo che si apra un client di posta quando
l'utente clicca sul link. Affinchè ciò avvenga, il browser
deve essere configurato a tale scopo (in caso contrario, non
succede niente).
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<footer>
<address><a
href="mailto:[email protected]">Contattaci</a></address>
<footer>
</article>
</body>
</html>
Tenete comunque presente che inserire un indirizzo mail in
una pagina web in questo modo può portare alla sua
estrazione automatica da parte di spam bot, con le
conseguenze negative del caso (provate a vedere il sito
http://hivelogic.com/enkoder/ per una soluzione basata su
JavaScript che cripta l'indirizzo).
E' anche possibile utilizzare il protocollo “tel” per inserire
un numero di telefono in un link. Sui dispositivi mobili,
cliccando su tale link è possibile effettuare direttamente una
telefonata al numero specificato (il comportamento preciso
può variare da piattaforma a piattaforma).
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<footer>
<address>
<a href="mailto:[email protected]">Contattaci
via mail</a>
<br/>
<a href="tel:+391234">Contattaci via
telefono</a>
</address>
<footer>
</article>
</body>
</html>
Utilizzo dei link
Il contenuto interno all'elemento <a> è importante per i
motori di ricerca. Bisogna cercare di utilizzare testi
esplicativi (“I nostri prodotti”, “Contattaci”, etc.) piuttosto
che testi generici tipo “clicca qui”.
Evitare di riempire le pagine web di link relativi a
frammenti. Questo tipo di link va utilizzato solo se ce n'è
bisogno, ad esempio se la pagina è molto lunga ed è
suddivisa in sezioni.
La maggior parte dei link che abbiamo visto (e che vengono
specificati nelle pagine web) sono link ad altre pagine o
frammenti di pagina ma è possibile anche creare link a
risorse come immagini (jpeg, gif, png) o altri tipi di file
come i file pdf, documenti office, file mp3, etc. Nel caso
delle immagini, il browser le apre in una finestra separata
senza alcun altro contenuto. Nel caso degli altri tipi di file,
se il browser è dotato di apposito plugin, tale plugin viene
attivato per gestire il file. Altrimenti, all'utente viene data la
possibilità di scaricare il file in locale o di aprire uno
specifico programma sulla sua macchina.
<!DOCTYPE html>
<html>
<head>
<title>
Tecnologie web
</title>
</head>
<body>
<article>
<h1>Java</h1>
<p>Java è un linguaggio di programmazione orientato
agli oggetti.</p>
<a href="tree.png">Struttura del sito</a>
</article>
</body>
</html>
Durante lo sviluppo e la gestione di un sito web, può
capitare che le pagine vengano modificate ed i contenuti
spostati da una pagina ad un'altra. In tal caso, è
fondamentale verificare che tutti i link continuino a
funzionare. Esistono dei tool, come quello messo a
disposizione all'indirizzo http://validator.w3.org/checklink
che permettono di fare una verifica automatica dei link.
Modificare la struttura di un sito o delle sue pagine può
spezzare i link che altri siti esterni hanno creato verso tale
sito e dovrebbe essere evitato. Se non si può evitare, è
possibile gestire il problema utilizzando la redirezione: le
pagine che vengono modificate vengono mantenute ma
svuotate del loro contenuto che viene sostituito con del
codice apposito che indica la modifica e carica
automaticamente la nuova pagina dopo alcuni secondi. Per
ottenere questo comportamento, è necessario utilizzare un
apposito elemento <meta> da inserire all'interno
dell'elemento <head>.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="REFRESH" content="10;
URL=glossario2.html" />
<title>Redirect</title>
</head>
<body>
<h1>La pagina che cerchi è stata spostata</h1>
<p>Aggiorna i bookmark. La nuova pagina si trova
all'indirizzo <a
href="glossario2.html">http://www.mysite.com/glossario2.html</
a>.</p>
<p>Verrai reindirizzato alla nuova pagina in 10 secondi.
Clicca <a href="glossario2.html"> qui</a> per visitare la
nuova pagina immediatamente.</p>
</body>
</html>