Il 0% ha trovato utile questo documento (0 voti)
52 visualizzazioni46 pagine

Lezioneflex

Questo documento tratta di CSS Flexbox, una tecnica per creare layout flessibili con CSS. Descrive le proprietà del contenitore flex come flex-direction, justify-content e align-items che controllano la direzione, l'allineamento orizzontale e verticale dei figli. Spiega inoltre come usare queste proprietà per adattare automaticamente il layout a schermi di diverse dimensioni.

Caricato da

gomo88
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
52 visualizzazioni46 pagine

Lezioneflex

Questo documento tratta di CSS Flexbox, una tecnica per creare layout flessibili con CSS. Descrive le proprietà del contenitore flex come flex-direction, justify-content e align-items che controllano la direzione, l'allineamento orizzontale e verticale dei figli. Spiega inoltre come usare queste proprietà per adattare automaticamente il layout a schermi di diverse dimensioni.

Caricato da

gomo88
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 46

CSS VII

Un contenitore flessibile: flexbox

Maria Chiara Pievatolo

Università di Pisa
[email protected]

26 novembre 2020

1 / 46
CSS VII

Sommario

1 Elementi monodirezionali e no

2 Flexbox: contenitore
Allineamento orizzontale
Allineamento verticale
Align-items: allineamento verticale riga per riga
Align-content: allineamento verticale dell’intero contenuto

3 Flexbox: proprietà dei discendenti

4 Un’unità di misura proporzionale

2 / 46
CSS VII
Elementi monodirezionali e no

Gli elementi a blocco e inline vanno in una sola direzione

“Float:left” induce i tre paragrafi colorati a allinearsi

3 / 46
CSS VII
Elementi monodirezionali e no

Gli elementi a blocco e inline vanno in una sola direzione

Per impilarli devo usare condizionatamente “display:block”

4 / 46
CSS VII
Elementi monodirezionali e no

Per cambiare direzione devo cambiare natura

Il foglio stile deve specificare la natura di ciascun elemento


/*Schermo grande*/
p.unof{width:30%;float:left;height:4em;}
p.duef {width:30%;float:left;height:4em;}
p.tref {width:30%;float:left;height:4em;}
/*Schermo piccolo*/
@media screen and (max-width: 980px) {
p.unof{width:90%;display:block;}
p.duef {width:90%;display:block;}
p.tref {width:90%;display:block;}}

5 / 46
CSS VII
Elementi monodirezionali e no

Flexbox: mi fletto come vuoi

Bastano alcune indicazioni generali


/*Schermo grande*/
div.container {display:flex; flex-direction:row;
,→ justify-content:space-around;flex-wrap:wrap;}
div.container p {flex-basis:30%;margin:0px;
,→ padding:1em; color:#ffffff;height:4em; }
/*Schermo piccolo*/
@media screen and (max-width: 980px) { div.container
,→ {flex-direction:column; align-items:stretch;}
div.container p {flex-basis:90%;}}

6 / 46
CSS VII
Flexbox: contenitore

Un contenitore con i suoi tre figli

Contenitore: qualsiasi elemento con dei discendenti


<div class="container">
<p class="unof"> Rosso </p>
<p class="duef"> Verde </p>
<p class="tref"><span id="grande">Con uno schermo
,→ grande mi allineo</span><span id="piccolo">Con
,→ uno schermo piccolo mi impilo</span></p>
</div>

7 / 46
CSS VII
Flexbox: contenitore

display: flex ; flex-direction:

Il contenitore è una scatola flessibile...


div.container {display:flex; }

che allinea o incolonna quanto contiene: row ; column ;


row-reverse ; column-reverse
div.container {display:flex;
flex-direction:row; }

8 / 46
CSS VII
Flexbox: contenitore

flex-wrap: nowrap wrap wrap-reverse

il cui contenuto si dispone su una riga, o si svolge su più righe


dall’alto o dal basso
div.container {display:flex; flex-direction:row;
,→ flex-wrap:wrap;}

9 / 46
CSS VII
Flexbox: contenitore

flex-wrap: nowrap

flex-wrap: wrap

10 / 46
CSS VII
Flexbox: contenitore

flex-wrap: wrap-reverse

11 / 46
CSS VII
Flexbox: contenitore

Stenograficamente:

Default: row, nowrap


/*flex-flow: <‘valore di flex-direction’> || <‘valore
,→ di flex-wrap’>*/

Per esempio
div.container {display:flex; flex-flow: row wrap; }

12 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: flex-start flex-end center space-between


space-around space-evenly stretch
div.container {display:flex; flex-flow: row wrap;
,→ justify-content:space-around;}

13 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: flex-start (valore predefinito)

Gli elementi discendenti si dispongono all’inizio della riga


div.container {display:flex; flex-direction:row;
,→ justify-content:flex-start;}

flex-start

14 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: flex-end

Gli elementi discendenti si dispongono alla fine della riga


div.container {display:flex; flex-direction:row;
,→ justify-content:flex-end;}

flex-end

15 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: center

Gli elementi discendenti si dispongono al centro della riga


div.container {display:flex; flex-direction:row;
,→ justify-content:center;}

flex-end

16 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: space-between

Gli elementi discendenti si dispongono su tutta la riga, a partire


dalle estremità
div.container {display:flex; flex-direction:row;
,→ justify-content:space-between;}

space-between

17 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: space-around

Gli elementi discendenti si dispongono su tutta la riga, ma con uno


spazio uguale attorno a ciascuno
div.container {display:flex; flex-direction:row;
,→ justify-content:space-around;}

space-around

18 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: space-evenly

Gli elementi discendenti si dispongono su tutta la riga, ma in modo


che lo spazio che li separa reciprocamente sia uguale
div.container {display:flex; flex-direction:row;
,→ justify-content:space-evenly;}

space-evenly

19 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: stretch

Gli elementi discendenti cercano di riempire la riga


div.container {display:flex; flex-direction:row;
,→ justify-content:stretch;}

stretch con flex-basis predeterminata per i discendenti

stretch senza flex-basis predeterminata per i discendenti

20 / 46
CSS VII
Flexbox: contenitore
Allineamento orizzontale

justify-content: safe o unsafe ...

Voglio o no proteggermi dalle tracimazioni?


/*Certo!*/
div.container {display:flex; flex-direction:row;
,→ justify-content: safe center;}
/*No!*/
div.container {display:flex; flex-direction:row;
,→ justify-content: unsafe center;}

21 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: stretch flex-start flex-end center baseline


div.container {display:flex; flex-flow: row wrap;
,→ align-items: stretch;}

Align-items è diverso da align-content!


“align-items” governa distributivamente l’allineamento verticale
riga per riga, non collettivamente tutto il contenuto!

22 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: stretch (valore predefinito)

Gli elementi discendenti riempiono verticalmente ogni riga


div.container {display:flex; flex-flow: row wrap;
,→ align-items: stretch;}

align-items: stretch;

23 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: flex-start

Gli elementi discendenti si allineano in alto


div.container {display:flex; flex-flow: row wrap;
,→ align-items: flex-start;}

align-items: flex-start;

24 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: flex-end

Gli elementi discendenti si allineano in basso


div.container {display:flex; flex-flow: row wrap;
,→ align-items: flex-end;}

align-items: flex-end;

25 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: center

Gli elementi discendenti si allineano al centro


div.container {display:flex; flex-flow: row wrap;
,→ align-items: center;}

align-items: center;

26 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

align-items: baseline

Gli elementi discendenti si allineano in modo che l’inizio del testo


che contengono si allinei alla medesima altezza
div.container {display:flex; flex-flow: row wrap;
,→ align-items: baseline;}

align-items: baseline;

27 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Allineamento verticale

align-content: flex-start flex-end center space-between


space-around space-evenly stretch ...
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content: stretch;}

N.B.
Ha senso usare align-content solo se i discendenti si dispongono su
più di una riga.

28 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Stretch
align-content: stretch: si estende verticalmente per riempire lo
spazio
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content: stretch;}

29 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Flex-start

align-content: flex-start: si raggruppa verso l’alto


#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content: flex-start;}

30 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Flex-end
align-content: flex-end: si raggruppa verso il basso
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content: flex-end;}

31 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Center
align-content: center: si raggruppa al centro
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content: center;}

32 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Space-between
align-content: space-between: i contenuti si distribuiscono a
intervalli regolari, ma iniziando dal bordo superiore e finendo a
quello inferiore
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content:
,→ space-between;}

33 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Space-around
align-content: space-around: i contenuti si distribuiscono a
intervalli regolari, con spazi uguali fra le righe
#contenitore {height:200px;width: 240px;display:
,→ flex; flex-wrap: wrap;align-content:
,→ space-around;}

34 / 46
CSS VII
Flexbox: contenitore
Allineamento verticale

Un centro perfetto
Margin-auto in flex assorbe tutto lo spazio in più, in questo caso
ugualmente da una parte e dall’altra
div > div {box-sizing: border-box; border: 2px solid
,→ #dddddd; width: 50px; display: flex; align-items:
,→ center; justify-content: center; margin:auto;}

35 / 46
CSS VII
Discendenti

Order!

Per permettere a uno o più discendenti di trasgredire la sequenza


presente nel documento HTML
#figlio1 {background-color: #6accff; min-height:
,→ 30px; order:6;}

36 / 46
CSS VII
Discendenti

Flex-grow
Per permettere a uno o più discendenti di occupare più spazio
#figlio6 {background-color: #7acccc; min-height:
,→ 50px; font-size: 30px; flex-grow:2;}

6 prende il doppio dello spazio rimanente

37 / 46
CSS VII
Discendenti

Flex-shrink
Per indicare a uno o più discendenti - se flessibili - di strizzarsi, quando
non c’è abbastanza spazio nella riga
#contenitore {height:200px;width: 240px;align-items:
,→ center; background-color: #dddddd; display: flex;
,→ flex-wrap: wrap; align-content: safe center;}
#figlio4a {background-color: #ffcc99; min-height:
,→ 60px; flex-basis:40%; flex-shrink:2;}

4a si strizza quando lo schermo si stringe

38 / 46
CSS VII
Discendenti

Flex-basis: dimensione di un figlio prima della


distribuzione dello spazio ulteriore
flex-basis: numero, auto o content
div.container {display:flex; flex-direction:row;
,→ justify-content:space-around;flex-wrap:wrap;}
div.container p {flex-basis:30%;}
@media screen and (max-width: 980px) { div.container
,→ {flex-direction:column;
,→ align-items:stretch;}div.container p
,→ {flex-basis:90%;}}

30 per cento e 90 per cento

39 / 46
CSS VII
Discendenti

Flex-basis: 0 e auto

Flex-basis:0 minimizza la larghezza degli elementi e distribuisce tutto lo


spazio ulteriore

Flex-basis:auto considera la larghezza degli elementi e distribuisce tutto


lo spazio ulteriore tenendo conto del valore di flex-grow

40 / 46
CSS VII
Discendenti

Stenografia: flex per flex-grow + (flex-shrink e


flex-basis)

Indicando il valore di flex-grow, gli altri due vengono dedotti


flex:1 o altro numero intero = flex-grow: 1 o altro numero
intero , flex-shrink: 1 , flex-basis: 0 (figli flessibili senza spazio
vitale)
flex: auto = flex-grow: 1, flex-shrink: 1, flex-basis: auto (figli
flessibili con spazio vitale)
flex:none = flex-grow: 0, flex-shrink: 0, flex-basis: auto (figli
inflessibili con spazio vitale)
flex: initial =flex-grow: 0, flex-shrink: 1, flex-basis: auto (figli
“altruisti” con spazio vitale )

41 / 46
CSS VII
Discendenti

Figli anticonformisti: align-self

Per permettere a un discendente di allinearsi in modo diverso dai


suoi fratelli
#figlio6 {background-color: #7acccc; min-height:
,→ 50px; font-size: 30px; align-self:flex-end;}

Io non mi allineo al centro!

42 / 46
CSS VII
VW

vw = viewport width

Percentuale delle dimensioni attuali dell’area di visualizzazione


1vw =1 per cento dell’area di visualizzazione
2vw = 2 per cento dell’area di visualizzazione
. . . e cosı̀ via.

43 / 46
CSS VII
VW

Esercizio: da frangar non flectar a flectar non frangar

Prendo il documento rigido all’url https://elearning.sp.


unipi.it/mod/resource/view.php?id=6280
Cerco di renderlo flessibile con la flexbox
Confronto la mia soluzione con quelle proposte, basate sul
vecchio metodo

44 / 46
CSS VII
VW

Micro-bibliografia

CSS Tricks
A Complete Guide to Flexbox
https:
//css-tricks.com/snippets/css/a-guide-to-flexbox/
Greg Smith (2012)
Dive into Flexbox
https://bocoup.com/blog/dive-into-flexbox

45 / 46
CSS VII
VW

Continua?

46 / 46

Potrebbero piacerti anche