<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Leonel Ngoya</title>
        <link>https://www.lndev.me</link>
        <description>Personal blog of Leonel Ngoya ( LN )</description>
        <lastBuildDate>Tue, 28 Apr 2026 19:04:08 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Leonel Ngoya</title>
            <url>https://www.lndev.me/favicon.ico</url>
            <link>https://www.lndev.me</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <item>
            <title><![CDATA[Créer un curseur personnalisé]]></title>
            <link>https://www.lndev.me/articles/creer-un-curseur-personnalise</link>
            <guid>https://www.lndev.me/articles/creer-un-curseur-personnalise</guid>
            <pubDate>Sun, 14 Aug 2022 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<hr>
<p>Hey,<br>
Avant de commencer on doit tous savoir ce que c'est qu'un <em>curseur personnalisé</em> . Les passionnés du Creative Development ou mêmes ceux qui regardent souvent les sites de <a href="https://awwwards.com">AWWWARDS</a> doivent avoir une petite idée de ce que c'est, mais voici un exemple et ce qu'on fera dans cet article.</p>
<img alt="" loading="lazy" width="782" height="344" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.4977aad8.gif&amp;w=828&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.4977aad8.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.4977aad8.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>C' est un effet plutot sympa que vous pouvez trouver sur certain site.  A première vu on se demande comment on va le faire et on peut croire que c' est un peu complexe. Je vais vous rassurer que c'est pas le cas. Pour réaliser ceci nous aurons besoin de trois fichier :  <code>HTML - CSS - JS</code> . Sans plus tarder, lançons nous dans le code !</p>
<hr>
<h3>Le HTML</h3>
<p>Après la création de vos fichiers ( <code>index.html</code> - <code>style.css</code> - <code>app.js</code> )  tous dans un même dossier, nous allons nous rendre dans le fichier html et ecrire ceci :</p>
<pre class="language-html"><code class="language-html"><span class="token doctype"><span class="token punctuation">&lt;!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UTF-8<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, initial-scale=1.0<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>style.css<span class="token punctuation">"</span></span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>app.js<span class="token punctuation">"</span></span> <span class="token attr-name">defer</span><span class="token punctuation">&gt;</span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>title</span><span class="token punctuation">&gt;</span></span>Test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>title</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>mouse<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>Je crois que la c' est la partie la plus facile, car on a juste une seule <code>div</code> dans notre <code>body</code> et c' est celle ci qui nous servira de curseur. Et oui, côté <code>HTML</code> on est okay, plus rien à faire !</p>
<hr>
<h3>Le CSS</h3>
<p>Maintenant on se rend dans le <code>style.css</code>  et ce qu' on va faire premièrement c' est donner un peu de style a notre <code>div</code></p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token id">#mouse</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
  <span class="token property">top</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">%</span><span class="token punctuation">;</span>
  <span class="token property">left</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">%</span><span class="token punctuation">;</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span>
  <span class="token property">border-radius</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">%</span><span class="token punctuation">;</span>
  <span class="token property">border</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token unit">px</span> solid <span class="token hexcode color">#000</span><span class="token punctuation">;</span>
  <span class="token property">transform</span><span class="token punctuation">:</span> <span class="token function">translate</span><span class="token punctuation">(</span><span class="token number">-50</span><span class="token unit">%</span><span class="token punctuation">,</span> <span class="token number">-50</span><span class="token unit">%</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Et au centre de notre de notre écran nous devrions avoir ceci :</p>
<img alt="" loading="lazy" width="1912" height="845" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.7ae5c621.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.7ae5c621.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.7ae5c621.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<blockquote>
<p>le <code>transform: translate(-50%, -50%);</code> nous permettra de centrer notre curseur par rapport à la div</p>
</blockquote>
<blockquote>
<p>Ceux ( ou celles ) qui ne comprennent pas pourquoi c' est au centre peuvent aller consulter mon article sur le <a href="/articles/positionnement-en-css">Positionnement en CSS</a> ou j' explique plus en detail ce genre de comportement.</p>
</blockquote>
<p>Donc pour l' instant on a rien de compliqué, mais si vous avez remarqué on a toujours notre curseur qui apparait sur l' écran et il est complètement indépendant de notre <code>div ( #mouse )</code> et on se demande bien pourquoi mais aussi comment faire que notre curseur dépende de notre div. Et c' est maintenant que Monsieur <code>JavaScript</code> intervient.</p>
<hr>
<h3>Le JavaScript</h3>
<p>Un tour dans le fichier <code>app.js</code> et la première chose que nous allons faire c' est de selectionner notre div :</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> mouse <span class="token operator">=</span> <span class="token dom variable">document</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">'#mouse'</span><span class="token punctuation">)</span>
</code></pre>
<p>Maintenant, grâce à <a href="https://developer.mozilla.org/fr/docs/Web/API/EventTarget/addEventListener">addEventListener</a> nous allons pouvoir rattacher l' écoute d' un évènement a notre div, dans notre cas nous utiliserons <a href="https://developer.mozilla.org/fr/docs/Web/API/Element/mousemove_event">mousemove</a> ( en gros il se déclenche chaque fois que le curseur bouge ) . Donc dans notre code on doit avoir quelque chose comme ca :</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> mouse <span class="token operator">=</span> <span class="token dom variable">document</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">'#mouse'</span><span class="token punctuation">)</span>
mouse<span class="token punctuation">.</span><span class="token method function property-access">addEventListener</span><span class="token punctuation">(</span><span class="token string">'mousemove'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<blockquote>
<p>L' objectif présentement est de pouvoir <code>changer la position de notre div a chaque fois que l' on bouge le curseur</code> . Les valeurs des positions que nous devons attribuer a la div <code>doivent etre les mêmes qu' occupent le curseur a cet instant</code> et ceci fera donc en sorte que la div et le curseur se trouve au même endroit au même instant.</p>
</blockquote>
<p>Et la on se dit : " Okay <a href="https://x.com/ln_dev7">LN</a>, c' est bien beau tout ça mais comment realiser ce que tu viens de dire ? " Et bien ... JavaScript a des propriétés pour pouvoir détecter la valeur de la position ( en <code>pixel ( px )</code> ) sur l' axe des X et des Y du curseur. On a donc : <a href="https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/pageX">pageX</a> et <a href="https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/pageY">pageY</a></p>
<img alt="" loading="lazy" width="1634" height="717" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.9ab32a0c.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.9ab32a0c.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.9ab32a0c.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Le but sera donc d' affecter ces valeurs a <code>top: ;</code> et <code>left: ;</code> de notre div, ce qui est un jeu d' enfant :</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> mouse <span class="token operator">=</span> <span class="token dom variable">document</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">"#mouse"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
mouse<span class="token punctuation">.</span><span class="token method function property-access">addEventListener</span><span class="token punctuation">(</span><span class="token string">"mousemove"</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
  mouse<span class="token punctuation">.</span><span class="token property-access">style</span><span class="token punctuation">.</span><span class="token property-access">top</span> <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token property-access">pageY</span> <span class="token operator">+</span> <span class="token string">"px"</span><span class="token punctuation">;</span>
  mouse<span class="token punctuation">.</span><span class="token property-access">style</span><span class="token punctuation">.</span><span class="token property-access">left</span> <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token property-access">pageX</span> <span class="token operator">+</span> <span class="token string">"px"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>Je sais pas si vous vous êtes rendus compte mais le résultat est un peu "bizzare", regardez bien :</p>
<img alt="" loading="lazy" width="780" height="344" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.87ff1b84.gif&amp;w=828&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.87ff1b84.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.87ff1b84.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<blockquote>
<p>On remarque que <code>le curseur et la div ne sont pas vraiment synchro</code> ce qui fait que <code>la div se déplace uniquement quand le cursur est sur elle, mais si on essaie de VITE déplacer le curseur, les deux ne sont plus ensemble</code></p>
</blockquote>
<p>Essayez de déviner où se trouve le problème :) ... Il est la :</p>
<blockquote>
<p>quand on a fait le <code>addEventListener</code> on lui a rattache la div ( <code>mouse.addEventListener</code> ) et c' est ca la raison, avec ceci la position de la div change uniquement quand la souris est sur elle</p>
</blockquote>
<p>Vous vous demandez alors comment faire pour y remédier, et bien c' est très facile, a la place de rattacher la div on rattachera l' element <code>window</code> ca fait qu' on doit avoir un code comme ceci :</p>
<pre class="language-js"><code class="language-js"><span class="token keyword">const</span> mouse <span class="token operator">=</span> <span class="token dom variable">document</span><span class="token punctuation">.</span><span class="token method function property-access">querySelector</span><span class="token punctuation">(</span><span class="token string">'#mouse'</span><span class="token punctuation">)</span>
<span class="token dom variable">window</span><span class="token punctuation">.</span><span class="token method function property-access">addEventListener</span><span class="token punctuation">(</span><span class="token string">'mousemove'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
  mouse<span class="token punctuation">.</span><span class="token property-access">style</span><span class="token punctuation">.</span><span class="token property-access">top</span> <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token property-access">pageY</span> <span class="token operator">+</span> <span class="token string">'px'</span>
  mouse<span class="token punctuation">.</span><span class="token property-access">style</span><span class="token punctuation">.</span><span class="token property-access">left</span> <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token property-access">pageX</span> <span class="token operator">+</span> <span class="token string">'px'</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<p>Et le résultat est impeccable :)</p>
<img alt="" loading="lazy" width="782" height="344" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.e5d7a334.gif&amp;w=828&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.e5d7a334.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.e5d7a334.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>La div suit toujours le curseur peut importe ou il va !
Maintenant il est aussi possible d' enlever le curseur par defaut et de ne laisser que la div ( comme dans la demo a l' intro ) et ceci se fera en CSS, nous devons juste ajouter ceci au debut de notre code :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">html</span> <span class="token punctuation">{</span>
  <span class="token property">cursor</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Et on a ca :</p>
<img alt="" loading="lazy" width="782" height="344" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.4977aad8.gif&amp;w=828&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.4977aad8.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.4977aad8.gif&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<hr>
<p>On est arrivé a la fin de cet article et j'espère qu' il vous a plu, si c'est le cas n'hésitez pas a partager sur vos réseaux et aussi a poser vos questions si vous n'avez pas très bien compris un point. On se dit donc à un prochain article, ciao ! C'était <a href="https://x.com/ln_dev7">LN</a> 👋</p>
<hr>
<ul>
<li>Article précédent : <a href="/articles/flexbox-partie-1">Flexbox partie 1</a></li>
<li>Article suivant : <a href="/articles/flexbox-partie-2">Flexbox partie 2</a></li>
</ul>]]></content:encoded>
            <author>leonelngoya@gmail.com (Leonel Ngoya)</author>
        </item>
        <item>
            <title><![CDATA[Flexbox partie 1]]></title>
            <link>https://www.lndev.me/articles/flexbox-partie-1</link>
            <guid>https://www.lndev.me/articles/flexbox-partie-1</guid>
            <pubDate>Mon, 01 Aug 2022 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<hr>
<p>Hey, <br>
Alors, c'est quoi les <code>FlexBox</code> ? Déjà pour ceux qui ne le savent pas, avant ( bien avant ) pour positionner nos éléments on utlisait les <code>float</code> ( je vais pas revenir dessus mais si vous voulez en savoir plus vous pouvez regarder <a href="https://developer.mozilla.org/fr/docs/Web/CSS/float">ICI</a> ) mais celui ci avait des inconvénients, une majeure était que <code>un élément en float sort du flux normal de l'écran</code> ( exactement comme on a vu dans les <a href="/articles/positionnement-en-css">positions</a> ) ce qui n'était pas toujours pratique et donnait des résultats désagréable des fois. C'est alors comme ca que <code>flexbox</code> intervient. En une phrase nous pouvons dire que :</p>
<blockquote>
<p><code>flexbox</code> c'est un ensemble de propriété qui a pour but principal de pouvoir piloter des éléments enfants depuis l'élément parent.</p>
</blockquote>
<p>A dire comme ca c'est assez flou mais dans cette série d'artclie ( oui il y'en aura plusieurs ) nous allons essayer d'analyser pas a pas ce systeme.</p>
<hr>
<p>Alors pour cet article on commencera avec un fichier <code>index.html</code> contenant :</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-1<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-2<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-3<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-4<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-5<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>Et un fichier <code>style.css</code> contenant :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">*</span> <span class="token punctuation">{</span>
  <span class="token property">margin</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">box-sizing</span><span class="token punctuation">:</span> border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item</span></span> <span class="token punctuation">{</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">150</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">150</span><span class="token unit">px</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-1</span></span> <span class="token punctuation">{</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#f00</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-2</span></span> <span class="token punctuation">{</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#0f0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-3</span></span> <span class="token punctuation">{</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#00f</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-4</span></span> <span class="token punctuation">{</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#ff0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-5</span></span> <span class="token punctuation">{</span>
  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#0ff</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Pour le moment rien de compliquer, et comme rendu nous avons ceci :</p>
<img alt="" loading="lazy" width="1919" height="847" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b46c0cad.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b46c0cad.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b46c0cad.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<hr>
<p><code>Flexbox</code> en réalité c'est un systeme de <code>display</code> ; donc pour avoir acces aux propriétés qu'il nous offre, nous devant changer notre <em>display</em> , mais le <em>display</em> de quel élément ? Bien évidement de l'élément parent car c'est lui qui va piloter ses enfants. Alors pour commencer on va changer le <em>display</em> de notre div <em>container</em>  en <code>display: flex;</code> et oui c'est pas <code>display: flexbox;</code> comme on l'aurait cru</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span><span class="token punctuation">{</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="1919" height="847" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.f4c1b3cd.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.f4c1b3cd.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.f4c1b3cd.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Le résultat est plutot étonnant, on dirait de la magie et bien sur on se demamde ce qu'il s'est passé. Pour comprendre ceci nous allons évoquer une propriété des <em>flexbox</em> et vous devez bien la comprendre car ca sera primordial pour la suite.</p>
<hr>
<h3>flex-direction: ;</h3>
<p>C'est une propriété tres importante dans <code>flexbox</code> , elle permet de définir comment seront alignés nos éléments enfants. Ce que vous devez comprendre actuellement c'est qu'elle peut prendre 4 valeurs a savoir :</p>
<pre class="language-css"><code class="language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token punctuation">:</span> row-reverse<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token punctuation">:</span> column<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token punctuation">:</span> column-reverse<span class="token punctuation">;</span>
</code></pre>
<p>Les plus intélligents auront devinés que la valeur par éfautd c'est <code>flex-direction: row;</code> ce qui veut dire que <code>Mes enfants vont s'aligner sous forme de ligne</code> et <code>row-reverse</code> veut juste dire que ca sera du sens contraire ( les elements vont s'inverser ) .</p>
<pre class="language-css"><code class="language-css"><span class="token property">flex-direction</span><span class="token punctuation">:</span> row-reverse<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token punctuation">:</span> column<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token punctuation">:</span> column-reverse<span class="token punctuation">;</span>
</code></pre>
<p>Le résultat respectif de ces trois valeurs donne ca :</p>
<img alt="" loading="lazy" width="1919" height="847" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.bcca9299.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.bcca9299.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.bcca9299.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<img alt="" loading="lazy" width="1919" height="847" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.93c6fac7.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.93c6fac7.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.93c6fac7.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<img alt="" loading="lazy" width="1919" height="847" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.478602aa.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.478602aa.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.478602aa.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>*** C'est bien beau mais c'est pas vraiment la chose IMPORTANTE que je voulez que
vous reteniez sur cette propriété. Faut savoir que le <code>display: flex;</code> crée un repère
( oui comme en maths ) ayant deux axes appellé le <code>mainAxis Alignment</code> pour l'axe
principal et le <code>crossAxis Alignment</code> pour le second.</p>
<p>C'est toujours flou et vous ne voyez pas le rapport. Alors, Il est la :</p>
<blockquote>
<p>La position de l'axe principal ( <code>mainAxis Alignment</code> ) et du second axe ( <code>crossAxis Alignment</code> ) dépend de la valeur du <code>flex-direction</code></p>
</blockquote>
<blockquote>
<p>Si le <code>flex-direction: row / row-reserve ;</code> ca sera comme ca :</p>
</blockquote>
<img alt="" loading="lazy" width="1280" height="1147" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.5bf35c32.jpeg&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.5bf35c32.jpeg&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.5bf35c32.jpeg&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<blockquote>
<p>Si le <code>flex-direction: column / column-reserve ;</code> ca sera comme ca :</p>
</blockquote>
<img alt="" loading="lazy" width="1280" height="950" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.878cf0b1.jpeg&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.878cf0b1.jpeg&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.878cf0b1.jpeg&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Ce que je viens de vous dire est TRES IMPORTANT pour la suite et prennez vraiment la peine de bien comprendre ca pour ne pas avoir les problemes dans le futur.</p>
<p>Je vous laisse avec l'eau dans la bouche en attendant la suite de cette série.</p>
<hr>
<p>On est arrivé a la fin de cet article partie et j'espère qu'il vous a plu, si c'est le cas n'hésitez pas a partager sur vos réseaux et aussi a poser vos questions si vous n'avez pas très bien compris un point. On se dit donc au prochain article, ciao ! C'était <a href="https://x.com/ln_dev7">LN</a> 👋</p>
<hr>
<ul>
<li>Article précédent : <a href="/articles/positionnement-en-css">Positionnement en CSS</a></li>
<li>Article suivant : <a href="/articles/creer-un-curseur-personnalise">Créer un curseur personnalisé</a></li>
</ul>]]></content:encoded>
            <author>leonelngoya@gmail.com (Leonel Ngoya)</author>
        </item>
        <item>
            <title><![CDATA[Flexbox partie 2]]></title>
            <link>https://www.lndev.me/articles/flexbox-partie-2</link>
            <guid>https://www.lndev.me/articles/flexbox-partie-2</guid>
            <pubDate>Mon, 13 May 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<hr>
<p>Hey, <br>
Ça fait un bail ( plus d'un an 😬 ), alors pour mon retour j'ai décidé de continuer la série sur <code>FlexBox</code> parceque oui, il y'a déjà eu un premier article sur ce sujet que vous pouvez consulter <a href="/articles/flexbox-partie-1">ICI</a>, article que je vous conseille de consulter pour bien comprendre la suite de la série <code>FlexBox</code>.</p>
<hr>
<p>Dans l'article précédent on a parlé de la propriété <code>display: flex;</code> qui permet de transformer un élément en conteneur flex et aussi de <code>flex-direction</code> qui permet de définir comment les éléments enfants vont s'aligner mais sutout, je vous ai aussi parlé de deux axes <code>mainAxis Alignment</code> et <code>crossAxis Alignment</code> qui sont très importants. <br></p>
<hr>
<p>Dans cette article on va voir deux autres propriétés qui sont <code>justify-content</code> et <code>align-items</code>, elles permettent de controler l'alignement des éléments enfants dans le conteneur flex. <br></p>
<hr>
<p>Reprenons nos fichiers, on a un <code>index.html</code> contenant :</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-1<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#f00</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-2<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#0f0</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-3<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#00f</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-4<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#ff0</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>item item-5<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token hexcode color">#0ff</span><span class="token punctuation">;</span></span><span class="token punctuation">"</span></span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>et <code>style.css</code> contenant :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">*</span> <span class="token punctuation">{</span>
  <span class="token property">margin</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">box-sizing</span><span class="token punctuation">:</span> border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token comment">/* qui est la valeur par défaut */</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item</span></span> <span class="token punctuation">{</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Ce qu'on va faire c'est de jouer avec les propriétés de <code>justify-content</code> pour voir son effet sur les éléments enfants. <br>
Avant, faut savoir que <code>justify-content</code> peut plusieurs valeurs mais les plus courantes sont :</p>
<ul>
<li><code>flex-start</code> ( qui est la valeur par défaut )</li>
<li><code>flex-end</code></li>
<li><code>center</code></li>
<li><code>space-between</code></li>
<li><code>space-around</code></li>
<li><code>space-evenly</code></li>
</ul>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span> <span class="token comment">/* qui est la valeur par défaut */</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> flex-end<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Ce qu'on a fait c'est d'attribuer la valeur <code>flex-end</code> à la propriété <code>justify-content</code> et comme nous le voyons sur l'image ci-dessous, les éléments enfants sont alignés à l'extrémité droite du conteneur.</p>
<img alt="" loading="lazy" width="2874" height="1424" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.ae332e18.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.ae332e18.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Après ceci on peut se dire automatiquement que <code>flex-end</code> aligne les éléments à l'extrémité droite, <code>flex-start</code> aligne les éléments à l'extrémité gauche et <code>center</code> aligne les éléments au centre. <br>
Et c'est la où on se trompe, <br>
J'ai parlé dans l'article précédent des axes <code>mainAxis Alignment</code> et <code>crossAxis Alignment</code> et c'est ici que ca devient important. <br>
Vous devez savoir que :</p>
<blockquote>
<p><code>justify-content</code> agit sur l'axe principal ( <code>mainAxis Alignment</code> )</p>
</blockquote>
<p>Donc techniquement,</p>
<blockquote>
<p><code>align-items</code> agit sur l'axe secondaire ( <code>crossAxis Alignment</code> )</p>
</blockquote>
<p>Sauf toute fois oublier que :</p>
<blockquote>
<p>Le sens de l'axe principal et de l'axe secondaire dépend de la valeur de <code>flex-direction</code></p>
</blockquote>
<p>Si c'est flou alors on va faire un petit rappel et aussi un petite correction de la partie 1 pour bien expliquer ceci une fois pour toute.</p>
<img id="schema-axes-flexbox" alt="" loading="lazy" width="1125" height="739" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.4c496cb7.png&amp;w=1200&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.4c496cb7.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.4c496cb7.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Ceci est un schéma qui montre comment les axes sont positionnés en fonction de la valeur de <code>flex-direction</code> si vous ne devez retenir qu'une seule chose de cet article c'est bien ca. <br></p>
<p>Avec ca, on peut revenir sur notre code et changer la valeur de <code>flex-direction</code> pour voir comment les éléments vont s'aligner.</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> column<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> flex-end<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2874" height="1398" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.04bbb6f3.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.04bbb6f3.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Comme vous le voyez sur l'image ci-dessus, les éléments sont alignés en bas du conteneur et c'est parce que la valeur de <code>flex-direction</code> est <code>column</code> et donc l'axe principal est l'axe vertical. <br>
et vu qu'on a mi <code>flex-end</code> comme valeur de <code>justify-content</code> les éléments sont alignés en bas ( l'extrémité de l'axe principal ). <br></p>
<p>Je pense que là maintenant ça commence à être clair pour vous,</p>
<blockquote>
<p>Je vous conseille de toujours vous référer au <a href="/articles/flexbox-partie-2#schema-axes-flexbox">schéma</a> que je vous ai montré pour bien comprendre comment les éléments vont s'aligner.</p>
</blockquote>
<p>Revenons donc sur notre code et voyons comment les autres valeurs de <code>justify-content</code> à savoir, <code>space-between</code>, <code>space-around</code> et <code>space-evenly</code> vont agir sur les éléments enfants car on a déjà vu <code>flex-start</code>, <code>flex-end</code> et <code>center</code>.</p>
<ul>
<li><code>space-between</code> : Les éléments sont répartis de manière égale sur l'axe principal avec un espace entre eux tout en touchant les extrémités du conteneur.</li>
</ul>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> space-between<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2874" height="1398" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.08afbd14.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.08afbd14.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<ul>
<li><code>space-around</code> : Les éléments sont répartis de manière égale sur l'axe principal avec un espace entre eux et aussi un espace aux extrémités qui est la moitié de l'espace entre les éléments.</li>
</ul>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> space-around<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2880" height="1440" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.08be6368.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.08be6368.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<ul>
<li><code>space-evenly</code> : Les éléments sont répartis de manière égale sur l'axe principal avec un espace entre eux et aussi un espace aux extrémités qui est égale à l'espace entre les éléments.</li>
</ul>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> space-evenly<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2876" height="1428" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.e62f97ff.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.e62f97ff.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<hr>
<p>Maintenant on va voir la propriété <code>align-items</code> qui permet de controler l'alignement des éléments enfants sur l'axe secondaire ( <code>crossAxis Alignment</code> ). <br>
Je pense que vous avez déjà compris comment ca marche ( n'oubliez pas de toujours vous référer au <a href="/articles/flexbox-partie-2#schema-axes-flexbox">schéma</a> que je vous ai montré ) donc on va directement voir les valeurs de <code>align-items</code> qui sont :</p>
<ul>
<li><code>flex-start</code></li>
<li><code>flex-end</code></li>
<li><code>center</code></li>
<li><code>stretch</code> ( qui est la valeur par défaut )</li>
<li><code>baseline</code></li>
</ul>
<p>On va comment par :</p>
<ul>
<li><code>stretch</code> : Les éléments enfants vont s'étirer pour toucher les extrémités du conteneur.</li>
</ul>
<p>Cela est un comportement qu'actuellement qu'on voit pas actuellement car j'ai défini une hauteur fixe de <code>100px</code> pour les éléments enfants. <br>
ce qu'on va faire c'est de retirer la hauteur des éléments enfants pour voir comment <code>stretch</code> va agir.</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.item</span></span> <span class="token punctuation">{</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token comment">/* height: 100px; */</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2880" height="1398" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.6eb026d9.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.6eb026d9.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Comme vous le voyez sur l'image ci-dessus, les éléments enfants s'étirent pour toucher les extrémités du conteneur. <br></p>
<p>on va remettre la hauteur des éléments enfants et continuer,</p>
<ul>
<li>
<p><code>flex-start</code> : Les éléments enfants sont alignés à l'extrémité du conteneur, il y'a pas de différence avec <code>justify-content: flex-start;</code> si ce n'est que <code>justify-content</code> agit sur l'axe principal et <code>align-items</code> agit sur l'axe secondaire.</p>
</li>
<li>
<p><code>flex-end</code> : Les éléments enfants sont alignés à l'extrémité opposée du conteneur, il y'a pas de différence avec <code>justify-content: flex-end;</code> si ce n'est que <code>justify-content</code> agit sur l'axe principal et <code>align-items</code> agit sur l'axe secondaire.</p>
</li>
<li>
<p><code>center</code> : Les éléments enfants sont alignés au centre du conteneur, il y'a pas de différence avec <code>justify-content: center;</code> si ce n'est que <code>justify-content</code> agit sur l'axe principal et <code>align-items</code> agit sur l'axe secondaire.</p>
</li>
<li>
<p><code>baseline</code> : Les éléments enfants sont alignés sur la ligne de base du conteneur, c'est un peu compliqué à expliquer mais c'est comme si les éléments étaient alignés sur une ligne imaginaire qui passe par la base des éléments.</p>
</li>
</ul>
<p>Pour mieux explique cela on va donner des hauteurs différentes à 2 de nos éléments enfants.</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">700</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">flex-direction</span><span class="token punctuation">:</span> row<span class="token punctuation">;</span>
  <span class="token property">align-items</span><span class="token punctuation">:</span> baseline<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item</span></span> <span class="token punctuation">{</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-1</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">200</span><span class="token unit">px</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.item-3</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">300</span><span class="token unit">px</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="2880" height="1438" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-8.b75a1960.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-8.b75a1960.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Comme vous le voyez sur l'image ci-dessus, les éléments enfants sont alignés sur une ligne imaginaire qui passe par la base des éléments. <br>
Je peux vous rassurer que c'est une valeur que vous n'utiliserez pas tous les jours mais c'est bien de la connaitre.</p>
<hr>
<blockquote>
<p>Avant, de vous quitter je vous rappelle de toujours vous référer au <a href="/articles/flexbox-partie-2#schema-axes-flexbox">schéma</a> que je vous ai montré pour bien comprendre comment les éléments vont s'aligner.</p>
</blockquote>
<hr>
<p>On est arrivé a la fin de cet article et j'espère qu'il vous a plu, si c'est le cas n'hésitez pas a partager sur vos réseaux et aussi a poser vos questions si vous n'avez pas très bien compris un point. On se dit donc au prochain article, ciao ! C'était <a href="https://x.com/ln_dev7">LN</a> 👋</p>
<hr>
<ul>
<li>Article précédent : <a href="/articles/creer-un-curseur-personnalise">Créer un curseur personnalisé</a></li>
<li>Article suivant : <a href="/articles/grid-template-areas">Grid Template Areas</a>`</li>
</ul>]]></content:encoded>
            <author>leonelngoya@gmail.com (Leonel Ngoya)</author>
        </item>
        <item>
            <title><![CDATA[Grid Template Areas]]></title>
            <link>https://www.lndev.me/articles/grid-template-areas</link>
            <guid>https://www.lndev.me/articles/grid-template-areas</guid>
            <pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<hr>
<p>Hey, <br>
Dans cet article, nous allons voir comment utiliser la propriété <code>grid-template-areas</code> pour créer des mises en page complexes. Cette propriété est l'une des plus puissantes de CSS Grid Layout et elle permet de définir des zones nommées dans une grille. Ces zones peuvent ensuite être utilisées pour positionner les éléments enfants de la grille.</p>
<hr>
<p>Dans mon entourage, beaucoup de personnes évitent d'utiliser CSS Grid ( moi y compris ) parce que c'est plus ou moins compliqué mais surtout parce que les <a href="/articles/flexbox-partie-1">Flexbox</a> sont plus faciles à comprendre et ça fait totalement le travail. Mais il y a des cas où CSS Grid est plus approprié et c'est le cas des mises en page complexes.</p>
<hr>
<p>Pour commencer, je vais vous montrer une Bento Grid ( que vous pouvez retrouver <a href="https://thefrenchtototte.lndev.me/#bento">ICI</a> ) et nous allons voir comment nous aurions procédé pour la réaliser avec Flexbox pour ensuite montrer la facilité avec laquelle nous pouvons le faire avec CSS Grid notamment avec la propriété <code>grid-template-areas</code>.</p>
<img alt="" loading="lazy" width="1052" height="776" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b7518049.png&amp;w=1080&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b7518049.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b7518049.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Alors, pour réaliser cette Bento Grid avec Flexbox on peut procéder comme suit :</p>
<img alt="" loading="lazy" width="1040" height="832" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.96db0317.png&amp;w=1080&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.96db0317.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.96db0317.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Où chaque couleur répresente une div, en html on devrait donc avoir quelque chose comme ça :</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>A<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>B<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>C<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>D<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>E<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>F<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>Nous remarquons donc que pour une simple grille de 3 lignes et 3 colones nous avons déjà une structure html assez complexe ce qui impliquera beaucoup de <code>display: flex</code> et <code>flex-direction</code> pour arriver à un résultat satisfaisant.</p>
<hr>
<p>Maintenant, prenons la même grille et voyons comment nous pouvons la réaliser avec CSS Grid et la propriété <code>grid-template-areas</code>. <br>
Quand vous voulez utiliser cette méthode, ce que je vous conseille premièrement c'est de dessiner votre grille sur une feuille de papier ou n'importe quel outil de dessin ( comme <a href="https://www.figma.com/jam">FigJam</a> ), pour mieux visualiser les zones et ensuite vous pourrez les nommer. <br>
Dans notre cas, nous avons donc :</p>
<img alt="" loading="lazy" width="560" height="427" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.25870f6a.png&amp;w=640&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.25870f6a.png&amp;w=1200&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.25870f6a.png&amp;w=1200&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Je sais pas si vous l'avez remarqué mais la nommenclature n'est pas faite par hasard, le nom que vous assosiez à une zone doit représenter le contenu de cette zone, ce qui fait en sorte qu'on peut se retrouver avec 2 ou plusieurs zones avec le même nom. <br><br>
C'est le moment où vous me dites, okay LN c'est bien tout ça mais comment matérialiser en HTML / CSS ? <br>
Commençons par le HTML :</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>grid<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>A<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>A<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>B<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>B<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>C<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>C<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>D<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>D<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>E<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>E<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>F<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>F<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>Ce n'est pas un rêve, contrairement à Flexbox, avec l'utilisation de <code>grid-template-areas</code> nous avons une structure html très simple, pas d'imbrication et c'est ce qui fait sa force. <br>
En code CSS, nous aurons :</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.grid</span></span> <span class="token punctuation">{</span>
  <span class="token property">display</span><span class="token punctuation">:</span> grid<span class="token punctuation">;</span>
  <span class="token property">grid-template-areas</span><span class="token punctuation">:</span>
    <span class="token string">'A B B'</span>
    <span class="token string">'A C D'</span>
    <span class="token string">'E E F'</span><span class="token punctuation">;</span>
  <span class="token property">gap</span><span class="token punctuation">:</span> <span class="token number">10</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">vh</span><span class="token punctuation">;</span> <span class="token comment">/* Pour la hauteur de la grille */</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.A</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> A<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.B</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> B<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.C</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> C<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.D</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> D<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.E</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> E<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.F</span></span> <span class="token punctuation">{</span>
  <span class="token property">grid-area</span><span class="token punctuation">:</span> F<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Ce qui se passe ici c'est que nous avons défini les zones de notre grille avec <code>grid-template-areas</code> et ensuite nous avons associé chaque div à une zone avec <code>grid-area</code>. <br></p>
<pre class="language-css"><code class="language-css"><span class="token property">grid-template-areas</span><span class="token punctuation">:</span>
  <span class="token string">'A B B'</span>
  <span class="token string">'A C D'</span>
  <span class="token string">'E E F'</span><span class="token punctuation">;</span>
</code></pre>
<p>Cette partie représente exactement la grille que nous avons dessiné, chaque ligne représente une ligne de la grille et chaque mot représente une zone de la grille. <br></p>
<p>Et rien qu'avec ça nous aurons notre résultat final ressemblant à :</p>
<img loading="lazy" width="564" height="430" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.001609c6.png&amp;w=640&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.001609c6.png&amp;w=1200&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.001609c6.png&amp;w=1200&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<hr>
<p>J'ai eu à faire une <a href="https://www.youtube.com/watch?v=G-LifC6c8Y4&amp;t=6s">Vidéo Youtube</a> sur ce sujet, je vous invite à la regarder pour mieux comprendre si vous avez toujours des zones d'ombre.</p>
<hr>
<p>On est arrivé a la fin de cet article et j'espère qu'il vous a plu, si c'est le cas n'hésitez pas a partager sur vos réseaux et aussi a poser vos questions si vous n'avez pas très bien compris un point. On se dit donc au prochain article, ciao ! C'était <a href="https://x.com/ln_dev7">LN</a> 👋</p>
<hr>
<ul>
<li>Article précédent : <a href="/articles/flexbox-partie-2">Flexbox partie 2</a></li>
</ul>]]></content:encoded>
            <author>leonelngoya@gmail.com (Leonel Ngoya)</author>
        </item>
        <item>
            <title><![CDATA[Positionnement en CSS]]></title>
            <link>https://www.lndev.me/articles/positionnement-en-css</link>
            <guid>https://www.lndev.me/articles/positionnement-en-css</guid>
            <pubDate>Sun, 31 Jul 2022 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<hr>
<p>Hey, <br>
Ceci est mon premier article et je me suis dit pourquoi pas parler d'un sujet simple et aussi complexe quand on l'assimile pas bien. comme vous l'aurez lu, on parlera du <code>positionnement en css</code> et qui dit positionnement en css dit directement la propriété <code>position: ...;</code> donc oui l'article portera uniquement sur cette petite propriété.</p>
<hr>
<p>Sans plus tarder nous allons commencer et pour ce fait j'ai créé un fichier <code>index.html</code> et <code>style.css</code> avec quelques éléments.
Dans le html on a juste une div qui contient un header et lui contenant un bouton et après un paragraphe de 2000 mots environ ...</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>header</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>header<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span><span class="token punctuation">&gt;</span></span>Click me !<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>header</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span>lorem ...<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>et dans le css on a un petit reset et un peu de coloriage :)</p>
<pre class="language-css"><code class="language-css"><span class="token selector">*</span> <span class="token punctuation">{</span>
  <span class="token property">margin</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">box-sizing</span><span class="token punctuation">:</span> border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">500</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">green</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">blue</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token unit">rem</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Comme rendu nous avons donc un truc comme ça ( oui c'est très moche je sais )</p>
<img alt="" loading="lazy" width="1920" height="845" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b2b0a0ae.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b2b0a0ae.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-1.b2b0a0ae.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Alors la première chose a retenir est que en css la propriété <code>position</code> peut prendre
5 valeurs à savoir :<!-- --> </p>
<pre class="language-css"><code class="language-css"><span class="token property">position</span><span class="token punctuation">:</span> static<span class="token punctuation">;</span>
<span class="token property">position</span><span class="token punctuation">:</span> relative<span class="token punctuation">;</span>
<span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
<span class="token property">position</span><span class="token punctuation">:</span> fixed<span class="token punctuation">;</span>
<span class="token property">position</span><span class="token punctuation">:</span> sticky<span class="token punctuation">;</span>
</code></pre>
<p>Alors on va aller pas à pas et explorer chacun de ces cas, ne vous inquiétez pas !</p>
<hr>
<h3>position: static;</h3>
<p>C'est la valeur la plus facile à comprendre car en fait tous les éléments que l'on crée ont par default cette valeur, donc c'est la valeur qu'a actuellement nos éléments créés ( div, header, ul, p ... )</p>
<hr>
<h3>position: relative;</h3>
<p>Bon ... la ça devient un peu plus bizarre car si on met par exemple notre <em>header</em> en <code>position: relative;</code> comme ceci :</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span><span class="token punctuation">{</span>
    <span class="token property">position</span><span class="token punctuation">:</span> relative<span class="token punctuation">;</span>
    ...
<span class="token punctuation">}</span>
</code></pre>
<p>on verra qu'il ne se passe rien, notre page reste intact et ceci sera pareil si on le fait avec les autres éléments. Mais la on commence a se dire " POURQUOI AVOIR DONC CRÉÉ CE POSITIONNEMENT SI IL EST PAREIL AU <em>STATIC</em> ??? " et bien ... ils ne sont pas pareil car ce positionnement et les 3 prochains qu'on verra donne accès a 4 autres propriétés qui permettent de déplacer notre élément et ces propriétés sont :</p>
<pre class="language-css"><code class="language-css"><span class="token property">top</span><span class="token punctuation">:</span><span class="token punctuation">;</span>
<span class="token property">left</span><span class="token punctuation">:</span><span class="token punctuation">;</span>
<span class="token property">bottom</span><span class="token punctuation">:</span><span class="token punctuation">;</span>
<span class="token property">right</span><span class="token punctuation">:</span><span class="token punctuation">;</span>
</code></pre>
<p>Qui veut dire respectivement : <em>haut - gauche - bas - droite</em> .
Ceci veut tout simplement dire que maintenant nous pouvons déplacer notre <em>header</em> avec ces propriétés</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
    <span class="token property">position</span><span class="token punctuation">:</span> relative<span class="token punctuation">;</span>
    <span class="token property">top</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">px</span><span class="token punctuation">;</span>
    <span class="token property">left</span><span class="token punctuation">:</span> <span class="token number">50</span><span class="token unit">px</span><span class="token punctuation">;</span>
    ...
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="1920" height="845" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.d82bd592.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.d82bd592.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-2.d82bd592.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Vous voyez comment notre <em>header</em> s'est déplacé. Mais le <code>position: relative</code> ne
sert pas juste à ça, il sera très utile quand on parlera du <em>positionnement absolue</em></p>
<blockquote>
<p>Nous pouvons donc dire que si les propriétés <code>top - left - bottom - right</code> ne sont
pas utilisées alors le <code>static</code> et le <code>relative</code> ont PRESQUE le même role, car comme
j'ai dit il sera utile avec le <code>position: absolute</code>. ***</p>
</blockquote>
<h3>position: absolute;</h3>
<p>C'est ici que ça deviendra un peu complexe. Tout d'abord ce qu'on fera c'est enlever le code qu'on a mit sur le <em>header</em> ( seulement celui de la section précédente ) et ensuite on va ajouter un texte sur notre <em>header ( dans le html )</em></p>
<pre class="language-css"><code class="language-css">...
     &lt;header class=<span class="token string">"header"</span>&gt;
        &lt;p&gt;Bonjour moi c'est LN&lt;/p&gt;
        &lt;button&gt;Click me !&lt;/button&gt;
      &lt;/header&gt;
...
</code></pre>
<img alt="" loading="lazy" width="1920" height="845" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.8daa71cd.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.8daa71cd.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-3.8daa71cd.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>maintenant on va mettre <code>position: absolute;</code> sur notre bouton, comme ceci :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">... button</span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.55a24a7b.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.55a24a7b.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-4.55a24a7b.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Et la c'est le chaos total, notre bouton a changé de place et de manière bizarre, il est venu se superposer sur notre texte. On se demande ce qu'il s'est réellement passé.</p>
<blockquote>
<p>Quand un élément est en <code>position: absolute;</code> et même <code>relative</code> il sort du flux de l'écran mais pas de la même façon.</p>
</blockquote>
<img alt="" loading="lazy" width="613" height="627" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.dc54b820.png&amp;w=640&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.dc54b820.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-5.dc54b820.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Cette image vous explique donc un peu le phénomène qui vient de se produire. Notre élément est sorti du flux de l'écran tout en 'supprimant' sa place ce qui le rend flottant. Hors avec le <code>relative</code> il sort du flux c'est vrai mais sa place reste conservé c'est pour ça que si a la place de <code>absolute</code> on mettait <code>relative</code> sur notre bouton ça n'allait rien changer ( au point de vue de l'oeil )</p>
<p>Donc notre bouton est sorti du flux de l'écran, mais c'est pas tout. Si vous n'avez pas oublie la propriété <code>position</code> nous donne accès a 4 nouvelles propriétés, essayons donc un truc. Nous allons mettre :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">... button</span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
  <span class="token property">bottom</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Regardez en bas de votre écran et vous verrez votre bouton</p>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.e0e2bc96.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.e0e2bc96.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-6.e0e2bc96.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Et la on se pose encore la meme question : " Qu'est ce qui s'est passé ? " et je
vais vous répondre, " c'est de la magie ! hahaha " je blague bien-sur. En réalité
comme son nom l'indique c'est un positionnement absolue donc il doit se positionner
par rapport a quelque chose et dans ce cas il se positionne par rapport a notre fenêtre
( je n'ai pas dit par rapport au <em>body</em> mais bien la <em>fenêtre</em> ) c'est pour cette
raison qu'elle est en bas de notre fenêtre et non en bas de notre body ( qui est
encore plus bas ( à la fin de notre paragraphe ) ). C'est donc à ce moment qu'on
se demande comment positionner notre élément par rapport a un élément que l'on veut
et c'est a ce même moment que je vous demande de vous rappeler du <code>position: relative;</code>
, c'est ici que son 2e role intervient. Mais avant je vais vous dire ce que le <code>position: absolute;</code> fait exactement : &gt; Quand un élément est en <code>position: absolute;</code> il essaie
d'abord de regarder si son parent est en <code>position: relative/absolute</code> si c'est pas
le cas il va passer au parent de son parent et ensuite au parent du parent de son
parent ... et s'il ne trouve pas toujours un élément en <code>relative/absolute</code> il se
positionnera par rapport a la fenêtre. Ceci veut tout simplement dire que s'il trouve
un élément en <code>relative/absolute</code> il va se positionner par rapport a celui la.</p>
<blockquote>
<p>J'AI BIEN DIT <code>ABSOLUTE</code> ou <code>RELATIVE</code></p>
</blockquote>
<p>Dans notre cas donc, si on veut positionner notre bouton en bas de notre div verte on n'a qu'a la mettre en <code>relative</code> comme ceci :</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> relative<span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">500</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">green</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Et le tour est joué :)</p>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.5ac371c2.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.5ac371c2.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-7.5ac371c2.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>La dernière chose qu'on peut aborder concernant le positionnement absolue ( oui ça fait déjà trop ) c'est : Il ne quitte pas seulement du flux de l'écran mais <code>il perd aussi ses dimensions ( width, height )</code>. Nous ne l'avons pas remarqué parcequ'on avait juste un petit bouton en absolute. Ce qu'on va donc faire c'est mettre notre <em>header</em> en position absolute comme ceci:</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span><span class="token punctuation">{</span>
    <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
    ...
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-8.12aa6b66.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-8.12aa6b66.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-8.12aa6b66.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>On remarque donc plusieurs chose : - Le bouton ne se positionne plus par rapport
a la div verte mais maintenant a notre header et ca je l'ai dit ( quand un élément
est en absolute il regarde d'abord si son parent est en relative/absolute pour se
positionner par rapport a lui avant de passer au parent de son parent et ainsi de
suite ) - Notre header a perdu ses dimensions :( et bien c'est une conséquence de
ce positionnement mais il est vite remédiable et il peut même se faire de deux façon
:</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
  <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">100</span><span class="token unit">%</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector">OU <span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span>
  <span class="token property">left</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">right</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-9.dc68b310.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-9.dc68b310.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-9.dc68b310.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">&gt; Dans le premier cas on dit a l'élément de prendre
100% de taille disponible et dans le 2e on lui demande de partir a droite (
right: 0; ) et aussi de partir a gauche ( left: 0; ) ce qui fait en sorte qu'il
s'étire, intuitif n'est-ce pas ? :)<!-- --> </p>
<p>Je crois qu'on a fait un tour de ce positionnement. C'est pas grave si vous comprenez pas d'un coup, avec un peu de pratique vous y verrez plus clairement.</p>
<h3>position: fixed;</h3>
<p>Pour cette section on va repartir sur le css qu'on avait au début de l'article :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">*</span> <span class="token punctuation">{</span>
  <span class="token property">margin</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">box-sizing</span><span class="token punctuation">:</span> border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">500</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">green</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> relative<span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">blue</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token unit">rem</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-10.1344e9d5.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-10.1344e9d5.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-10.1344e9d5.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<p>Ce qu'on fera maintenant c'est d'ajouter ce positionnement à notre bouton</p>
<pre class="language-css"><code class="language-css"><span class="token selector">button</span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> fixed<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p><img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-11.b9a522e9.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-11.b9a522e9.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-11.b9a522e9.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">A première vue, on a le même comportement qu'avec
le <code>position: absolute</code> genre il est sorti du flux de l'écran et se positionne
par rapport au <em>header</em> qui est en <em>relative</em> , eh bah on se trompe. Essayez
maintenant de scroller votre écran et la vous remarquerez un truc, le bouton
reste en haut de l'écran, il reste FIXE et c'est la que je vais vous dire que :</p>
<blockquote>
<p>Quand un élément est en <code>position: fixed</code> , il se positionnera TOUJOURS par
rapport a notre fenêtre tout en restant fixe a la place qui lui a été attribué (
avec les : left - top - bottom - right ) . Sans oublier que lui aussi sort du
flux de l'écran tout en supprimant sa position ( comme le <code>position: absolute;</code>
)<!-- --> </p>
</blockquote>
<blockquote>
<p>Retenez bien que quand c'est en <code>absolute</code> il se positionne par rapport a la fenêtre mais si on scroll celle ci il va conserver son positionnement ce qui fera que l'élément scrollera aussi, mais quand c'est en <code>fixed</code> il se positionne par rapport a la fenêtre et quand on la scroll il met a jour son point de référence de tel manière qu'il soit toujours positionné par rapport a la fenêtre courante ( hors en <code>absolute</code> c'est juste par rapport a la première fenètre que l'on voit )</p>
</blockquote>
<blockquote>
<p>Ce positionnement est plus utilisé pour les navbar fixe que l'on verra sur certains sites mais aussi pour faire des <code>overlay</code> lors de la creation des boites modales.</p>
</blockquote>
<p>Il y'a plus grand chose a dire sur ce positionnement, on va juste un peu update notre code, ce qui nous aidera pour la suite. En css on doit donc avoir ca :</p>
<pre class="language-css"><code class="language-css"><span class="token selector">*</span> <span class="token punctuation">{</span>
  <span class="token property">margin</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">box-sizing</span><span class="token punctuation">:</span> border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.container</span></span> <span class="token punctuation">{</span>
  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token number">500</span><span class="token unit">px</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">green</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> fixed<span class="token punctuation">;</span>
  <span class="token property">left</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">right</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">blue</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token unit">rem</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Et si vous scrollez tout en bas le <em>header</em> reste fixe</p>
<img alt="" loading="lazy" width="1920" height="843" decoding="async" data-nimg="1" style="color:transparent" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-12.1c95f3e8.png&amp;w=1920&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-12.1c95f3e8.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fimage-12.1c95f3e8.png&amp;w=3840&amp;q=75&amp;dpl=dpl_3EMLAQun8B9XsP2aReJ2DsuMXnkG">
<hr>
<h3>position: sticky;</h3>
<p>C'est le positionnement que je trouve assez fun :) alors vous devez juste comprendre :</p>
<blockquote>
<p>Quand un element est en <code>position: sticky;</code> , il se comporte comme le <code>position: fixed;</code> mais uniquement quand il est toujours dans le cadre de son élément parent.</p>
</blockquote>
<p>Je reformule un peu bien avec notre exemple :</p>
<blockquote>
<p>Si je mets notre <em>header</em> en <code>sticky</code>, et que je scrolle mon écran, mon <em>header</em> sera fixe uniquement lorsque ma div verte sera toujours visible, donc quand ma div verte va disparaitre, elle partira avec lui.</p>
</blockquote>
<p>Si c'est pas toujours compris on va pratiquer, dans notre css changeons le positionnement du <em>header</em></p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> sticky<span class="token punctuation">;</span>
  ...
<span class="token punctuation">}</span>
</code></pre>
<p>Et si vous essayez vous verrez que ce que j'ai dit ne fonctionne pas, on a plutôt l'impression d'avoir affaire au <code>position: static;</code> et bien c'est pas faux il manque une dernière propriété a notre <em>header</em> , c'est le <code>top: 0;</code> pour lui demander de toujours rester en haut. Ce qui fait qu'on doit avoir ça :</p>
<pre class="language-css"><code class="language-css"><span class="token selector"><span class="token class">.header</span></span> <span class="token punctuation">{</span>
  <span class="token property">position</span><span class="token punctuation">:</span> sticky<span class="token punctuation">;</span>
  <span class="token property">top</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">left</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">right</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">;</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token color">blue</span><span class="token punctuation">;</span>
  <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
  <span class="token property">align-items</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">justify-content</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
  <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token unit">rem</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Et maintenant vous pouvez tester et admirer la beauté par vous même :)
C'est tout pour ce positionnement.</p>
<hr>
<h3>position: inherit;</h3>
<p>C'est vrai que j'ai dit qu'il y'avait juste 5 valeurs, je vous ai un peu menti :/
On a aussi celle ci, mais elle veut juste dire que :</p>
<blockquote>
<p>Je prends le même positionnement que celui de mon élément parent. Donc si mon parent est en absolute, je suis aussi en absolute.</p>
</blockquote>
<hr>
<p>On est arrivé a la fin de cet article et j'espère qu'il vous a permis d'apprendre plus sur cette propriété CSS, si c'est le cas n'hésitez pas a partager sur vos réseaux et aussi a poser vos questions si vous n'avez pas très bien compris un point. On se dit donc à un prochain article, ciao ! C'était <a href="https://x.com/ln_dev7">LN</a> 👋</p>
<hr>
<ul>
<li>Article suivant : <a href="/articles/flexbox-partie-1">Flexbox partie 1</a></li>
</ul>]]></content:encoded>
            <author>leonelngoya@gmail.com (Leonel Ngoya)</author>
        </item>
    </channel>
</rss>