<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ahmed Bouras</title>
    <description>The latest articles on DEV Community by Ahmed Bouras (@ahmedbouras).</description>
    <link>https://dev.to/ahmedbouras</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F516707%2F3c6bd21e-daca-440e-9b57-4a7b380de0f2.png</url>
      <title>DEV Community: Ahmed Bouras</title>
      <link>https://dev.to/ahmedbouras</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmedbouras"/>
    <language>en</language>
    <item>
      <title>Comprendre React Context en faisant un Dark mode</title>
      <dc:creator>Ahmed Bouras</dc:creator>
      <pubDate>Sat, 01 Apr 2023 13:58:48 +0000</pubDate>
      <link>https://dev.to/ahmedbouras/comprendre-react-context-en-faisant-un-dark-mode-3h0j</link>
      <guid>https://dev.to/ahmedbouras/comprendre-react-context-en-faisant-un-dark-mode-3h0j</guid>
      <description>&lt;p&gt;Dans ce tutoriel nous allons voir ensemble ce qu'est React Context et finir cette explication par un petit &lt;em&gt;dark mode&lt;/em&gt; pour la mise en pratique.&lt;/p&gt;

&lt;p&gt;Déjà, c'est quoi React Context ?&lt;/p&gt;

&lt;p&gt;React Context (ou l'API de Context pour les plus intimes) va nous permettre de rendre disponible des données et/ou des fonctions, dans toute notre application.&lt;/p&gt;

&lt;p&gt;Sans React Context, il est possible de le faire en passant par les props d'un parent à son enfant. Cependant, imaginez que vous ayez une architecture où vous avez un parent, qui à un enfant, qui à lui même un enfant, qui à lui même un enfant, etc.&lt;br&gt;
Il serait fastidieux de mettre cela en place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fup-blog-prod.s3.amazonaws.com%2FFC1-1180x664-30poq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fup-blog-prod.s3.amazonaws.com%2FFC1-1180x664-30poq.jpg" alt="prop drilling image"&gt;&lt;/a&gt;&lt;br&gt;
On appelle ça le &lt;strong&gt;prop drilling&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Context existe donc pour éviter le prop drilling.&lt;br&gt;
Pour faire une métaphore, imaginez une famille dans une maison où l'on a le père, le fils, le petit-fils et l'arrière petit-fils.&lt;/p&gt;

&lt;p&gt;Avec le prop drilling :&lt;br&gt;
Le père souhaite donner les clés de la voiture familial à son arrière petit-fils. Pour cela, il doit donner les clés à son fils, qui va devoir les donner à son petit-fils, qui les donnera enfin à son arrière petit-fils.&lt;/p&gt;

&lt;p&gt;Avec Context :&lt;br&gt;
Le père pose les clés de la voiture dans le salon et celui qui à besoin des clés n'aura qu'a les récupérer. Les clés sont disponible pour tout le monde, sans passer par un intermédiaire.&lt;br&gt;
Mais n'oublions pas les bonnes manières… Il faudra les demander, avant de les prendre 😉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A720%2Fformat%3Awebp%2F1%2AmOpxRXP7O0laXUDIqzm2_Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A720%2Fformat%3Awebp%2F1%2AmOpxRXP7O0laXUDIqzm2_Q.png" alt="prop drilling vs context api"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maintenant que nous avons vu la théorie, faisons un peu de pratique avec notre dark mode.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthumbs.gfycat.com%2FUnhappyRedHoverfly-max-1mb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthumbs.gfycat.com%2FUnhappyRedHoverfly-max-1mb.gif" alt="gif jour nuit les visiteurs"&gt;&lt;/a&gt;&lt;br&gt;
Il y aura 3 étapes principales :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Créer le &lt;em&gt;context&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Englober notre app dans le &lt;em&gt;context&lt;/em&gt; créé&lt;/li&gt;
&lt;li&gt;Récupérer les données/fonctions de notre &lt;em&gt;context&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Juste pour le côté pratique, je vais tout mettre dans le dossier &lt;code&gt;src&lt;/code&gt;, et configurer le css dans un seul endroit. Ne gardez que les fichiers suivants : &lt;code&gt;index.js&lt;/code&gt; | &lt;code&gt;index.css&lt;/code&gt; | &lt;code&gt;App.js&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="c"&gt;/* index.css */&lt;/span&gt;

&lt;span class="o"&gt;*,&lt;/span&gt; &lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.app&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.dark-theme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1B2430&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#F1F1F1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Créons un peu de contenu pour nous permettre de voir le changement qui va s'opérer avec le dark mode ainsi que le bouton qui vas nous permettre de switcher avec ce mode.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// ToggleButton.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ToggleButton&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Toggle&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Content.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ToggleButton&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./ToggleButton&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Content&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello world!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit, amet consectetur adipisicing elit. 
         Voluptates id ratione voluptatibus iusto unde soluta 
         dicta cum nam, rerum sit labore at et ducimus nobis 
         expedita molestiae commodi nostrum eius voluptatem 
         reiciendis repellat accusamus placeat eveniet rem. 
         Consequuntur, ducimus dolorum. Sunt deserunt optio itaque 
         maxime eligendi temporibus magnam pariatur inventore.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ToggleButton&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// App.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Content&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"app"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Maintenant que nous avons notre base, passons à ce qui nous intéresse vraiment et créons le fichier qui va fournir notre &lt;em&gt;context&lt;/em&gt; : &lt;code&gt;DarkModeProvider.js&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Créer le context
&lt;/h2&gt;

&lt;p&gt;Pour créer un &lt;em&gt;context&lt;/em&gt;, rien de plus simple, il suffit d'utiliser la commande suivante :&lt;br&gt;
&lt;code&gt;export const DarkModeContext = createContext();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🔴 Attention ! Cette commande doit se trouver en dehors de vos composants. Notre fichier ressemble maintenant à cela pour le moment :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// DarkModeProvider.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DarkModeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// début du composant&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DarkModeProvider&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// fin du composant&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Pour la suite, nous allons créer une variable &lt;code&gt;darkMode&lt;/code&gt; qui aura pour valeur &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; afin de savoir si le dark mode est activé. À cela, nous allons ajouter une fonction qui nous permettra permettra de switcher entre ces deux valeurs.&lt;/p&gt;

&lt;p&gt;Ça tombe bien, il y a un Hook que nous allons utiliser pour cette tâche et c'est &lt;code&gt;useState&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DarkModeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DarkModeProvider&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDarkMode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setDarkMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On initialise darkMode à false car initialement notre site sera en clair (couleur par défaut) : &lt;br&gt;
false -&amp;gt; clair&lt;br&gt;
true -&amp;gt; sombre&lt;/p&gt;

&lt;p&gt;Puis la fonction &lt;code&gt;toggleDarkMode()&lt;/code&gt; permettra à chaque clique sur notre bouton, d'inverser les couleurs, c'est à dire de faire passer &lt;code&gt;false&lt;/code&gt; à sa valeur inverse : &lt;code&gt;true&lt;/code&gt; et ainsi de suite.&lt;/p&gt;

&lt;p&gt;D'ailleurs, comment je fais pour transmettre cette fonction à mon bouton &lt;code&gt;ToggleButton&lt;/code&gt; ?&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Englober notre app dans le context créé
&lt;/h2&gt;

&lt;p&gt;Il y a deux étapes pour "englober" notre app de notre context. On peut dire aussi que l'on fournis un context à notre app.&lt;/p&gt;

&lt;p&gt;La première est d'englober notre composant &lt;code&gt;App&lt;/code&gt; par le composant &lt;code&gt;DarkModeProvider&lt;/code&gt; :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;DarkModeProvider&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./DarkModeProvider&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DarkModeProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;DarkModeProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// DarkModeProvider.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DarkModeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DarkModeProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDarkMode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setDarkMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ici, &lt;code&gt;children&lt;/code&gt; correspond à notre composant &lt;code&gt;App&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Autre petite étape avant de passer à la suite. On a rendu notre context disponible, c'est bien... Mais comment Context sait qu'il doit mettre telle ou telle donnée à disposition ?&lt;/p&gt;

&lt;p&gt;Il faut les ajouter en tant que valeur comme ceci :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// DarkModeProvider.js&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; 
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On ajoute donc un objet avec ce que l'on souhaite rendre disponible.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Récupérer les données/fonctions de notre &lt;em&gt;context&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Est-ce que vous vous rappelez de ce que je vous ai dit plus haut ? Lorsque l'on souhaite obtenir quelque chose, on le demande gentiment. Ça fait partie des bonnes manières.&lt;/p&gt;

&lt;p&gt;Pour obtenir ce que l'on souhaite, nous allons utiliser le Hook &lt;strong&gt;useContext&lt;/strong&gt;. Il va nous permettre d'utiliser ce que Context à rendu disponible.&lt;/p&gt;

&lt;p&gt;Avec cette ligne et grâce au &lt;em&gt;destructuring&lt;/em&gt;, nous nous permettons de récupérer notre donnée et notre fonction renduent disponible par notre Context :&lt;br&gt;
&lt;code&gt;const {darkMode, toggleDarkMode} = useContext(DarkModeContext);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Maintenant que nous avons accès à notre fonction, nous allons l'ajouter et l'exécuter lorsque le bouton sera cliqué et pour vous montrer que cela fonctionne, nous allons loguer la valeur de &lt;code&gt;darkMode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Votre code devrait ressembler à ceci : &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DarkModeContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./DarkModeProvider&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ToggleButton&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;toggleDarkMode&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Toggle&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Maintenant, ouvrez la console et cliquez sur sur le bouton et vous verrez la valeur de &lt;code&gt;darkMode&lt;/code&gt; passer de &lt;code&gt;false&lt;/code&gt; à &lt;code&gt;true&lt;/code&gt; et ainsi de suite.&lt;/p&gt;

&lt;p&gt;Super ! On a terminé toutes les étapes pour apprendre à utiliser les propriétés transmises par Context.&lt;/p&gt;

&lt;p&gt;De ce fait, voici le code qui nous permet d'ajouter la classe &lt;em&gt;dark-theme&lt;/em&gt; pour notre app :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Content&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DarkModeContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./DarkModeProvider&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DarkModeContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`app &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;darkMode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark-theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On récupère la valeur de &lt;code&gt;darkMode&lt;/code&gt; et si elle est &lt;code&gt;true&lt;/code&gt;, alors la classe sera ajouté.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Context&lt;/em&gt; nous permets de rendre disponible nos données/fonctions beaucoup plus facilement. On utilise &lt;em&gt;Context&lt;/em&gt; généralement pour des actions occasionnels (changement de thème, changement de la langue du site, …).&lt;/p&gt;

&lt;p&gt;Je vous invite maintenant à lire la documentation officielle de React sur &lt;em&gt;Context&lt;/em&gt; et &lt;em&gt;useContext&lt;/em&gt; pour parfaire vos connaissances et réaliser les exemples qu'ils proposent.&lt;/p&gt;

&lt;p&gt;Sayonara !&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Flexbox | flex-grow : la méthode de calcul (FR)</title>
      <dc:creator>Ahmed Bouras</dc:creator>
      <pubDate>Sat, 11 Jun 2022 16:58:58 +0000</pubDate>
      <link>https://dev.to/ahmedbouras/flex-grow-la-methode-de-calcul-54fa</link>
      <guid>https://dev.to/ahmedbouras/flex-grow-la-methode-de-calcul-54fa</guid>
      <description>&lt;p&gt;La propriété &lt;code&gt;flex-grow&lt;/code&gt; va vous permettre d'agrandir ou d'élargir vos items dans votre container en leur attribuant l'espace restant grâce à la méthode de calcul suivante :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;espace restant / total des parts demandés par les items&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pour comprendre cette méthode de calcul, voyons ensemble avec le code ci-dessous :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"items item1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"items item2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"items item3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*,&lt;/span&gt; &lt;span class="nd"&gt;::before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;crimson&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.items&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;aqua&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vos éléments devraient ressembler à ça :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_GmU3VD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nq398ox9zmwh8qtxgm5.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_GmU3VD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nq398ox9zmwh8qtxgm5.JPG" alt="3 items de 100 pixels de large dans un conteneur de 600 pixels de large" width="619" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comme vous pouvez le constater, les items ne prennent pas toute la largeur du container.&lt;br&gt;
C'est normal, car ils ont une largeur de 100px chacun (un total de 300px pour les 3) pour un container large de 600px.&lt;/p&gt;

&lt;p&gt;Nous allons utiliser &lt;code&gt;flex-grow&lt;/code&gt; pour faire en sorte que les items s'élargissent afin de compléter l'espace restant.&lt;/p&gt;

&lt;p&gt;Par défaut, nos items ont la propriété &lt;code&gt;flex-grow&lt;/code&gt; qui vaut 0.&lt;br&gt;
Modifions cette valeur à 1 pour les trois items.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.item1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c"&gt;/* default -&amp;gt;  flex-grow: 0; */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.item2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.item3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TADAAAAAM !!! Les items se partagent équitablement l'espace pour remplir le container.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tBIODjdm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26z1mjgecsdfcfn5e3r5.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tBIODjdm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26z1mjgecsdfcfn5e3r5.JPG" alt="3 items de 100 pixels de large avec la propriété flex-grow qui vaut 1 dans un conteneur de 600 pixels de large" width="607" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🙋 Mais que s'est-il réellement passé ?&lt;/p&gt;

&lt;p&gt;Nos 3 items prenaient 300px de large sur les 600px du container. Il restait donc 300px de libre.&lt;/p&gt;

&lt;p&gt;Avec &lt;code&gt;flex-grow&lt;/code&gt;, nous avons demandé à ce que chacun de nos items obtient une part de l'espace restant donc :&lt;/p&gt;

&lt;p&gt;1 part pour item1&lt;br&gt;
1 part pour item2&lt;br&gt;
1 part pour item3&lt;br&gt;
Ce qui fait un total de 3 parts.&lt;/p&gt;

&lt;p&gt;Utilisons notre méthode de calcul :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Espace restant = 300&lt;/li&gt;
&lt;li&gt;Total des parts demandés par les items = 3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;300 / 3 = 100.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Le résultat que l'on obtient équivaut à une seule part.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comme chaque item à demander une seule part, alors chaque item se verra attribué 100px de largeur en plus.&lt;/p&gt;

&lt;p&gt;🙋 Et si je souhaite qu'un item possède une part de plus que les autres ?&lt;/p&gt;

&lt;p&gt;C'est également possible. Il suffit de donner la valeur 2 (comme 2 parts) à l'item de notre choix. Exemple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.item1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.item2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.item3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uqCjTQVq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxpi9slw2li18ex4o11q.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uqCjTQVq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxpi9slw2li18ex4o11q.JPG" alt="3 items de 100 pixels de large avec la propriété  raw `flex-grow` endraw  qui vaut 1 pour le premier et le troisième item et qui vaut 2 pour le deuxième item dans un conteneur de 600 pixels de large" width="609" height="208"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;C'est qu'il est gourmand notre 2e item...&lt;/em&gt; 😁&lt;/p&gt;

&lt;p&gt;Revenons à notre méthode de calcul pour comprendre ce qu'il s'est passé.&lt;/p&gt;

&lt;p&gt;1 part pour item1&lt;br&gt;
2 parts pour item2&lt;br&gt;
1 part pout item3&lt;br&gt;
Ce qui fait un total de 4 parts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Espace restant = 300&lt;/li&gt;
&lt;li&gt;Total des parts demandés par les items = 4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;300 / 4 = 75.&lt;/p&gt;

&lt;p&gt;item1 : 100 + 75&lt;br&gt;
item2 : 100 + 75 x 2 (car il a demandé 2 parts)&lt;br&gt;
item3 : 100 + 75&lt;/p&gt;

&lt;p&gt;item1 vaut 175px de large.&lt;br&gt;
item2 vaut 250px de large.&lt;br&gt;
item3 vaut 175px de large.&lt;/p&gt;

&lt;p&gt;Je vous invite bien évidemment à  utiliser l'inspecteur d'élément de votre navigateur pour avoir un visuel de l'extension de nos items comme ci-dessous :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y7Q2bSYU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0l1ddhta9qi0pisi0u4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y7Q2bSYU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0l1ddhta9qi0pisi0u4n.png" alt="items et conteneur avec l'inspecteur d'élément" width="783" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;J'espère que vous avez compris le concept de cette méthode de calcul.&lt;br&gt;
N'hésitez pas à vous amuser avec différentes valeurs pour &lt;code&gt;flex-grow&lt;/code&gt;, devinez la taille de vos éléments et enfin, vérifiez via l'inspecteur d'élément le résultat de vos calculs.&lt;/p&gt;

&lt;p&gt;Cette méthode reste la même si vous utilisez &lt;code&gt;flex-direction: column&lt;/code&gt; avec un container plus grand.&lt;br&gt;
Les items se partageront alors la hauteur. 😉&lt;/p&gt;

</description>
      <category>french</category>
      <category>flexbox</category>
      <category>css</category>
    </item>
    <item>
      <title>My first contribution</title>
      <dc:creator>Ahmed Bouras</dc:creator>
      <pubDate>Sat, 02 Apr 2022 17:39:35 +0000</pubDate>
      <link>https://dev.to/ahmedbouras/my-first-contribution-4pdi</link>
      <guid>https://dev.to/ahmedbouras/my-first-contribution-4pdi</guid>
      <description>&lt;p&gt;I am so happy to announce you that I made my first contribution ! 🎉&lt;/p&gt;

&lt;p&gt;It's not a bug that I fixed but, I'm proud to have particpated to my first opensource project (even if it was for the documentation).&lt;/p&gt;

&lt;p&gt;My Pull Request : &lt;a href="https://github.com/symfony/symfony-docs/pull/16596"&gt;https://github.com/symfony/symfony-docs/pull/16596&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you, what did you feel when you contributed for the first time ?&lt;/p&gt;

</description>
      <category>symfony</category>
      <category>php</category>
      <category>github</category>
      <category>discuss</category>
    </item>
    <item>
      <title>GIT - Corriger une erreur dans un fichier commité (FR)</title>
      <dc:creator>Ahmed Bouras</dc:creator>
      <pubDate>Mon, 22 Nov 2021 10:36:45 +0000</pubDate>
      <link>https://dev.to/ahmedbouras/git-corriger-une-erreur-dans-un-fichier-commite-fr-2187</link>
      <guid>https://dev.to/ahmedbouras/git-corriger-une-erreur-dans-un-fichier-commite-fr-2187</guid>
      <description>&lt;p&gt;Vous venez de commiter un ou plusieurs fichiers mais vous vous êtes rendu compte d'une erreur ou d'un oubli ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep calm and &lt;code&gt;git commit --amend&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En effet, cette commande permet à la fois de modifier votre dernier message commité, mais aussi de rattraper une erreur dans le contenu de votre dernier commit. 😍&lt;/p&gt;

&lt;p&gt;Imaginons qu'on vous demande de créer un fichier hello.php pour dire bonjour :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Hello'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vous faites un &lt;code&gt;git add hello.php&lt;/code&gt; puis un &lt;code&gt;git commit -m "hello.php say Hello"&lt;/code&gt;. Jusque là tout vas bien.&lt;/p&gt;

&lt;p&gt;Sauf qu'on vous a demandé de dire bonjour… Au monde entier…&lt;br&gt;
Zut vous avez mal entendu. 😅&lt;/p&gt;

&lt;p&gt;Alors plutôt que de modifier le fichier et de créer un autre commit du genre &lt;code&gt;git commit -m "World! added to index.php because I forgot it"&lt;/code&gt; 😒, voici la marche à suivre :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modifiez votre fichier&lt;/li&gt;
&lt;li&gt;Faite un &lt;code&gt;git add&lt;/code&gt; du/des fichier(s) modifié(s)&lt;/li&gt;
&lt;li&gt;Faite un &lt;code&gt;git commit --amend&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Modifiez (ou non) le message de votre dernier commit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Pour ne pas modifier le message de votre commit, vous pouvez effectuer la commande&lt;/em&gt; &lt;code&gt;git commit --amend --no-edit&lt;/code&gt; &lt;em&gt;au niveau de l'étape 3&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Et voilà ! Ni vu ni connu ! Votre erreur est passée inaperçue…&lt;/p&gt;

&lt;p&gt;Enfin presque… Le SHA de votre commit sera modifié. Il est recommandé, d'après &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History"&gt;la documentation&lt;/a&gt;, de ne pas effectuer cette opération si votre commit a déjà été push sur votre dépôt distant.&lt;/p&gt;

</description>
      <category>git</category>
      <category>commit</category>
      <category>french</category>
    </item>
    <item>
      <title>align-items vs align-content (FR)</title>
      <dc:creator>Ahmed Bouras</dc:creator>
      <pubDate>Sun, 14 Nov 2021 18:18:06 +0000</pubDate>
      <link>https://dev.to/ahmedbouras/align-items-vs-align-content-fr-36on</link>
      <guid>https://dev.to/ahmedbouras/align-items-vs-align-content-fr-36on</guid>
      <description>&lt;p&gt;Tout d'abord, il est important de poser les bases et de comprendre le système des axes avec Flexbox.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pour faire simple, les exemples ci-dessous seront basés sur le fait que notre conteneur utilise la valeur par défaut de flex-direction : &lt;code&gt;flex-direction: row;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dans ce cas, notre main-axis (axe principal), en rouge, représentera notre axe horizontal et cross-axis (axe transversal), en noir, représentera notre axe vertical.&lt;br&gt;
C'est sur ce dernier axe que nos propriétés &lt;code&gt;align-items&lt;/code&gt; et &lt;code&gt;align-content&lt;/code&gt; prendront effet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcms-assets.tutsplus.com%2Fcdn-cgi%2Fimage%2Fwidth%3D850%2Fuploads%2Fusers%2F30%2Fposts%2F30183%2Fimage%2Faxes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcms-assets.tutsplus.com%2Fcdn-cgi%2Fimage%2Fwidth%3D850%2Fuploads%2Fusers%2F30%2Fposts%2F30183%2Fimage%2Faxes.png" alt="l'axe principal est horizontal et l'axe transversal et vertical"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sachez que si notre conteneur était configuré sur &lt;code&gt;flex-direction: column&lt;/code&gt;, alors les axes seraient inversés :&lt;br&gt;
L'axe principal deviendrait l'axe vertical, tandis que l'axe transversal deviendrait l'axe horizontal... Le monde à l'envers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enfin bref, attaquons nous à ces align-blablabla&lt;/p&gt;

&lt;p&gt;Par défaut, un conteneur qui a la propriété &lt;code&gt;display: flex;&lt;/code&gt; fera en sorte de mettre tous ses items sur une seule et même &lt;strong&gt;ligne&lt;/strong&gt;, et ce, peu importe la largeur de ses items, en les compressant.&lt;br&gt;
&lt;em&gt;Je n'ai pas mis le mot "ligne" en gras pour rien, il nous aidera à comprendre la suite.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza1vtnj3n6f0f5qhjbfj.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza1vtnj3n6f0f5qhjbfj.JPG" alt="items sur une seule ligne"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ici, les items 1 à 10 font partie de la même ligne.&lt;/p&gt;

&lt;p&gt;Alors que si j'utilise la propriété &lt;code&gt;flex-wrap: wrap;&lt;/code&gt;, les items s'étendront à leurs largeurs respectives et s'il n'y a plus de place sur la ligne, alors une autre ligne sera créée pour ces items.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfnkx4knzyfz8942p4xk.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfnkx4knzyfz8942p4xk.JPG" alt="items sur deux lignes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ici, nous avons deux lignes :&lt;br&gt;
La première aves les items de 1 à 6 et la deuxième aves les items de 7 à 10.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pour info, une ligne aura pour hauteur celle de son item le plus grand. Je les ai identifiées à l'aide d'un encadré rouge.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc0j72jpr1i1dcgby7t4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc0j72jpr1i1dcgby7t4.jpg" alt="détail des lignes des items"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dans le cas où votre conteneur dispose seulement d'une seule ligne d'items, alors la propriété &lt;code&gt;align-content&lt;/code&gt; n'aura aucun effet sur celle-ci.&lt;br&gt;
Effectivement, cette propriété est à utiliser lorsque votre conteneur possède plusieurs lignes d'items.&lt;/p&gt;

&lt;p&gt;En revanche, notre propriété &lt;code&gt;align-items&lt;/code&gt; peut déjà nous être utile pour aligner/positionner nos items sur l'axe transversal.&lt;br&gt;
Je vous laisse tester les différentes valeurs que vous retrouverez &lt;a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/#align-items" rel="noopener noreferrer"&gt;ici&lt;/a&gt;. 😉&lt;/p&gt;

&lt;p&gt;Vous remarquerez alors que cette propriété nous permet à la fois de positionner les items par rapport à leur ligne mais aussi par rapport à leur conteneur.&lt;/p&gt;

&lt;p&gt;Exemple :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ceci aura pour effet de centrer la ligne (sur l'axe transversal) par rapport à son conteneur mais aussi de centrer les items (sur l'axe transversal) par rapport à leur ligne.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feedrs43iekxzotfsmmdf.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feedrs43iekxzotfsmmdf.JPG" alt="ligne centré par rapport au conteneur et items centrés par rapport à leur ligne"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🙋&lt;br&gt;
"Et du coup, quand on a plusieurs lignes, à quoi nous sert &lt;code&gt;align-content&lt;/code&gt; ?"&lt;/p&gt;

&lt;p&gt;Cette propriété vas nous permettre de gérer la disposition de nos lignes par rapport au conteneur mais n'aura aucun impact sur la disposition des items dans leurs lignes.&lt;/p&gt;

&lt;p&gt;💁&lt;br&gt;
"Mais ça ne sert à rien puisque &lt;code&gt;align-items&lt;/code&gt; fait les deux en une seule fois…"&lt;/p&gt;

&lt;p&gt;Ok… Ok… Nous allons passer sur un exemple avec plusieurs lignes pour comprendre la différence entre ces deux propriétés.&lt;/p&gt;

&lt;p&gt;Premier cas avec &lt;code&gt;align-items&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="o"&gt;![&lt;/span&gt;&lt;span class="nt"&gt;items&lt;/span&gt; &lt;span class="nt"&gt;centrés&lt;/span&gt; &lt;span class="nt"&gt;par&lt;/span&gt; &lt;span class="nt"&gt;rapport&lt;/span&gt; &lt;span class="nt"&gt;à&lt;/span&gt; &lt;span class="nt"&gt;leurs&lt;/span&gt; &lt;span class="nt"&gt;lignes&lt;/span&gt; &lt;span class="nt"&gt;mais&lt;/span&gt; &lt;span class="nt"&gt;pas&lt;/span&gt; &lt;span class="nt"&gt;complètement&lt;/span&gt; &lt;span class="nt"&gt;centrés&lt;/span&gt; &lt;span class="nt"&gt;par&lt;/span&gt; &lt;span class="nt"&gt;rapport&lt;/span&gt; &lt;span class="nt"&gt;au&lt;/span&gt; &lt;span class="nt"&gt;conteneur&lt;/span&gt;&lt;span class="o"&gt;](&lt;/span&gt;&lt;span class="nt"&gt;https&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="nt"&gt;dev-to-uploads&lt;/span&gt;&lt;span class="nc"&gt;.s3.amazonaws.com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;uploads&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;articles&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nt"&gt;dw5htr6yzawyhi99440&lt;/span&gt;&lt;span class="nc"&gt;.JPG&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;Les&lt;/span&gt; &lt;span class="nt"&gt;items&lt;/span&gt; &lt;span class="nt"&gt;sont&lt;/span&gt; &lt;span class="nt"&gt;centrés&lt;/span&gt; &lt;span class="nt"&gt;par&lt;/span&gt; &lt;span class="nt"&gt;rapport&lt;/span&gt; &lt;span class="nt"&gt;à&lt;/span&gt; &lt;span class="nt"&gt;leurs&lt;/span&gt; &lt;span class="nt"&gt;lignes&lt;/span&gt; &lt;span class="nt"&gt;respectives&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;sur&lt;/span&gt; &lt;span class="nt"&gt;l&lt;/span&gt;&lt;span class="s2"&gt;'axe transversal) et les lignes se sont quelques peu centrées par rapport à leur conteneur tout en étant espacées…

Deuxième cas avec `align-content` :


````css
.container {
  display: flex;
  flex-wrap: wrap;
  align-content: center;
}
```



![lignes centrés par rapport au conteneur sans espace entre elles](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wx9dxeraslva34oi37f5.JPG)

Aucun effet sur les items par rapport à leurs lignes respectives. Par contre, **les lignes sont complètement centrées** par rapport à leur conteneur via l'&lt;/span&gt;&lt;span class="nt"&gt;axe&lt;/span&gt; &lt;span class="nt"&gt;transversal&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;et&lt;/span&gt; &lt;span class="nt"&gt;ce&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;sans&lt;/span&gt; &lt;span class="nt"&gt;espace&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;

&lt;span class="nt"&gt;Vous&lt;/span&gt; &lt;span class="nt"&gt;comprenez&lt;/span&gt; &lt;span class="nt"&gt;mieux&lt;/span&gt; &lt;span class="nt"&gt;maintenant&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;

&lt;span class="nt"&gt;Je&lt;/span&gt; &lt;span class="nt"&gt;ne&lt;/span&gt; &lt;span class="nt"&gt;vais&lt;/span&gt; &lt;span class="nt"&gt;pas&lt;/span&gt; &lt;span class="nt"&gt;rentrer&lt;/span&gt; &lt;span class="nt"&gt;dans&lt;/span&gt; &lt;span class="nt"&gt;les&lt;/span&gt; &lt;span class="nt"&gt;détails&lt;/span&gt; &lt;span class="nt"&gt;concernant&lt;/span&gt; &lt;span class="nt"&gt;les&lt;/span&gt; &lt;span class="nt"&gt;espaces&lt;/span&gt; &lt;span class="nt"&gt;qu&lt;/span&gt;&lt;span class="s2"&gt;'ajoute la propriété `align-items` entre les lignes, mais ce qui est important, c'&lt;/span&gt;&lt;span class="nt"&gt;est&lt;/span&gt; &lt;span class="nt"&gt;de&lt;/span&gt; &lt;span class="nt"&gt;différencier&lt;/span&gt; &lt;span class="nt"&gt;le&lt;/span&gt; &lt;span class="nt"&gt;but&lt;/span&gt; &lt;span class="nt"&gt;principal&lt;/span&gt; &lt;span class="nt"&gt;de&lt;/span&gt; &lt;span class="nt"&gt;ces&lt;/span&gt; &lt;span class="nt"&gt;propriétés&lt;/span&gt; &lt;span class="nt"&gt;lorsque&lt;/span&gt; &lt;span class="nt"&gt;l&lt;/span&gt;&lt;span class="s2"&gt;'on possède plusieurs lignes d'&lt;/span&gt;&lt;span class="nt"&gt;items&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;

&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="nt"&gt;align-items&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nt"&gt;permet&lt;/span&gt; &lt;span class="nt"&gt;d&lt;/span&gt;&lt;span class="s2"&gt;'aligner les items par rapport à leurs lignes**.
* `align-content` **permet d'&lt;/span&gt;&lt;span class="nt"&gt;aligner&lt;/span&gt; &lt;span class="nt"&gt;les&lt;/span&gt; &lt;span class="nt"&gt;lignes&lt;/span&gt; &lt;span class="nt"&gt;par&lt;/span&gt; &lt;span class="nt"&gt;rapport&lt;/span&gt; &lt;span class="nt"&gt;à&lt;/span&gt; &lt;span class="nt"&gt;leur&lt;/span&gt; &lt;span class="nt"&gt;conteneur&lt;/span&gt;&lt;span class="o"&gt;**.&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nt"&gt;Les&lt;/span&gt; &lt;span class="nt"&gt;lignes&lt;/span&gt; &lt;span class="nt"&gt;sont&lt;/span&gt; &lt;span class="nt"&gt;le&lt;/span&gt; &lt;span class="nt"&gt;contenu&lt;/span&gt; &lt;span class="nt"&gt;de&lt;/span&gt; &lt;span class="nt"&gt;notre&lt;/span&gt; &lt;span class="nt"&gt;conteneur&lt;/span&gt;&lt;span class="o"&gt;.*&lt;/span&gt; &lt;span class="nd"&gt;:wink&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;

&lt;span class="nt"&gt;De&lt;/span&gt; &lt;span class="nt"&gt;par&lt;/span&gt; &lt;span class="nt"&gt;leurs&lt;/span&gt; &lt;span class="nt"&gt;noms&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;les&lt;/span&gt; &lt;span class="nt"&gt;propriétés&lt;/span&gt; &lt;span class="nt"&gt;nous&lt;/span&gt; &lt;span class="nt"&gt;donnaient&lt;/span&gt; &lt;span class="nt"&gt;déjà&lt;/span&gt; &lt;span class="nt"&gt;de&lt;/span&gt; &lt;span class="nt"&gt;gros&lt;/span&gt; &lt;span class="nt"&gt;indices&lt;/span&gt; &lt;span class="nt"&gt;sur&lt;/span&gt; &lt;span class="nt"&gt;leurs&lt;/span&gt; &lt;span class="nt"&gt;fonctionnements&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nt"&gt;Un&lt;/span&gt; &lt;span class="nt"&gt;joli&lt;/span&gt; &lt;span class="nt"&gt;moyen&lt;/span&gt; &lt;span class="nt"&gt;mnémotechnique&lt;/span&gt; &lt;span class="nt"&gt;pour&lt;/span&gt; &lt;span class="nt"&gt;ne&lt;/span&gt; &lt;span class="nt"&gt;plus&lt;/span&gt; &lt;span class="nt"&gt;les&lt;/span&gt; &lt;span class="nt"&gt;confondre&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nd"&gt;:grin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>css</category>
      <category>flexbox</category>
      <category>french</category>
    </item>
  </channel>
</rss>
