<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Laurent Raymond</title>
    <description>The latest articles on Forem by Laurent Raymond (@raystone06).</description>
    <link>https://forem.com/raystone06</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1275754%2Fd6be26f2-fb37-41b1-b1c9-e2d78455940a.png</url>
      <title>Forem: Laurent Raymond</title>
      <link>https://forem.com/raystone06</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/raystone06"/>
    <language>en</language>
    <item>
      <title>Maitriser l'opérateur de chaînage optionnel en JavaScript</title>
      <dc:creator>Laurent Raymond</dc:creator>
      <pubDate>Tue, 27 Feb 2024 14:43:30 +0000</pubDate>
      <link>https://forem.com/raystone06/maitriser-loperateur-de-chainage-optionnel-en-javascript-1jid</link>
      <guid>https://forem.com/raystone06/maitriser-loperateur-de-chainage-optionnel-en-javascript-1jid</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Dans le monde numérique en constante évolution d'aujourd'hui, L'opérateur de chaînage optionnel en JavaScript est l'un de ces outils puissants qui peuvent aider à optimiser votre code et à gagner du temps dans le développement de votre site web.&lt;/p&gt;

&lt;h1&gt;
  
  
  Comprendre l'Opérateur de chaînage Optionnel en JavaScript
&lt;/h1&gt;

&lt;p&gt;L'opérateur de ch optionnel, également connu sous le nom de "optional chaining" en anglais, est une fonctionnalité introduite dans JavaScript ES2020. Cet opérateur offre une manière concise et élégante de traiter les valeurs null ou undefined lors de l'accès à des propriétés d'objets imbriqués.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment Fonctionne l'Opérateur de chaînage Optionnel
&lt;/h2&gt;

&lt;p&gt;L'utilisation de l'opérateur de chaînage optionnel est simple et intuitive. Plutôt que d'accéder directement à une propriété d'objet qui pourrait être null ou undefined et provoquer une erreur, vous pouvez utiliser l'opérateur &lt;code&gt;?.&lt;/code&gt; pour accéder à la propriété de manière sécurisée. Si la propriété cible est null ou undefined, l'expression entière renverra undefined au lieu de générer une erreur.&lt;/p&gt;

&lt;p&gt;Voici un exemple simple pour illustrer son fonctionnement :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Sans l'opérateur de chaînage optionnel&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;longueur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;objet&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;objet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attribut&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;objet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attribut&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;longueur&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Avec l'opérateur de chaînage optionnel&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;longueur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;objet&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;attribut&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;longueur&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dans cet exemple, si &lt;code&gt;objet&lt;/code&gt; ou &lt;code&gt;attribut&lt;/code&gt; est null ou undefined, l'expression renverra simplement undefined sans provoquer d'erreur.&lt;/p&gt;

&lt;h1&gt;
  
  
  Avantages de l'Utilisation de l'Opérateur de chaînage Optionnel
&lt;/h1&gt;

&lt;p&gt;L'opérateur de chaînage optionnel présente plusieurs avantages significatifs pour les développeurs web :&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Réduction du Risque d'Erreurs
&lt;/h2&gt;

&lt;p&gt;En utilisant l'opérateur de chaînage optionnel, vous pouvez réduire considérablement le risque d'erreurs liées à l'accès à des propriétés d'objets qui pourraient être null ou undefined. Cela rend votre code plus robuste et moins sujet aux exceptions imprévues.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Amélioration de la Lisibilité du Code
&lt;/h2&gt;

&lt;p&gt;L'opérateur de chaînage optionnel permet d'écrire un code plus concis et lisible en évitant les structures conditionnelles complexes pour vérifier la nullité ou l'undefined des propriétés d'objets. Cela rend le code plus facile à comprendre et à maintenir pour les développeurs.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Optimisation de l'Expérience de développement
&lt;/h2&gt;

&lt;p&gt;En réduisant le risque d'erreurs et en améliorant la lisibilité du code, l'opérateur de chaînage optionnel contribue à une meilleure expérience de développement sur votre projet. Les fonctionnalités s'exécutent de manière plus fluide et les développeurs rencontrent moins de problèmes techniques.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;En conclusion, l'opérateur de chaînage optionnel en JavaScript est un outil puissant et précieux pour les développeurs web. En utilisant cet opérateur de manière appropriée, vous pouvez améliorer la robustesse, la lisibilité et l'expérience de développement de votre projet avec JavaScript. N'hésitez pas à l'incorporer dans vos projets pour tirer pleinement parti de ses avantages.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Maîtrisez l'Art du Dark Mode avec une seule ligne de CSS !</title>
      <dc:creator>Laurent Raymond</dc:creator>
      <pubDate>Sun, 18 Feb 2024 03:32:08 +0000</pubDate>
      <link>https://forem.com/raystone06/maitrisez-lart-du-dark-mode-avec-une-seule-ligne-de-css--2nf9</link>
      <guid>https://forem.com/raystone06/maitrisez-lart-du-dark-mode-avec-une-seule-ligne-de-css--2nf9</guid>
      <description>&lt;p&gt;Voyons ensemble comment mettre en place facilement un mode sombre avec quelques lignes de CSS inspirées du microframework &lt;a href="https://github.com/bufferhead-code/nightowl" rel="noopener noreferrer"&gt;nightowl&lt;/a&gt;. Le fonctionnement est assez similaire à celui de l'extension &lt;a href="https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh" rel="noopener noreferrer"&gt;Dark reader&lt;/a&gt; sur Chrome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tout ce que vous avez a ajouter a votre feuille de style :
&lt;/h2&gt;

&lt;p&gt;Voici tout ce dont vous avez besoin c'est magique, n'est-ce pas ?&lt;br&gt;
(j'ai pas menti pour les une lignes lisez jusqu'a la fin)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#111&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;iframe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;15%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="nd"&gt;::marker&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Alors comment Ça Marche ?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Les préliminaires avec la règle &lt;a href="https://developer.mozilla.org/fr/docs/Web/CSS/@media" rel="noopener noreferrer"&gt;@media&lt;/a&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="o"&gt;.&lt;/span&gt;
   &lt;span class="o"&gt;.&lt;/span&gt;
   &lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce bloc de code utilise une règle &lt;a href="https://developer.mozilla.org/fr/docs/Web/CSS/@media" rel="noopener noreferrer"&gt;@media&lt;/a&gt; pour cibler les appareils qui préfèrent un schéma de couleurs sombre. Lorsque l'utilisateur a activé le mode de couleur sombre sur son appareil ou navigateur, les styles CSS à l'intérieur de cette règle seront appliqués. Cette approche permet d'adapter l'apparence de l'interface utilisateur en fonction des préférences de l'utilisateur en matière de couleur, offrant ainsi une meilleure expérience d'utilisation.&lt;/p&gt;

&lt;h3&gt;
  
  
  La technique magique
&lt;/h3&gt;

&lt;p&gt;voici lafameuse ligne magique tout s'opère ici dans la première règle :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce code applique un filtre d'effet sur l'élément &lt;/p&gt; de la page web. Plus spécifiquement, il utilise le filtre &lt;a href="https://developer.mozilla.org/fr/docs/Web/CSS/filter-function/invert" rel="noopener noreferrer"&gt;invert(100%)&lt;/a&gt; pour inverser toutes les couleurs, transformant ainsi les teintes claires en teintes sombres et vice versa. Ensuite, il utilise &lt;a href="https://developer.mozilla.org/fr/docs/Web/CSS/filter-function/hue-rotate" rel="noopener noreferrer"&gt;hue-rotate(180deg)&lt;/a&gt; pour faire pivoter la teinte des couleurs de 180 degrés, ce qui a pour effet d'inverser la teinte des couleurs restantes. En combinant ces deux filtres, l'effet final est une inversion totale des couleurs de l'élément , créant ainsi une esthétique visuelle inversée.

&lt;p&gt;Revenons un instant sur la fonction &lt;a href="https://developer.mozilla.org/fr/docs/Web/CSS/filter-function/hue-rotate" rel="noopener noreferrer"&gt;hue-rotate()&lt;/a&gt;. Ce filtre permet de modifier subtilement la teinte des couleurs d'un élément spécifique. En appliquant hue-rotate(angle), où l'angle est exprimé en degrés, toutes les nuances de couleur de l'élément se déplacent autour du cercle chromatique en fonction de cet angle.&lt;/p&gt;

&lt;p&gt;la roue chromatique:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bipskvqt5b6enj873mq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bipskvqt5b6enj873mq.jpeg" alt="La fameuse roue chromatique" width="225" height="225"&gt;&lt;/a&gt;&lt;br&gt;
Si vous voulez en savoir plus cliquez &lt;a href="https://fr.wikipedia.org/wiki/Cercle_chromatique" rel="noopener noreferrer"&gt;ici&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Par exemple, hue-rotate(180deg) fera pivoter toutes les couleurs de 180 degrés autour du cercle chromatique, ce qui signifie que les couleurs complémentaires seront échangées. Les teintes rouges deviendront cyan, les jaunes deviendront bleus, etc...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncgqqujvyyhxr4viq9fk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncgqqujvyyhxr4viq9fk.jpg" alt="les differents angles les plus commun" width="587" height="315"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Le problème de firefox
&lt;/h3&gt;

&lt;p&gt;Vous voyez ce code la :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#111&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vous vous demandez peut-être pourquoi j'applique une couleur en dur alors que j'ai un filtre d'inversion ?&lt;/p&gt;

&lt;p&gt;La réponse est simple : le navigateur Firefox ne prend pas en charge les filtres pour l'arrière-plan de l'élément racine .&lt;/p&gt;

&lt;p&gt;Ainsi, je dois définir manuellement l'arrière-plan de l'élément racine. Dans votre cas, il vous faudra trouver l'inverse de la couleur de votre arrière-plan. Cette méthode fonctionne également sur d'autres navigateurs, même Internet Explorer (bien que tout le monde déteste IE de toute façon).&lt;/p&gt;

&lt;h3&gt;
  
  
  On a encore un gros problème: les médias (img, vidéos etc..)
&lt;/h3&gt;

&lt;p&gt;Avec le filtre d'inversetion et bah tout est inversé même les médias de notre site et si on veux éviter d'avoir des images bizarre comme ça :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6v4e9a1aa33pam28ezj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6v4e9a1aa33pam28ezj.png" alt="image inversee" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On doit donc rusé en inversant le filtre d'inversion...&lt;br&gt;
C'est plutot simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;iframe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfrphzisz1mf7wsaarl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfrphzisz1mf7wsaarl3.png" alt="meme" width="471" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;et ça marche du tonnerre !&lt;/p&gt;

&lt;h3&gt;
  
  
  Les ajustements
&lt;/h3&gt;

&lt;p&gt;les autres règles sont des ajustements optiques pour améliorer le contraste sur quelques éléments comme les icônes et les arrière-plans des blocs de code !&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Contraste amélioré sur les icônes. */&lt;/span&gt;
&lt;span class="nc"&gt;.icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;15%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Améliorer le contraste sur les marqueurs d'éléments de liste. */&lt;/span&gt;
&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="nd"&gt;::marker&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si vous souhaitez intégrer le mode sombre sur votre site web, les filtres CSS sont vos meilleurs alliés, surtout si vous manquez de temps pour élaborer une feuille de style distincte.&lt;/p&gt;

&lt;p&gt;Je rends a césar ce qui est a lui ce post a été FORTEMENT inspiré par &lt;a href="https://ar.al/" rel="noopener noreferrer"&gt;Aral Balkan&lt;/a&gt;, &lt;a href="https://github.com/bufferhead-code/nightowl" rel="noopener noreferrer"&gt;nightowl&lt;/a&gt; et &lt;a href="https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh" rel="noopener noreferrer"&gt;Dark reader&lt;/a&gt; un grand merci a eux !&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>html</category>
      <category>programming</category>
    </item>
    <item>
      <title>Unraveling the Power of CSS Nesting Selectors: A Comprehensive Introduction</title>
      <dc:creator>Laurent Raymond</dc:creator>
      <pubDate>Thu, 08 Feb 2024 21:40:05 +0000</pubDate>
      <link>https://forem.com/raystone06/unraveling-the-power-of-css-nesting-selectors-a-comprehensive-guide-24l5</link>
      <guid>https://forem.com/raystone06/unraveling-the-power-of-css-nesting-selectors-a-comprehensive-guide-24l5</guid>
      <description>&lt;p&gt;In the realm of web development and design, CSS nesting selectors stand as a powerful tool, often underutilized and misunderstood. In this comprehensive guide, we delve into the intricacies of CSS nesting selectors, unraveling their potential and showcasing their role in crafting efficient and maintainable stylesheets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding CSS Nesting Selectors
&lt;/h2&gt;

&lt;p&gt;CSS nesting selectors allow developers to target elements within other elements, creating a hierarchical structure that mirrors the HTML markup. This enables a more organized and intuitive approach to styling, enhancing readability and scalability of CSS code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax and Usage
&lt;/h2&gt;

&lt;p&gt;The syntax for CSS nesting selectors involves combining selectors « &amp;amp; » to specify nested elements. This is achieved by utilizing the parent-child relationship between HTML elements. For instance, consider the following example:&lt;/p&gt;

&lt;p&gt;Without nesting selector :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.parent {
    /* Styles for parent element */
}

.parent .child {
    /* Styles for child element */
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With nesting selector :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.parent {
    /* Styles for parent element */

    &amp;amp; .child{
        /* Styles for child element */
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the .child selector is nested within the .parent selector, targeting specific elements within the parent container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of CSS Nesting
&lt;/h2&gt;

&lt;p&gt;The utilization of CSS nesting selectors offers several benefits to developers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modularity and Readability&lt;/strong&gt;: Nesting selectors allow for a more modular approach to styling, making it easier to understand the structure of the stylesheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Efficient Targeting&lt;/strong&gt;: By targeting nested elements directly, developers can avoid overly specific selectors and streamline their CSS code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Maintenance&lt;/strong&gt;: CSS nesting promotes code maintainability by establishing clear relationships between elements, facilitating future updates and modifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best way to use CSS Nesting
&lt;/h2&gt;

&lt;p&gt;While CSS nesting selectors offer significant advantages, it's essential to follow best practices to ensure optimal performance and maintainability of stylesheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limit Nesting Depth&lt;/strong&gt;&lt;br&gt;
Excessive nesting can lead to overly complex and inefficient CSS code. It's advisable to limit nesting depth to avoid specificity issues and enhance code readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Descendant Selectors Sparingly&lt;/strong&gt;&lt;br&gt;
While descendant selectors enable targeting of deeply nested elements, they should be used judiciously. Over-reliance on descendant selectors can result in performance bottlenecks and increased specificity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compatibility with CSS BEM Naming Convention&lt;/strong&gt;&lt;br&gt;
CSS nesting aligns well with the hierarchical structure inherent in the &lt;a href="https://getbem.com/introduction/" rel="noopener noreferrer"&gt;BEM naming convention&lt;/a&gt;. By leveraging nesting selectors within BEM, developers can create a logical and intuitive relationship between blocks, elements, and modifiers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.block {
    /* Styles for the block */

    &amp;amp;__element {
        /* Styles for the element */

         &amp;amp;--modifier{
             /* Styles for the modifier */

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

&lt;/div&gt;



&lt;p&gt;Is this the end of css preprocessors ? (of course not)&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Examples
&lt;/h2&gt;

&lt;p&gt;Let's explore practical examples to illustrate the effectiveness of CSS nesting selectors:&lt;/p&gt;

&lt;p&gt;let's with the HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="card"&amp;gt;
  &amp;lt;img src="https://www.focolare.org/mariapolivictoria/files/2014/01/Man_18_montagne-685x325.jpg" class="image"&amp;gt;&amp;lt;/img&amp;gt;
  &amp;lt;h1 class="title"&amp;gt;
    Man Region: Ivory Coast's Natural Oasis&amp;lt;/h1&amp;gt;
  &amp;lt;p class="description"&amp;gt;
    The Man region in Ivory Coast is renowned for its 18 majestic mountains, which define its breathtaking landscape.
  &amp;lt;/p&amp;gt;
  &amp;lt;button class="btn"&amp;gt;learn more about it &amp;amp;#8594&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;so we get this :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsi5h6yrl0u1gr2skn7po.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsi5h6yrl0u1gr2skn7po.png" alt="structure of html card" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's had our style with nesting selector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.card {
    width: 470px;
    background: #fefefe;
    padding: 1em;
    border-radius: 1.5em;
    box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);

    &amp;amp; .image {
        width: 100%;
        border-radius: 0.8em;
        margin-bottom: 1em;
    }

    &amp;amp; .title {
        font-size: 1.4em;
        color: #111;
    }

    &amp;amp; .description {
        font-size: 1em;
        color: #777;
        font-weight: 500;
    }

    &amp;amp; .btn {
        width: 100%;
        margin-top: 1em;
        padding: 0.6em 3em;
        background: #0090ff;
        border: none;
        border-radius: 0.5em;
        color: #f0f0f0;
        cursor: pointer;
        font-weight: 600;
        font-size: 1em;
        transition: 0.1s ease;

        &amp;amp;:hover {
            background: #0084e9;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and finally we will get that : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdajoz3xo70apexupwov3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdajoz3xo70apexupwov3.png" alt="card make css nesting selector" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;find this exemple on &lt;a href="https://codepen.io/raystone06/pen/OJqoxaY" rel="noopener noreferrer"&gt;codepen&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerations for Browser Compatibility
&lt;/h2&gt;

&lt;p&gt;While CSS nesting selectors offer significant advantages in terms of code organization and maintainability, it's important to exercise caution due to browser compatibility concerns. Visit &lt;a href="https://caniuse.com/?search=css%20nesting" rel="noopener noreferrer"&gt;can i use&lt;/a&gt; for more information&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnr4hh7r62huuxab8caep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnr4hh7r62huuxab8caep.png" alt="can i use" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  For further information
&lt;/h2&gt;

&lt;p&gt;Nesting selector is even more powerful than what I've shown you, this is just an introduction if you want to go further visit &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Nesting_selector" rel="noopener noreferrer"&gt;the mdn documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>html</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
