position
L’ultima possibilità che ti elenco per quanto riguarda i box (ma comunque utilizzabile per qualsiasi elemento) riguarda il loro posizionamento. Come hai visto finora, ogni elemento ha una posizione definita. Partendo dall’alto, gli elementi si susseguono in modo ordinato, eccezione fatta se usi float
. Tuttavia, puoi modificare questo comportamento grazie alla proprietà position
.
Se vuoi usare position
, devi metterti nell’ottica di pensare alla tua pagina HTML come ad un foglio sopra al quale andrai ad adagiare degli utleriori fogli di acetato, ognuno con all’interno il proprio contenuto1. Vediamo, anzitutto, i valori che la proprietà position
può assumere:
static
; impostazione predefinita, ogni elemento è consecutivo all’altro, e tutti gli elementi sono presenti allo stesso livello;relative
; l’elemento è posizionato il modo relativo secondo la sua normale posizione (ossia è possibile distanziarlo dalla sua origine2);absolute
; l’elemento è posizionato in modo assoluto a seconda del suo genitore. Se il genitore non ha un posizionamentorelative
, l’elementoabsolute
andrà a ritroso, finché non troverà un genitorerelative
. In caso contrario,<body>
sarà il genitore a lui più prossimo;fixed
; l’elemento è posizionato in modo fisso, secondo la finestra del browser.
Chiarendo meglio: static
e relative
pongono l’elemento sullo stesso piano, con l’eccezione che, se il valore impostato è relative
, puoi impostare delle distanze dagli elementi che gli stanno attorno (top
, right
, bottom
, left
)3.
div{
position: relative;
top: 20px;
left: 32%;
}
Se l’elemento è absolute
, invece, si viene a creare un nuovo livello e, in modo analogo a float
, l’elemento risulta ad un livello superiore, portando di fatto il suo genitore a 0
. Il genitore dovrebbe essere impostato come relative
, in modo da definire l’origine dell’elemento posizionato in modo absolute
. Sicuramente avrai visto in molti siti che alcune immagini vengono “aperte” sopra al contenuto (effetto Lightbox4): quasi sicuramente il contenitore di quella immagine è impostato su position:absolute;
.
.relative-container{
position: relative;
}
.relative-container div{
position: absolute;
right: 20px;
bottom: 0;
}
Infine, se l’elemento è fixed
, esso sarà sempre fisso sulla pagina e la sua origine sarà unicamente la finestra del browser. Con questo sistema, ad esempio, puoi creare i cosiddetti “Sticky Menu”, ossia i menu di navigazione che sono sempre fissi, anche quando si scorre la pagina.
.menu{
position: fixed;
top: 0;
left: 0;
}
Come ti dicevo nella parte di width
& height
, puoi impostare l’altezza di un elemento a 100%
solo se l’elemento è posizionato absolute
o fixed
: in questi due casi height:100%
; rappresenta l’altezza massima del proprio genitore.