Argomenti
I frame HTML permettono agli autori di presentare i documenti in visualizzazioni multiple, che possono essere finestre indipendenti o sub-finestre. Le visualizzazioni multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentre altre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all'interno della stessa finestra, un frame potrebbe visualizzare un banner statico, il secondo un menu di navigazione, e il terzo il documento principale che può essere fatto scorrere comunque o rimpiazzato navigando nel secondo frame.
Ecco un semplice documento con frame:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Un semplice documento frameset</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAMESET rows="100, 200"> <FRAME src="contenuti_del_frame1.html"> <FRAME src="contenuti_del_frame2.gif"> </FRAMESET> <FRAME src="contenuti_del_frame3.html"> <NOFRAMES> <P>Questo documento frameset contiene: <UL> <LI><A href="contenuti_del_frame1.html">Del contenuto opportuno</A> <LI><IMG src="contenuti_del_frame2.gif" alt="Un'immagine opportuna"> <LI><A href="contenuti_del_frame3.html">Dell'altro contenuto opportuno</A> </UL> </NOFRAMES> </FRAMESET> </HTML>
che potrebbe creare una configurazione di frame simile a questa:
--------------------------------------- | | | | | | | Frame 1 | | | | | | | | |---------| | | | Frame 3 | | | | | | | | | | | Frame 2 | | | | | | | | | | | | | | ---------------------------------------
Se l'interprete non può visualizzare i frame o non è configurato per farlo, esso presenterà i contenuti dell'elemento NOFRAMES.
Un documento HTML che descrive la configurazione dei frame (chiamato documento basato su frame) ha un'apparenza diversa da un documento HTML senza frame. Un documento standard ha una sezione HEAD e una sezione BODY. Un documento basato su frame ha una sezione HEAD, e una FRAMESET al posto della sezione BODY.
La sezione FRAMESET di un documento specifica la configurazione delle visualizzazioni nella finestra principale dell'interprete. Inoltre, la sezione FRAMESET può contenere un elemento NOFRAMES per fornire contenuto alternativo per gli interpreti che non supportano i frame o che sono configurati per non visualizzarli.
Gli elementi che potrebbero normalmente essere posti nell'elemento BODY non devono comparire prima del primo elemento FRAMESET altrimenti il FRAMESET sarà ignorato.
<![ %HTML.Frameset; [ <!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- suddivisione della finestra --> <!ATTLIST FRAMESET %coreattrs; -- id, class, style, title -- rows %MultiLengths; #IMPLIED -- lista delle lunghezze, predefinito: 100% (1 riga) -- cols %MultiLengths; #IMPLIED -- lista delle lunghezze, predefinito: 100% (1 colonna) -- onload %Script; #IMPLIED -- tutti i frame sono stati caricati -- onunload %Script; #IMPLIED -- tutti i frame sono stati rimossi -- > ]]>
Definizioni degli attributi
Attributi definiti altrove
L'elemento FRAMESET specifica la configurazione della finestra principale dell'utente nei termini di subspazi rettangolari.
Impostare l'attributo rows definisce il numero di subspazi orizzontali in un insieme di frame (frameset). Impostare l'attributo cols definisce il numero di subspazi verticali. Entrambi gli attributi possono essere impostati simultaneamente per creare una griglia.
Se l'attributo rows non è impostato, ciascuna colonna si estende sull'intera lunghezza della pagina. Se l'attributo cols non è impostato, ciascuna riga si estende sull'intera larghezza della pagina. Se nessuno dei due attributi è impostato, il frame occupa esattamente le dimensioni della pagina.
I frame sono creati da sinistra a destra per le colonne e dall'alto in basso per le righe. Quando entrambi gli attributi sono specificati, le visualizzazioni vengono create da sinistra a destra nella prima riga in alto, da sinistra a destra nella seconda riga, ecc.
Il primo esempio divide lo schermo verticalmente in due (cioè, crea una metà superiore e una metà inferiore).
<FRAMESET rows="50%, 50%"> ...il resto della definizione... </FRAMESET>
L'esempio successivo crea tre colonne: la seconda ha una larghezza fissa di 250 pixel (utile, per esempio, per contenere un'immagine di dimensioni conosciute). La prima riceve il 25% dello spazio rimanente e la terza il 75% dello spazio rimanente.
<FRAMESET cols="1*,250,3*"> ...il resto della definizione... </FRAMESET>
L'esempio seguente crea una griglia 2x3 di subspazi.
<FRAMESET rows="30%,70%" cols="33%,34%,33%"> ...il resto della definizione... </FRAMESET>
Per l'esempio seguente, si supponga che la finestra del browser sia attualmente alta 1000 pixel. Alla prima visualizzazione viene assegnato il 30% dell'altezza totale (300 pixel). Per la seconda visualizzazione è specificata l'altezza esatta di 400 pixel. Questo lascia 300 pixel che possono essere suddivisi tra gli altri due frame. L'altezza del quarto frame è specificata come "2*", così è alta due volte il terzo frame, la cui altezza è soltanto "*" (equivalente a 1*). Perciò il terzo frame sarà alto 100 pixel e il quarto 200 pixel.
<FRAMESET rows="30%,400,*,2*"> ...il resto della definizione... </FRAMESET>
Lunghezze assolute che sommandosi non raggiungono il 100% del reale spazio disponibile dovrebbero essere aggiustate dall'interprete . Quando sotto-dimensionato, lo spazio rimanente dovrebbe essere assegnato proporzionalmente a ciascuna visualizzazione. Quando sovradimensionato, ogni visualizzazione dovrebbe essere ridotta in base alla proporzione specificata del suo spazio totale.
Gli insiemi di frame possono essere annidati a qualsiasi livello.
Nel seguente esempio, il FRAMESET esterno divide lo spazio disponibile in tre colonne uguali. Il FRAMESET interno poi divide la seconda area in due righe di altezza diversa.
<FRAMESET cols="33%, 33%, 34%"> ...contenuti del primo frame... <FRAMESET rows="40%, 50%"> ...contenuti del secondo frame, prima riga... ...contenuti del secondo frame, seconda riga... </FRAMESET> ...contenuti del terzo frame... </FRAMESET>
Gli autori possono condividere dati tra diversi frame includendo questi dati attraverso un elemento OBJECT. Gli autori dovrebbero includere l'elemento OBJECT nell'elemento HEAD di un documento frameset e dargli il nome con l'attributo id. Qualsiasi documento che sia il contenuto di un frame nel frameset può fare riferimento a questo identificatore.
Il seguente esempio illustra come uno script possa fare riferimento ad un elemento OBJECT definito per un intero frameset:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Questo è un frameset con OBJECT nella HEAD</TITLE> <!-- Questo OBJECT non viene presentato! --> <OBJECT id="myobject" data="data.bar"></OBJECT> </HEAD> <FRAMESET> <FRAME src="bianca.html" name="bianca"> </FRAMESET> </HTML> <!-- In bianca.html --> <HTML> <HEAD> <TITLE>Pagina di Bianca</TITLE> </HEAD> <BODY> ...l'inizio del documento... <P> <SCRIPT type="text/javascript"> parent.myobject.myproperty </SCRIPT> ...il resto del documento... </BODY> </HTML>
<![ %HTML.Frameset; [ <!-- i nomi di frame riservati iniziano con "_" altrimenti iniziano con una lettera --> <!ELEMENT FRAME - O EMPTY -- subfinestra --> <!ATTLIST FRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- collegamento ad una descrizione estesa (complementa il titolo) -- name CDATA #IMPLIED -- nome del frame per la destinazione -- src %URI; #IMPLIED -- sorgente del contenuto del frame -- frameborder (1|0) 1 -- richiesta bordi del frame? -- marginwidth %Pixels; #IMPLIED -- ampiezza margini in pixel -- marginheight %Pixels; #IMPLIED -- altezza margini in pixel -- noresize (noresize) #IMPLIED -- consente agli utenti ridimensionamento di frame? -- scrolling (yes|no|auto) auto -- barra di scorrimento o no -- > ]]>
Definizioni degli attributi
Attributi definiti altrove
L'elemento FRAME definisce i contenuti e l'aspetto di un singolo frame.
L'attributo src specifica il documento iniziale che il frame conterrà.
Il documento HTML di esempio che segue:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Un documento frameset</TITLE> </HEAD> <FRAMESET cols="33%,33%,33%"> <FRAMESET rows="*,200"> <FRAME src="contenuti_del_frame1.html"> <FRAME src="contenuti_del_frame2.gif"> </FRAMESET> <FRAME src="contenuti_del_frame3.html"> <FRAME src="contenuti_del_frame4.html"> </FRAMESET> </HTML>
dovrebbe creare una configurazione dei frame simile a questa:
------------------------------------------ |Frame 1 |Frame 3 |Frame 4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -------------| | | |Frame 2 | | | | | | | | | | | ------------------------------------------
e far caricare all'interprete ciascun file in una visualizzazione separata.
I contenuti di un frame non devono trovarsi nello stesso documento che contiene la definizione del frame.
ESEMPIO ILLEGALE:
La definizione di un insieme di frame che segue non è HTML legale dal momento
che i contenuti del secondo frame si trovano nello stesso documento in cui si
trova l'insieme dei frame.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Un documento frameset</TITLE> </HEAD> <FRAMESET cols="50%,50%"> <FRAME src="contenuti_del_frame1.html"> <FRAME src="#ancoraggio_nello_stesso_documento"> <NOFRAMES> ...del testo... <H2><A name="ancoraggio_nello_stesso_documento">Sezione importante</A></H2> ...del testo... </NOFRAMES> </FRAMESET> </HTML>
L'esempio seguente illustra l'uso degli attributi FRAME decorativi. Vi si specifica che il frame 1 non permetterà barre di scorrimento. Frame 2 lascerà spazio bianco intorno al suo contenuto (inizialmente, un file immagine) e il frame non sarà ridimensionabile. Nessun bordo sarà disegnato tra i frame 3 e 4. I bordi saranno disegnati (per impostazione predefinita) tra i frame 1, 2 e 3.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Un documento frameset</TITLE> </HEAD> <FRAMESET cols="33%,33%,33%"> <FRAMESET rows="*,200"> <FRAME src="contenuti_del_frame1.html" scrolling="no"> <FRAME src="contenuti_del_frame2.gif" marginwidth="10" marginheight="15" noresize> </FRAMESET> <FRAME src="contenuti_del_frame3.html" frameborder="0"> <FRAME src="contenuti_del_frame4.html" frameborder="0"> </FRAMESET> </HTML>
Nota. Per informazioni sulla pratica corrente nel determinare la destinazione di un frame, si consultino le note relative ai frame nell'appendice.
Definizioni degli attributi
Si consulti il paragrafo sui nomi dei frame di destinazione per informazioni sui nomi di frame riconosciuti.
Questo esempio illustra come le destinazioni permettono la modifica dinamica del contenuto del frame. Prima si definisce un insieme di frame nel documento frameset.html, mostrato qui:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> <HTML> <HEAD> <TITLE>Un documento frameset</TITLE> </HEAD> <FRAMESET rows="50%,50%"> <FRAME name="fixed" src="init_fixed.html"> <FRAME name="dynamic" src="init_dynamic.html"> </FRAMESET> </HTML>
Poi, in init_dynamic.html, ci si collega al frame chiamato "dynamic".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <HEAD> <TITLE>Un documento con riferimenti con specifiche destinazioni</TITLE> </HEAD> <BODY> ...inizio del documento... <P>Ora si può andare avanti a <A href="slide2.html" target="dynamic">slide 2.</A> ...ulteriore documento... <P>Te la stai cavando bene. Ora avanti a <A href="slide3.html" target="dynamic">slide 3.</A> </BODY> </HTML>
L'attivazione di entrambi i collegamenti apre un nuovo documento nel frame chiamato "dynamic" mentre l'altro frame, "fixed", mantiene il suo contenuto iniziale.
Non c'è attualmente nessun modo per codificare l'intero stato di un insieme di frame in un URI. Perciò, molti interpreti non permettono agli utenti di assegnare un segnalibro ad un insieme di frame.
Quando molti collegamenti nello stesso documento designano la stessa destinazione, è possibile specificare la destinazione una volta e fare a meno dell'attributo target di ogni elemento. Questo viene fatto impostando l'attributo target dell'elemento BASE.
Ritorniamo all'esempio precedente, questa volta depositando le informazioni di destinazione, definendole nell'elemento BASE e rimuovendole dagli elementi A.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <HTML> <HEAD> <TITLE>Un documento con BASE con una specifica destinazione</TITLE> <BASE href="http://www.mycom.com/Slides" target="dynamic"> </HEAD> <BODY> ...inizio del documento... <P>Ora puoi andare avanti a <A href="slide2.html">slide 2.</A> ...ulteriore documento... <P>Te la stai cavando bene. Ora vai avanti a <A href="slide3.html">slide 3.</A> </BODY> </HTML>
Gli interpreti dovrebbero determinare il frame di destinazione nel quale caricare una risorsa collegata in base alle seguenti precedenze (in ordine decrescente di priorità):
Gli interpreti possono fornire agli utenti un meccanismo per sovrascrivere l'attributo target.
Gli autori dovrebbero fornire contenuto alternativo per quegli interpreti che non supportano frame o sono configurati per non visualizzarli.
<![ %HTML.Frameset; [ <!ENTITY % noframes.content "(BODY) -(NOFRAMES)"> ]]> <!ENTITY % noframes.content "(%flow;)*"> <!ELEMENT NOFRAMES - - %noframes.content; -- contenitore del contenuto alternativo per presentazione non basata su frame --> <!ATTLIST NOFRAMES %attrs; -- %coreattrs, %i18n, %events -- >
L'elemento NOFRAMES specifica contenuto che dovrebbe essere visualizzato solo quando non vengono visualizzati i frame. Gli interpreti che supportano i frame devono solo visualizzare i contenuti di una dichiarazione NOFRAMES quando configurati per non visualizzare frame. Gli interpreti che non supportano frame devono visualizzare i contenuti del NOFRAMES in ogni caso.
Il NOFRAMES può essere usato nella sezione FRAMESET di un documento frameset.
Per esempio:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40"> <HTML> <HEAD> <TITLE>Un documento frameset con NOFRAMES</TITLE> </HEAD> <FRAMESET cols="50%, 50%"> <FRAME src="principale.html"> <FRAME src="sommario.html"> <NOFRAMES> <P>Ecco la <A href="principale-noframes.html"> versione del documento non basata su frame.</A> </NOFRAMES> </FRAMESET> </HTML>
L'attributo longdesc permette agli autori di rendere i documenti del frame più accessibili alle persone che usano interpreti non visuali. Questo attributo designa una risorsa che fornisce una descrizione estesa del frame. Gli autori dovrebbero notare che descrizioni estese associate con i frame sono allegate al frame, non al contenuto del frame. Dal momento che il contenuto può variare nel tempo, è probabile che la descrizione estesa iniziale diventi inappropriata per i successivi contenuti del frame. In particolare, gli autori non dovrebbero includere un'immagine come solo contenuto di un frame.
Il seguente documento frameset descrive due frame. Il frame di sinistra contiene un sommario e il frame di destra inizialmente contiene l'immagine di uno struzzo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40"> <HTML> <HEAD> <TITLE>Un documento frameset malamente progettato</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAME src="sommario.html"> <FRAME src="struzzo.gif" longdesc="descrizione-struzzo.html"> </FRAMESET> </HTML>
Si noti che l'immagine è stata inclusa nel frame indipendentemente da qualsiasi elemento HTML, così l'autore non ha altri mezzi per specificare testo alternativo se non attraverso l'attributo longdesc. Se il contentuo del frame di destra cambia (ad es., l'utente seleziona un serpente a sonagli dal sommario), gli utenti non avranno accesso testuale al nuovo contenuto del frame.
Perciò, gli autori non dovrebbero mettere un'immagine direttamente in un frame. Invece, l'immagine dovrebbe essere specificata in un documento HTML separato, e li commentata con l'appropriato testo alternativo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40"> <HTML> <HEAD> <TITLE>Un documento frameset ben progettato</TITLE> </HEAD> <FRAMESET cols="20%, 80%"> <FRAME src="sommario.html"> <FRAME src="contenitore-struzzo.html"> </FRAMESET> </HTML>
<!-- In contenitore-struzzo.html: --> <HTML> <HEAD> <TITLE>Il veloce e potente struzzo</TITLE> </HEAD> <P> <OBJECT data="struzzo.gif" type="image/gif"> Questi struzzi hanno sicuramente un buon sapore! </OBJECT> </HTML>
<!ELEMENT IFRAME - - (%flow;)* -- subfinestra in linea --> <!ATTLIST IFRAME %coreattrs; -- id, class, style, title -- longdesc %URI; #IMPLIED -- collegamento a una descrizione estesa (complementa il titolo) -- name CDATA #IMPLIED -- nome del frame per la destinazione -- src %URI; #IMPLIED -- sorgente del contenuto del frame -- frameborder (1|0) 1 -- richiesta bordi del frame? -- marginwidth %Pixels; #IMPLIED -- ampiezza margini in pixel -- marginheight %Pixels; #IMPLIED -- altezza margini in pixel -- scrolling (yes|no|auto) auto -- barra di scorrimento o no -- align %IAlign; #IMPLIED -- allineamento verticale o orizzontale -- height %Length; #IMPLIED -- altezza frame -- width %Length; #IMPLIED -- ampiezza frame -- >
Definizioni degli attributi
Attributi definiti altrove
L'informazione da inserire in linea è indicata dall'attributo src di questo elemento. Il contenuto dell'elemento IFRAME, d'altra parte, dovrebbe essere visualizzato soltanto dagli interpreti che non supportano frame o sono configurati per non visualizzarli.
Per gli interpreti che supportano i frame, l'esempio seguente metterà un frame in linea circondato da un bordo nel mezzo del testo.
<IFRAME src="foo.html" width="400" height="500" scrolling="auto" frameborder="1"> [Il vostro interprete non supporta i frame o è attualmente configurato per non visualizzarli. Tuttavia, potete visitare <A href="foo.html">il relativo documento.</A>] </IFRAME>
I frame in linea non possono essere ridimensionati (e perciò, non accettano l'attributo noresize).
Nota. I documenti HTML possono anche essere incorporati in altri documenti HTML con l'elemento OBJECT. Si veda il paragrafo su documenti incorporati per i dettagli.