Boîte flexible
Le concept de Boîte flexible apparait mais n'est pas encore complètement implanté dans tous les navigateurs.
Le principe général de Flexbox peut paraître assez déroutant de prime abord, mais finalement très pratique : il suffit de créer un "contexte de boîte flexible" sur un parent à l'aide de la propriété display afin qu'il soit appliqué à l'ensemble de ses enfants directs.
container : élément parent dans lequel sont contenus les items. Défini par display:flex
ou display:inline-flex
item : chaque fils devient un item. Le texte directement inclus dans le container est traité comme un item anonyme.
axes : chaque boite possède 2 axes. L'axe principal est l'axe suivant lequel les items s'alignent, l'axe transverse est l'axe perpendiculaire au premier.
directions : Où commence le début du flot ? Au début de l'axe ou en fin (reverse).
lignes : les items peuvent se répartir soit sur une seule ligne, soit sur plusieurs selon flex-wrap qui contrôle la direction de l'axe transverse et la direction d'empilement des lignes.
dimensions : désignation des tailles principales et transverses qui contrôlent les axes principal et transverse.
ul {display: flex ; border: medium groove ;}
li {list-style: none ; border: thin solid ;}
ul {display: flex ; flex-direction: column ;}
ul {display: flex ; flex-direction: row-reverse ;}
ul {display: flex ; flex-wrap: nowrap }
Les cellules restent sur la même ligne quand la fenêtre rétrécit.
ul {display: flex ; flex-wrap: wrap }
Les cellules descendent quand la fenêtre rétrécit.
ul {display: flex ; flex-wrap: wrap-reverse }
Les cellules montent quand la fenêtre rétrécit.
justify-content : flex-start (à gauche) | flex-end (à droite) | center (centré) | space-between (séparées par un espace) | space-around (séparées par un espace même en début et fin)
ul { border: medium groove ; display: flex ; justify-content: space-around ;}
align-items : flex-start (top) | flex-end (bottom) | center (middle) | baseline | stretch (hauteur identique pour toutes les cellules)
ul { border: medium groove ; display: flex ; justify-content: space-around ; align-items: flex-end ;}
ul { border: medium groove ; display: flex ; justify-content: space-between ; align-items: stretch ;}
Il est possible de modifier l'ordre d'affichage logique (ordre d'apparition dans la page) via la propriété ordre.
L'Item ayant order: 1
sera affiché avant celui ayant order: 2
...
Cette possibilité peut se révéler très utile pour ordonner la structure d'une page (section, nav, aside, article...) en fonction de la taille de la fenêtre.
Post hanc adclinis Libano monti Phoenice, regio plena gratiarum et venustatis, urbibus decorata magnis et pulchris; in quibus amoenitate celebritateque nominum Tyros excellit, Sidon et Berytus isdemque pares Emissa et Damascus saeculis condita priscis.
Nisi mihi Phaedrum, inquam, tu mentitum aut Zenonem putas, quorum utrumque audivi, cum mihi nihil sane praeter sedulitatem probarent, omnes mihi Epicuri sententiae satis notae sunt. atque eos, quos nominavi, .
Incenderat autem audaces usque ad insaniam homines ad haec, quae nefariis egere conatibus, Luscus quidam curator urbis subito visus: eosque ut heiulans baiolorum praecentor ad expediendum quod orsi sunt incitans vocibus crebris. qui haut longe postea ideo vivus exustus est.
Post hanc adclinis Libano monti Phoenice, regio plena gratiarum et venustatis, urbibus decorata magnis et pulchris; in quibus amoenitate celebritateque nominum Tyros excellit, Sidon et Berytus isdemque pares Emissa et Damascus saeculis condita priscis.
Nisi mihi Phaedrum, inquam, tu mentitum aut Zenonem putas, quorum utrumque audivi, cum mihi nihil sane praeter sedulitatem probarent, omnes mihi Epicuri sententiae satis notae sunt. atque eos, quos nominavi, .
Incenderat autem audaces usque ad insaniam homines ad haec, quae nefariis egere conatibus, Luscus quidam curator urbis subito visus: eosque ut heiulans baiolorum praecentor ad expediendum quod orsi sunt incitans vocibus crebris. qui haut longe postea ideo vivus exustus est.
Le bloc bleu bien qu'en 1ère position se retrouve en 2ème position du fait de ORDER: 2, le jaune passe de la 2 à la 3 et le rouge devient numéro 1 et tout cela sans que le contenu de la page ait été modifié !
La notion de flexibilité constitue le fondement du module de positionnement Flexbox, et c'est là qu'intervient l'indispensable propriété flex.
La propriété flex est un raccourci de trois propriétés, flex-grow, flex-shrink et flex-basis, dont les fonctions sont :
flex-grow : propension pour un élément à s'étirer dans l'espace restant
flex-shrink : propension pour un élément à se contracter si besoin
flex-basis : taille initiale de l'élément avant que l'espace restant ne soit distribué
.truc { flex: 3 2 100px } :
si le container est trop grand, les cellules vont grandir et TRUC grandira 3 fois plus vite que les autres (à 1) ;
si le container est trop petit, les cellules vont se rétrécir et TRUC rétrécira 2 fois plus vite que les autres ;
100px est la taille minimum de TRUC.
li {list-style: none ; border: thin solid ;}
li {list-style: none ; border: thin solid ; flex: 1 150px}
li:nth-child(2) { flex: 2 200px}
Les cellules ont chacune une taille minimum de 150px (flex-basis: 150px) et occupe tout l'espace (flex: 1).
La deuxième cellule (nth-child(2)) occupe le double de place (flex: 2) avec une taille minimum de 200px.