Gérer la taille et la flexibilité des éléments flexibles

Dans les leçons précédentes, nous avons vu comment définir la direction des éléments flexibles, leur ordre et avons appris à les aligner sur leurs axes principal et secondaire.

Le modèle des boites flexibles nous offre une dernière série de propriété qui vont nous permettre de gérer la taille des éléments et de définir leur capacité à grossir et à se rétracter en cas de besoin dans le conteneur, c’est-à-dire définir leur capacité à être « flexible ».

Nous allons dans cette nouvelle leçon nous intéresser aux propriétés flex-grow, flex-shrink et flex-basis ainsi qu’à la propriété raccourcie flex.

 

Définir une taille de départ pour nos éléments flexibles avec flex-basis

La propriété flex-basis va nous permettre de définir une taille de départ pour les différents éléments d’un conteneur flexible avant distribution éventuelle de l’espace vide du conteneur ou au contraire rétrécissement des éléments.

Nous allons appliquer cette propriété directement aux éléments flexibles et allons pouvoir lui passer une valeur, que nous exprimerons généralement en pourcentage de la taille du conteneur.

Notez ici que la propriété flex-basis ne va définir que la dimension de base d’un élément liée à son axe principal, c’est-à-dire sa largeur si l’axe principal est horizontal et sa hauteur si l’axe principal est vertical.

Cette propriété va par ailleurs surcharger la valeur éventuellement donnée à width ou à height selon que l’axe principal soit horizontal ou vertical.

Support HTML pour exemple d'utilisation de la propriété CSS flex-basis dans un modèle flexbox

On utilise la propriété CSS flex-basis pour définir une taille de base pour nos éléments flexibles

On définit une taille de base pour les éléments flexibles du flexbox avec la propriété CSS flex-basis

See the Pen Cours HTML CSS 13.4.1 by Pierre (@pierregiraud) on CodePen.

Ici, nous définissons trois conteneurs flexibles qui contiennent trois éléments flexibles chacun. L’axe principal du premier et du troisième conteneurs est horizontal et l’axe principal du deuxième conteneur est vertical. J’ai précisé une hauteur explicite pour nos conteneurs afin de bien voir l’effet des propriétés que nous allons étudier.

Je définis ensuite un flex-basis : 20% pour chacun des éléments flexibles ainsi qu’un flex-grow : 0 et un flex-shrink : 0 que nous allons étudier ensuite pour interdire à nos éléments de grossir ou rétrécir.

Les éléments de notre premier conteneur vont ainsi avoir une largeur de départ égale à 20% de la largeur du conteneur tandis que les éléments de notre deuxième conteneur auront une hauteur également à 20% de la hauteur du conteneur.

Dans notre troisième conteneur, nous définissons un flex-basis différent pour un élément en particulier. L’élément en question aura donc ici une largeur de départ égale à 30% de celle de son conteneur.

Notez que nous passons également une largeur et une hauteur explicites à chacun des éléments flexibles de notre troisième conteneur. L’axe principal de ce conteneur est l’axe horizontal : la propriété flex-basis va donc nous permettre de définir la largeur de départ des éléments flexibles et la propriété width va être surchargée. La propriété height va en revanche ici bien s’appliquer.

 

Gérer la capacité des éléments flexibles à grossir avec flex-grow

La propriété flex-grow va nous permettre de définir la capacité des éléments à s’étirer dans leur conteneur pour remplir l’espace vide. Nous allons à nouveau l’appliquer aux éléments flexibles.

On va passer un nombre positif à flex-grow qui va définir la quantité d’espace disponible qu’un élément doit récupérer par rapport aux autres.

La valeur par défaut de flew-grow est 0 ce qui signifie que les éléments n’ont pas le droit de grossir dans leur conteneur.

Reprenons l’exemple précédent et appliquons cette fois-ci un flex-grow : 1 aux éléments flexibles.

Support HTML pour exemple d'utilisation de la propriété CSS flex-grow dans un contexte flexbox

On utilise la propriété CSS flex-grow pour indiquer si nos éléments flexibles peuvent grossir pour occuper l'espace restant dans le conteneur flexbox

On gère la capacité des éléments flexibles à grossir dans un conteneur flex avec la propriété CSS flex-grow

See the Pen Cours HTML CSS 13.4.2 by Pierre (@pierregiraud) on CodePen.

Ici, on définit les dimensions de départ de nos éléments ave la propriété flex-basis. Nos éléments auront donc une largeur ou hauteur selon l’axe principal égale à 20% de leur conteneur sauf pour l’élément possédant la classe .ef30 dont la largeur de départ va être égale à 30% du conteneur.

Vous devez bien comprendre ici que flex-basis sert à définir les dimensions de base des éléments flexibles avant un éventuel étirement ou rétrécissement.

On va également laisser la possibilité à nos éléments flexibles de s’étirer pour occuper l’espace vide dans le conteneur avec flew-grow : 1.

L’espace disponible dans le conteneur va donc être équitablement réparti entre les différents éléments de nos deux premiers conteneurs.

Pour notre troisième conteneur, on définit trois comportements de flex-grow différents pour nos trois éléments : notre premier élément va avoir le droit de s’étirer, le deuxième n’aura pas le droit, et le troisième aura le droit et va essayer de récupérer une quantité de l’espace restant dans le conteneur 3 fois plus importante que le premier élément.

Si vous êtes familiers des mathématiques, vous pouvez considérer que les nombres passés à flex-grow représentent une pondération. Sinon, retenez simplement que les nombres passés à flex-grow vont définir combien d’espace libre un élément peut avaler par rapport aux autres éléments.

 

Gérer la capacité des éléments flexibles à rétrécir avec flex-shrink

En plus de pouvoir gérer la capacité des éléments à grossir pour absorber l’espace vide dans un conteneur, nous allons également pouvoir gérer leur capacité à rétrécir pour éviter que des éléments ne dépassent du conteneur avec la propriété flex-shrink.

Cette propriété va s’utiliser de manière similaire à la précédente : nous allons à nouveau pouvoir passer un nombre positif à flex-shrink qui va indiquer la capacité des éléments à rétrécir ainsi que l’importance de leur rétrécissement les uns par rapport aux autres.

Cependant, à la différence de flex-grow, la valeur par défaut de flex-shrink est 1 ce qui correspond à laisser la capacité aux éléments de rétrécir.

Notez par ailleurs qu’un élément ne va pouvoir rétrécir que jusqu’au point où son contenu est prêt à dépasser de l’élément.

Support HTML pour exemple d'utilisation de la propriété CSS flex-shrink dans un contexte flexbox

On utilise la propriété CSS flex-shrink pour indiquer si nos éléments flexibles peuvent rétrécir pour libérer de l'espace dans le conteneur flexbox

On gère la capacité des éléments flexibles à rétrécir dans un conteneur flex avec la propriété CSS flex-shrink

See the Pen Cours HTML CSS 13.4.3 by Pierre (@pierregiraud) on CodePen.

Cette fois-ci, on définit une taille de base de 40% pour chacun de nos éléments avec flex-basis : 40% et de 60% pour un élément en particulier dans le troisième conteneur.

On interdit également aux éléments de se placer sur plusieurs lignes ou sur plusieurs colonnes en passant la valeur nowrap pour la propriété flex-wrap aux différents conteneurs afin que les éléments dépassent bien par défaut de leur conteneur.

Finalement, on laisse la possibilité aux éléments de rétrécir afin qu’ils essaient de ne pas dépasser du conteneur avec flex-shrink : 1.

Dans notre troisième conteneur, nous définissons des comportements de rétrécissement différents pour chacun de nos éléments flexibles : le premier élément va pouvoir rétrécir selon un flex-shrink : 1, le deuxième ne pourra pas rétrécir et le troisième va également pouvoir rétrécir selon un flex-shrink : 3, ce qui signifie qu’il va essayer de rétrécir 3 fois plus que le premier élément flexible du conteneur.

 

La notation raccourcie flex

Nous allons pouvoir définir les trois propriétés flex-grow, flex-shrink et flex-basis d’un coup en utilisant la propriété raccourcie flex.

Pour que la propriété fonctionne correctement, il faudra lui passer d’abord la valeur liée à flex-grow, puis celle de flex-shrink et finalement celle de flex-basis.

Faites bien attention une nouvelle fois avec l’utilisation des propriétés raccourcies : si l’une des valeurs de la propriété raccourcie a été définie avant alors elle sera écrasée par la valeur de la propriété raccourcie.

Support HTML pour exemple d'utilisation de la propriété CSS flex dans un contexte flexbox

On utilise la propriété flex pour définir le flex-basis flex-grow et flex-shrink de nos éléments flexibles

La propriété CSS flex est la notation raccourcie de flex-basis flex-grow et flex-shrink

See the Pen Cours HTML CSS 13.4.4 by Pierre (@pierregiraud) on CodePen.

Laisser un commentaire