Home Stampante Corso HTML e Css

Lezione_7 - Proprietà Position.

Sul posizionamento degli elementi. Probabilmente la più importante lezione del corso. Se vogliamo dominare il layout dei nostri documenti dobbiamo comprendere quanto meglio possibile gli argomenti quì trattati.

Introduzione

La funzione fondamentamentale di CSS è quella di rappresentare gli elementi di un un documento html o xml su un supporto di restituzione che può essere il display di un dispositivo, un foglio di carta, o un flusso audio o video.

Nella lezione precedente, Lezione_6, abbiamo visto come la proprietà display governa il modo in cui un elemento è visualizzato.

Quì vedremo come gli elementi si dispongono l'uno rispetto all'altro. La comprensione delle nozioni che saranno esposte sono fondamentali per organizzare i contenuti dei nostri documenti.

La proprietà fondamentale che governa il posizionamento è position. Position può assumere i seguenti valori:

La proprietà position determina il posizionalento di un elemento all'interno del suo più prossimo contenitore (il suo immediato predecessore nella gerarchia di contenimento).

Non è una proprietà ereditaria. Pertanto se non esplicitamente specificata assumerà il valore static.

Queste proprietà, in funzione del proprio valore, operano sul posizionamento degli elementi congiuntamente ad altre proprietà che vedremo di volta in volta.

Nel seguito presenteremo le funzionalità associate ad ogni valore di position soffermandoci un po di più sui valori static e relative.

Per illustrare il "funzionamento" dei diversi valori di posizionamento, assegneremo tali valori ad elementi di tipo div, che è l'elemento strutturale di uso più comune, e all'interno di essi inseriremo altri elementi di tipo div ed elementi di tipo p, come rappresentanti tipici degli elementi display:block;, e elementi di tipo img, rappresentativi degli elementi display:inline;

.

Per rendere evidenti i diversi elementi assegnerò ad ognuno di essi un colore di background in contrasto con quello del suo immediato ascendente.

Le intestazioni delle seguenti sezioni sono dirette discendenti dell'elemento body di questo documento e sono tutte posizonate staticamente rispetto ad esso.

Posizionamento statico - position:static; - valore di default.

static è il valore di default della proprietà position. Questo paragrafo è posizionato staticamente rispetto all'elemento div, di colore lime, a sua volta posizionato staticamene rispetto al suo più immediato ascendente che è l'elemento body.

Con il valore static gli elementi si dispongono secondo il flusso normale del documento: uno dietro l'altro occupando spazio in funzione della loro proprieta display - block o inline e del box model dell'elemento (ampiezza dell'area del contenuto, dei margini, dei bordi, e degli eventuali padding.)

Come prossimo elemento inserirò una immagine.

ramarro

Questo dovrebbe esemplificare il principale limite del posizionamento statico: tutto lo spazio a destra dell'immagine risulta inutilizzato.

E le cose non migliorano molto anche inserendo l'immagine all'interno del paragrafo.ramarro

ramarroMa una soluzione c'è. E' la proprietà float, "far galleggiare" un elemento nel suo contenitore. In questo caso l'immagine "galleggia" sulla sinistra del paragrafo che lo contiene. In questo modo, il testo del paragrafo circonda l'immagine flottante allo stesso modo con cui delle palline di plastica in una piscina circonderebbero una boa. Questa cosa è molto utile. In questo modo riesco a sfruttare a dovere lo spazio a destra dell'immagine. La proprietà appplicata all'immagine del ramarro qui visualizzato è float:left;.

La proprietà float può assumere i valori left o right.

La proprietà float può essere applicata anche ad elementi di tipo block come mostrerò nel paragrafo seguente dove farò galleggiare un paragrafo dentro una div:

Questo paragrafo su sfondo bianco, "galleggia" a sinistra sulla div a sfondo grigio.

Per ottenere questo risultato al paragrafo bianco oltre alla property float;left; ho applicato la property:width:40%; Comprendere bene questo meccanismo ci fornisce la chieave per organizzare i nostri documenti in modo soddisfaciente anche utilizzando il semplice posizionamento static. Vale la pena comprendere bene questo tipo di funzionamento.

Per interrompere il "galleggiamento" abbiamo a disposizione la property:clear che può assumere i valori:left; right; both; in questo paragrafo ho utilizzto clear:both;.

L'utilizzo di tutti questi colori può forviare il lettore sulle possibilità offerte dal posizionamento static. Per questo segue un esempio di posizonamento static con l'uso della property float non compromesso dall'uso pesante del colore.

Esempio di posizionamento statico.

Il posizionamento statico è adeguato per la costruzione della maggior parte dei documenti web a patto di saper utilizzare la proprietà float.

La property float, applicata ad una div posta all'interno di un'altra div deve essere utilizzata in congiunzione con la property width che consente di dimensionare l'elemento.

float può assumere i seguenti valori:

La property float non è ereditaria ma, una volta assegnata ad un elemento generico, permane fin tanto che non ce ne liberiamo con la property clear.

La property clear può assumere i seguenti valori:

Padroneggiare la propery float con il posizionamento statico ci consente di trovare buone soluzioni di presentazione. Ma in certi casi non basta e dovremo ricorrere agli altri valori di position.

Non ho resistito alla tentazione di assegnare bordi e colori a qualche contenitore. L'ho fatto per evidenziare gli elementi flottanti.

Il mio consiglio è di studiare molto bene questa pagina, in quanto le soluzioni qui adottate sono applicabili ad un gran numero di situazioni. Il modo migliore per farlo è quello di scaricarne il codice ed esaminarlo attentamente. Proverò comunque a descriverlo a parole.

Questo esempio è inserito negli esercizi della lezione. Potrete modificarlo a piacere per verificare l'effetto delle singole proprietà sull'aspetto del documento.

Posizionamento relativo - position:relative;.

Ricordiamo che le proprietà di posizionamento di un elemento sono sempre riferite al suo contenitore.

La differenza principale fra un elemento con position:relative; rispetto ad un elemento statico è che l'elemento posizionato relativamente risponde alle properties top, right, bottom e left che consentono di assegnare un valore di offset rispetto alla posizione che l'elemento occuperebbe se fosse posizionato staticaminte. Mi spiego con un esempio: l'immagine che segue è posizionata relativamente. Nessun valore di offset è stato specificato. Essa occupa esattamente la stessa posizione che avrebbe occupato in caso di posizionamento statico.

ramarro

Ripeterò il frammento di documento precedente applicando all'immagine appropriati valori di offset e riducendo l'ampiezza del paragrafo che la precede:

La differenza principale fra un elemento con position:relative; rispetto ad un elemento statico è che l'elemento posizionato relativamente risponde alle properties top, right, bottom e left che consentono di assegnare un valore di offset rispetto alla posizione che l'elemento occuperebbe se fosse posizionato staticaminte. Mi spiego con un esempio: l'immagine che segue è posizionata relativamente. Nessun valore di offset è stato specificato. Essa occupa esattamente la stessa posizione che avrebbe occupato in caso di posizionamento statico. I valori di offset applicati all'immagine sono: left:85%; top:-8em

ramarro

Notate dove si posiziona questo paragrafo "statico". E' la posizione che avrebbe assunto se l'oggetto precedente fosse stato posizionato staticamente. Se volessi recuperare lo spazio "sprecato" dovrei posizionare questo paragrafo relativamente ed applicargli un appropriato valore di offset verticale. Questo dovrebbe immediatamente consigliarci ad usare il posizionamento relativo solo quando non troviamo altre soluzioni con il posizionamento statico, con i margini, i padding, e la proprietà float.

Esempio di posizionamento relativo

Il posizionamento relativo ci consente di disporre a nostro piacere elementi all'interno di un contenitore. Il rischio è quello di sovrapporli. E la possibilità di ingarbugliare tutto aumenta se utiliziamo le proprietà di offset congiuntamente a quelle di float.

Infine il consiglio che mi sento di dare è che se in un contenitore usiamo il posizionamento relativo dovremo farlo per tutti gli elementi.

Nell'esempio che segue mi limiterò ad applicare il posizionamento relativo con le proprietà di offset a contenitori di tipo div(bordati di arancio) disposti in div padre (color beige, bordata di verde)

La property left, top, right, bottom, applicate ad un oggetto con position:relative consentono di modificare la posizione dello spigolo superiore sinistro del box contente l'oggetto, secondo i valori assegnati alle suddette proprietà.

A left, top, right e bottom possono essere applicati valori di offset espressi con le seguenti unità di misura:

A questo contenitore sono state applicate le seguenti proprietà di stile: position:relative; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Alla div contenente questo paragrafo sono state assegnate le seguenti proprietà di stile:
position:relative; left:35%; top:-60vh; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Cosa significa top:-60vh?
significa che lo spigolo in alto a sinistra del contenitore deve essere spostato in alto in ragione del 60% dell'ampiezza verticale dello schermo rispetto alla posizione che avrebbe assunto nel caso di posizionamento statico.

A questo contenitore sono state assegnate le seguenti proprietà di stile:
position:relative; left:35%;top:-55vh; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Ma quali sono le proprietà di stile assegnate al contenitore di tutti questi contenitori? Sono:
background-color:beige; border-style:solid; border-color:green; height:80vh;.

Come esercizio provate ad eliminare la property height:80vh;. Dovreste essere in grado di capire il perchè dell'effetto che otterrete.

Per concludere, a questo contenitore sono state assegnate le seguenti proprietà di stile:
position:relative; left:70%;top:-108vh; width:27%; background-color:white; border-style:solid; border-color:orange;

Posizionamento assoluto - position:absolute;.

Posizionamento relativo ed assoluto sembrano simili ma fra i due c'è una importante differenza:

Nel posizionamento relativo gli offset sono relativi alla posizione che l'elemento avrebbe avuto se posizionato staticamente.

Nel posizionamento assoluto gli offset sono relativi allo spigolo in alto a sinistra del contenitore.

Esempio di posizionamento assoluto

La property left, top, right, bottom, applicate ad un oggetto con position:absolute consentono di modificare la posizione dello spigolo superiore sinistro del box contente l'oggetto, secondo i valori assegnati alle suddette proprietà.

A left, top, right e bottom possono essere applicati valori di offset espressi con le seguenti unità di misura:

A questo contenitore sono state applicate le seguenti proprietà di stile: position:absolute; top:1em; left:1em; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Alla div contenente questo paragrafo sono state assegnate le seguenti proprietà di stile:
position:absolute; left:36%; top:1em; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Cosa significa top:1em;?
Significa che lo spigolo in alto a sinistra del contenitore deve essere spostato in basso in ragione di una volta la misura del font-size ereditato dal contenitore dell'oggetto.

A questo contenitore sono state assegnate le seguenti proprietà di stile:
position:absolute; left:36%; top:10em; width:33%; background-color:yellow; border-style:solid; border-color:orange;

Ma quali sono le proprietà di stile assegnate al contenitore di tutti questi contenitori? Sono:
position:relative; background-color:beige; border-style:solid; border-color:green; height:80vh;.

Come esercizio provate ad eliminare la property height:80vh;. Dovreste essere in grado di capire il perchè dell'effetto che otterrete.

Per concludere, a questo contenitore sono state assegnate le seguenti proprietà di stile:
position:absolute; left:71%; top:1em; width:27%; background-color:white; border-style:solid; border-color:orange;

Posizionamento fisso - position:fixed;.

Nel posizionamento fisso gli offset sono relativi allo spigolo in alto a sinistra della viewport, per esempio il display del tuo computer. Inoltre l'oggetto posizionato in questo modo rimane fisso anche quando tutto il resto viene fatto scorrere.

Esempio di posizionamento fisso

Come esempio, ho adottato il posizionamento fisso per l'intestazione di questa lezione.

Posizionamento appiccicoso - position:stycky;.

Il posizionamento sticky è molto simile al posizionamento fisso con la differenza che in questo caso gli offset sono relativi allo spigolo in alto a sinistra dell'immediato contenitore. Come nel posizionamento fisso, l'oggetto sticky rimane fisso anche quando tutto il resto viene fatto scorrere.

Esempio di posizionamento sticky

Immagine fissa nel contenitore.

ramarro

Come esempio, ho adottato il posizionamento sticky per la foto di questa lucertola. In realtà non si tratta di una lucertela ma di un ramarro, che è una lucertola un po più grande. Nello sviluppare questo esempio mi sono reso conto di non aver parlato della propietà di stile overflow.

Probabilmente non ho parlato di diverse altre propietà. La ragione, probabilmente, è che mi sto' concentrando sugli aspetti che è più difficile apprendere da soli. Anzi, per essere onesti, di quelli che sono stati più difficili da apprendere per me. E, per essere sinceri, ci sono ancora diversi aspetti del posizionamento che vorrei approfondire. Quali sono? Lo scoprirete, probabilmente, scaricando gli esercizi della lezione e modificando gli esempi.

Esercizi.

Negli esercizi sperimenteremo come agiscono le proprietà relative al posizionamento

Per prima cosa scarica il file HTML_07.rar nella cartella CorsoHTML che avrai creato in precedenza.

Estrai la cartella HTML_07 e apri in Notepad++ i file HTML_07.html e HTML_07.css.

Esegui gli esercizi proposti.

Se vuoi vedere il file dell'esempio prima di scaricarlo clicca qui.

Nota.

Il lettore potrà ora fare altre prove ed eventualmente annotare propri appunti nella sezione dedicata.

Un ultima raccomandazione:durante gli esercizi tenere aperti di due strumenti di validazione del codice: W3C Markup Validation Service e W3C CSS Validation Service e verificare i file su cui si è lavorato dopo aver eseguito le modifiche. I browser sono molto tolleranti, e visulizzano bene le pagine anche in presenza di errori, ma gli errori è meglio evitarli.

Per approfondire.

Nelle specifiche ufficiali del w3 consortium puoi consultare:

Nel sito developer mozilla puoi consultare:

In questo sito gli argomenti della lezione sono stati trattati in: