<?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: Farhad Rahmani</title>
    <description>The latest articles on Forem by Farhad Rahmani (@farhadi).</description>
    <link>https://forem.com/farhadi</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%2F512720%2Fa5001593-1eb4-418f-9b45-467cebe4b639.jpg</url>
      <title>Forem: Farhad Rahmani</title>
      <link>https://forem.com/farhadi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/farhadi"/>
    <language>en</language>
    <item>
      <title>Best thing ever seen</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Mon, 15 Sep 2025 05:26:38 +0000</pubDate>
      <link>https://forem.com/farhadi/best-thing-ever-seen-1l3o</link>
      <guid>https://forem.com/farhadi/best-thing-ever-seen-1l3o</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/alifar/laravel-to-n8n-a-developers-guide-to-smarter-workflow-automation-4e33" class="crayons-story__hidden-navigation-link"&gt;Laravel to n8n: A Developer’s Guide to Smarter Workflow Automation&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/alifar" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F659389%2F8e6166dd-dcf9-4c44-93f4-9eb9d8edbb6d.jpeg" alt="alifar profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/alifar" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ali Farhat
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ali Farhat
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2843873" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/alifar" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F659389%2F8e6166dd-dcf9-4c44-93f4-9eb9d8edbb6d.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ali Farhat&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/alifar/laravel-to-n8n-a-developers-guide-to-smarter-workflow-automation-4e33" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 13 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/alifar/laravel-to-n8n-a-developers-guide-to-smarter-workflow-automation-4e33" id="article-link-2843873"&gt;
          Laravel to n8n: A Developer’s Guide to Smarter Workflow Automation
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/laravel"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;laravel&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/n8n"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;n8n&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/alifar/laravel-to-n8n-a-developers-guide-to-smarter-workflow-automation-4e33" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;58&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/alifar/laravel-to-n8n-a-developers-guide-to-smarter-workflow-automation-4e33#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              12&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>laravel</category>
      <category>n8n</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Most important</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Tue, 29 Jul 2025 19:29:43 +0000</pubDate>
      <link>https://forem.com/farhadi/most-important-31cn</link>
      <guid>https://forem.com/farhadi/most-important-31cn</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/shayy/i-automated-my-entire-dev-workflow-with-ai-you-wont-believe-how-easy-it-is-45n0" class="crayons-story__hidden-navigation-link"&gt;I Automated My Entire Dev Workflow with AI (You Won't Believe How Easy It Is)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/shayy" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2711665%2Fe528db00-6ac0-4654-b0d5-c68d84ed332e.png" alt="shayy profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/shayy" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Shayan
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Shayan
                
              
              &lt;div id="story-author-preview-content-2729003" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/shayy" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2711665%2Fe528db00-6ac0-4654-b0d5-c68d84ed332e.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Shayan&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/shayy/i-automated-my-entire-dev-workflow-with-ai-you-wont-believe-how-easy-it-is-45n0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/shayy/i-automated-my-entire-dev-workflow-with-ai-you-wont-believe-how-easy-it-is-45n0" id="article-link-2729003"&gt;
          I Automated My Entire Dev Workflow with AI (You Won't Believe How Easy It Is)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/shayy/i-automated-my-entire-dev-workflow-with-ai-you-wont-believe-how-easy-it-is-45n0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;103&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/shayy/i-automated-my-entire-dev-workflow-with-ai-you-wont-believe-how-easy-it-is-45n0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              17&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Tue, 03 Jun 2025 18:38:54 +0000</pubDate>
      <link>https://forem.com/farhadi/-4pj7</link>
      <guid>https://forem.com/farhadi/-4pj7</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/composiodev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F9157%2F71fb2fc3-d2ec-4d74-978d-b29ff9abb8d2.png" alt="Composio" width="32" height="32"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F898740%2Fbe1827e3-0e8a-40dc-8b74-90c2913aa39e.jpg" alt="" width="400" height="400"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/composiodev/i-vibe-coded-a-20m-yc-app-in-a-weekend-heres-how-533o" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;I vibe-coded a $20M YC app in a weekend, here's how🧙‍♂️ 🪄&lt;/h2&gt;
      &lt;h3&gt;Sunil Kumar Dash for Composio ・ Jun 2&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Best ai in</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Thu, 20 Mar 2025 16:31:20 +0000</pubDate>
      <link>https://forem.com/farhadi/best-ai-in-32d4</link>
      <guid>https://forem.com/farhadi/best-ai-in-32d4</guid>
      <description></description>
      <category>ai</category>
    </item>
    <item>
      <title>SPA Development with Filamentphp</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Thu, 07 Nov 2024 06:11:01 +0000</pubDate>
      <link>https://forem.com/farhadi/spa-development-with-filamentphp-3cjp</link>
      <guid>https://forem.com/farhadi/spa-development-with-filamentphp-3cjp</guid>
      <description>&lt;p&gt;Now you can Make SPA (Single Page Application) with Filamentphp&lt;/p&gt;

&lt;p&gt;to make your filamentphp app like SPA Application go to panel Provider adn add -&amp;gt;SPA() method that all.&lt;/p&gt;

&lt;p&gt;if you want to remove some pages from SPA features you can add in -&amp;gt;spaUrlException([&lt;br&gt;
 'add here all your pages that you want to remove from SPA featues'&lt;br&gt;
]);&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>developer</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Trending Full Stack Developer Tools 2024</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Tue, 02 Jan 2024 16:46:30 +0000</pubDate>
      <link>https://forem.com/farhadi/trending-full-stack-developer-tools-2024-55lk</link>
      <guid>https://forem.com/farhadi/trending-full-stack-developer-tools-2024-55lk</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Frameworks and Libraries&lt;/li&gt;
&lt;li&gt;Package Managers&lt;/li&gt;
&lt;li&gt;Build Tools&lt;/li&gt;
&lt;li&gt;Task Runners&lt;/li&gt;
&lt;li&gt;API Development and Management Tools&lt;/li&gt;
&lt;li&gt;Containerization Tools&lt;/li&gt;
&lt;li&gt;Microservices Architecture Tools&lt;/li&gt;
&lt;li&gt;Performance Optimization Tools&lt;/li&gt;
&lt;li&gt;Security Tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Technology is constantly evolving, and as a full stack developer it is crucial to stay updated with the latest tools and technologies. Some of the trending full stack developer tools include ReactJS, AngularJS, Node.js, and Django. These tools provide developers with the ability to build robust and scalable web applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frameworks and Libraries&lt;/strong&gt;&lt;br&gt;
Frameworks and libraries are essential for a productive full stack developer. They provide pre-written code and functionalities that can be used to streamline the development process. Some popular frameworks include Ruby on Rails, Laravel, and ASP.NET. Libraries like React, Vue, and jQuery enable developers to enhance the user interface and add interactive elements to their applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Package Managers&lt;/strong&gt;&lt;br&gt;
Package managers simplify the process of installing, updating, and managing dependencies in a project. NPM (Node Package Manager) and Yarn are commonly used package managers in the JavaScript ecosystem. They help full stack developers easily install various libraries and frameworks, saving time and effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build Tools&lt;/strong&gt;&lt;br&gt;
Build tools automate the process of compiling, bundling, and optimizing code. Webpack and Grunt are popular build tools that help full stack developers streamline the development workflow. These tools enable efficient code bundling and asset optimization, resulting in better performance and faster load times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task Runners&lt;/strong&gt;&lt;br&gt;
Task runners automate repetitive tasks during development, such as minification, compilation, and testing. Gulp and Grunt are widely used task runners that allow full stack developers to easily define and execute complex build tasks. Task runners help improve productivity by automating time-consuming tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Development and Management Tools&lt;/strong&gt;&lt;br&gt;
API development and management tools play a crucial role in building scalable and efficient web applications. Tools like Postman, Swagger, and Express.js provide full stack developers with the ability to develop, debug, and document APIs effectively. These tools enhance collaboration and simplify the process of API development and management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Containerization Tools&lt;/strong&gt;&lt;br&gt;
Containerization tools like Docker have gained immense popularity in recent years. They enable full stack developers to package applications and their dependencies into portable containers. Containerization simplifies application deployment and ensures consistency across different environments, leading to improved productivity and scalability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservices Architecture Tools&lt;/strong&gt;&lt;br&gt;
Microservices architecture has become a popular approach for building complex applications. Tools like Kubernetes and Amazon ECS facilitate the deployment and management of microservices. These tools aid in scaling applications, optimizing resource utilization, and simplifying the overall development process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimization Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Performance optimization is crucial for delivering high-quality web applications. Tools like Lighthouse, WebPageTest, and Chrome DevTools help full stack developers identify performance bottlenecks, optimize code, and improve website loading speed. These tools ensure that applications are fast and responsive, providing a better user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today's digital landscape, security is of utmost importance. Tools like OWASP ZAP, Burp Suite, and SonarQube help full stack developers identify and fix security vulnerabilities in their applications. These tools enable developers to implement secure coding practices and ensure the integrity and confidentiality of user data. Staying up-to-date with the latest tools and technologies is essential for a productive full stack developer. By leveraging these tools and incorporating them into their workflow, developers can enhance their efficiency, optimize performance, and build secure and scalable web applications.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Master Git and GitHub in 5 Hours</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Mon, 10 Jul 2023 04:53:00 +0000</pubDate>
      <link>https://forem.com/farhadi/master-git-and-github-in-5-hours-2cje</link>
      <guid>https://forem.com/farhadi/master-git-and-github-in-5-hours-2cje</guid>
      <description>&lt;p&gt;`&lt;/p&gt;
&lt;p&gt;Are your Git skills rusty? Nonexistent? Is your project folder full of files named “Draft-old”,“Draft2”, “Draft2-New”, “FinalDraft”, “FinalDraft (1)”, and “REALFinalDraft”? Would you like to learn how to write better commit messages than “changed some stuff”?&lt;/p&gt;

&lt;p&gt;If so, we at JetBrains Academy are thrilled to announce that our &lt;a href="https://hyperskill.org/tracks/48" rel="noreferrer noopener"&gt;Introduction to Git&lt;/a&gt; learning track is here on Hyperskill to help improve and solidify your understanding of this fundamental tool. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8dAg7iJk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/07/Blog_Featured_image_1280x720-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8dAg7iJk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/07/Blog_Featured_image_1280x720-2.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;Why learn Git?&lt;/h2&gt;

&lt;p&gt;Git unites developers, designers, managers, and QA engineers in industry, academic, and personal settings because of its broad utility. As a precise and flexible system to track and control the various versions of your code and documents, it is incredibly useful for collaborative projects being developed over time (so, most projects). &lt;/p&gt;

&lt;p&gt;If two developers edit the same file at the same time, Git has systems in place to resolve conflicting edits easily. If important information has been lost or overwritten, Git makes it easy to recover without the need to go digging through your recycle bin. The bigger the project, the more version control systems prove essential to the workflow (and sanity) of developers. &lt;/p&gt;


&lt;h2&gt;Track contents&lt;/h2&gt;

&lt;p&gt;For beginners, understanding the commands and the order and circumstances in which to use them is a challenge which can only be overcome through practice. Even if you already know the basics, this track can help you build your expertise in applying Git to a broad range of problems.&lt;/p&gt;

&lt;p&gt;By the end of the track, you’ll know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Git and GitHub&lt;/li&gt;



&lt;li&gt;Install and set up a Git client&lt;/li&gt;



&lt;li&gt;Use common Git commands&lt;/li&gt;



&lt;li&gt;Work with local and remote repositories &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pt6nQVMi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/06/hyperskill_theory_practice.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pt6nQVMi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/06/hyperskill_theory_practice.gif" alt="a gif showing the perspective of a user on hyperskill switching from a theory page on local repositories to the practice section and successfully completing an exercise" width="800" height="569"&gt;&lt;/a&gt;&lt;em&gt;On Hyperskill you can complete practice problems to test your comprehension and drive the concepts home.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;Project-based learning&lt;/h2&gt;

&lt;p&gt;To begin, choose at least one of our interactive projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Easy: &lt;a href="https://hyperskill.org/projects/296?track=48" rel="noreferrer noopener"&gt;Gitman&lt;/a&gt; or &lt;a href="https://hyperskill.org/projects/310?track=48" rel="noreferrer noopener"&gt;Remo&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re completely new, you can choose an easy project to get acquainted with important Git commands. &lt;a href="https://hyperskill.org/projects/296?track=48" rel="noreferrer noopener"&gt;Gitman&lt;/a&gt; introduces the basics in a straightforward way, and &lt;a href="https://hyperskill.org/projects/310?track=48" rel="noreferrer noopener"&gt;Remo&lt;/a&gt; takes a special look at remote repositories.&lt;/p&gt;

&lt;ol start="2"&gt;
&lt;li&gt;Challenging: &lt;a href="https://hyperskill.org/projects/312?track=48"&gt;Dolly&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re looking for a challenge, you could start with&lt;a href="https://hyperskill.org/projects/312?track=48" rel="noreferrer noopener"&gt; Dolly&lt;/a&gt;, where you will learn how to clone your own local copy of a remote repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AmkS2g-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/06/pycharm_gitman_task-2800x1644.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AmkS2g-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://blog.jetbrains.com/wp-content/uploads/2023/06/pycharm_gitman_task-2800x1644.gif" alt="a user completing a task in the introduction to git learning track with the pycharm IDE" width="800" height="470"&gt;&lt;/a&gt;&lt;em&gt;Learn Git and work on projects directly in a professional IDE.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;Start now with JetBrains Academy on Hyperskill&lt;/h2&gt;

&lt;p&gt;By completing this track, you will not only gain skills in version control for your own use but also unlock the ability to contribute to and collaborate on millions of open-source projects using Git. &lt;/p&gt;

&lt;p&gt;You can start the track right now on &lt;a href="https://hyperskill.org/tracks/48"&gt;Hyperskill&lt;/a&gt; with a free account and join hundreds of others in mastering the fundamentals of Git and version control. A premium subscription grants more assignment submissions per day and a certificate of completion but is not required to complete the course!&lt;/p&gt;

&lt;p&gt;If you have any questions or would like to share your feedback, feel free to leave a comment below or contact us at farhadwardak2018@gmail.com.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy learning!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Mobile-first approach with HTML and CSS</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Sat, 08 Jul 2023 09:04:47 +0000</pubDate>
      <link>https://forem.com/farhadi/mobile-first-approach-with-html-and-css-3e88</link>
      <guid>https://forem.com/farhadi/mobile-first-approach-with-html-and-css-3e88</guid>
      <description>&lt;p&gt;`&lt;br&gt;
              &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;In today’s digital landscape, the mobile-first approach has gained significant importance in web design and development. By adopting a mobile-first approach with HTML and CSS, you prioritize the needs of mobile users and ensure your website delivers a seamless and engaging experience on small screens. This article will explain the principles and benefits of mobile-first design and implementing specific strategies with HTML and CSS so you can apply the methodology.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The &lt;a href="https://www.browserstack.com/guide/how-to-implement-mobile-first-design"&gt;mobile-first approach&lt;/a&gt; is a design and development approach focusing on creating a user-friendly experience for mobile devices like smartphones and tablets. Unlike the traditional method of starting with desktop design and adapting it for mobile, the mobile-first approach begins with designing specifically for mobile devices and then expanding to larger screens. This approach ensures that the needs of mobile users are prioritized, considering the widespread usage of mobile devices in today’s digital world. It is an excellent approach to creating a responsive design.&lt;/p&gt;

&lt;p&gt;The mobile-first approach is essential for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It ensures developers prioritize performance optimization, resulting in faster load times, reduced data usage, and a smoother experience for mobile users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It enables websites and applications to adapt and scale quickly across different devices and screen sizes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Users can seamlessly navigate and engage with the mobile interface, increasing user satisfaction and engagement.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It helps businesses to effectively target and engage with their audience, ensuring seamless experience and interaction.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It enables you to concentrate on delivering clear and concise content.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It can improve your search engine visibility and drive more organic traffic to your site.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="fundamental-principles-of-the-mobile-first-approach"&gt;Fundamental principles of the mobile-first approach&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.uxpin.com/studio/blog/a-hands-on-guide-to-mobile-first-design/"&gt;Several principles&lt;/a&gt; can help shape the design and development process of the mobile-first approach. They include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The mobile-first approach involves designing for the smallest screen and working your way up. Focusing on mobile users first is essential to carefully tailor the user experience to optimize smaller screens and accommodate touch-based interactions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Identify core elements mobile users need to create an efficient, clutter-free experience. For example, prioritize straightforward navigation, user-friendly forms, responsive media, mobile-specific interactions, and prominent call-to-action buttons as core elements for mobile users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optimize performance by minimizing file sizes and employing techniques like lazy loading to enhance speed and responsiveness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Implement responsive design techniques to ensure your website or application adapt seamlessly to different screen sizes and devices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Designing intuitive touch-based interfaces is a fundamental aspect of the mobile-first approach, leveraging natural gestures like tapping, swiping, and pinching to enhance user-friendliness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Begin with a solid foundation for the mobile experience and then enhance it for larger screens and more powerful devices. This approach allows you to add extra features and optimize the design for desktop users without compromising the core mobile experience.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id="structuring-html"&gt;Structuring HTML&lt;/h2&gt;

&lt;p&gt;You can effectively implement a mobile-first approach with HTML and CSS, ensuring a responsive and user-friendly design for mobile devices while accommodating larger screens and providing a seamless cross-device experience. Structuring HTML is an essential aspect of building a mobile-first approach. Here are ways to do that better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Start with a well-organized HTML structure, including the doctype declaration (&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;) and semantic elements like &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Utilize semantic HTML tags for effective content structure, such as using &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; to &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt; for headings based on hierarchy, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; for navigation menus, &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; for self-contained content, and &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; for grouping related content.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enhance the mobile user experience by incorporating mobile-friendly elements like &lt;code&gt;&amp;lt;input type="tel"&amp;gt;&lt;/code&gt; for telephone numbers, &lt;code&gt;&amp;lt;input type="email"&amp;gt;&lt;/code&gt; for email addresses, and &lt;code&gt;&amp;lt;input type="date"&amp;gt;&lt;/code&gt; for date inputs. These elements facilitate appropriate keyboard layouts and input options.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a mobile-friendly navigation structure for smaller screens, utilizing techniques like a collapsible menu (&lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; with associated &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;), a hamburger icon, or a slide-out panel to ensure easy usability and accessibility.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include accessibility features in your HTML structure, such as &lt;code&gt;alt&lt;/code&gt; attributes for images (&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;) and proper labeling for form inputs (&lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt;), to enhance navigation and understanding of your content for users with disabilities.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Improve code readability and navigation by maintaining consistent indentation and using whitespace effectively to enhance the structure and readability of your HTML.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s see an example of how to structure the HTML:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"UTF-8"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"viewport"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach HTML Structuring&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Home&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Shop&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Contact&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Store&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;About Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          We work with skilled artisans and select premium materials to craft&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          footwear that stands the test of time&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Our Products&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Men's shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Women's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Kid's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Contact Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt;&amp;gt;Name:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"text"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt;&amp;gt;Email:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;Message:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"submit"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Send Message"&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;copy;&lt;/span&gt;&lt;span&gt; 2023 My Mobile-First Approach Example. All rights reserved.&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The outcome:
&lt;a href="/images/mobile-first-approach-with-html-and-css/images/image01.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/mobile-first-approach-with-html-and-css/images/image01.png" alt="-"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The example above follows the mobile-first approach and includes the necessary structure for a website. It sets the document type, defines the viewport for responsive behavior, and consists of a title for the page. It also comprises a header, a main content area with sections, and a footer. The navigation bar, sections, and form are organized using semantic HTML tags.&lt;/p&gt;
&lt;h2 id="creating-responsive-grid-systems"&gt;Creating responsive grid systems&lt;/h2&gt;
&lt;p&gt;By leveraging the power of CSS Flexbox and CSS Grid, you can create versatile and responsive grid systems that adapt gracefully to different devices, providing an optimal user experience for mobile and desktop users.
Here is how you can use CSS flexbox and grid to create a responsive grid system for the mobile-first approach:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"UTF-8"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"viewport"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;.grid-container-flex&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;flex&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;flex-direction&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;column&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;purple&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1.5&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;margin-top&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;.grid-container-grid&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;grid&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;grid-template-columns&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1.1&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach HTML Structuring&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Home&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Shop&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Contact&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Store&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"grid-container-flex"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;About Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;We work with skilled artisans and select premium materials to craft footwear that stands the test of time&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"grid-container-grid"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Our Products&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Men's shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Women's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Kid's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Contact Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt;&amp;gt;Name:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"text"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt;&amp;gt;Email:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;Message:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;          &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"submit"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Send Message"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;copy;&lt;/span&gt;&lt;span&gt; 2023 My Mobile-First Approach Example. All rights reserved.&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The outcome:
&lt;a href="/images/mobile-first-approach-with-html-and-css/images/image02.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/mobile-first-approach-with-html-and-css/images/image02.png" alt="-"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Flexbox layout is applied to the “About Us” section in the above example, arranging its elements in a vertical column. The Grid layout is used for the “Our Products” section, organizing its elements in a single column. These CSS techniques help create responsive and adaptable layouts that can be customized and optimized for different devices and screen sizes.&lt;/p&gt;
&lt;p&gt;You can check out &lt;a href="https://blog.openreplay.com/building-layouts-with-css3-flexbox/"&gt;CSS Flexbox&lt;/a&gt; and &lt;a href="https://blog.openreplay.com/working-with-the-css-grid/"&gt;CSS Grid&lt;/a&gt; for in-depth knowledge of how to use them and create a responsive grid system for the mobile-first approach.&lt;/p&gt;
&lt;p&gt;You can effectively implement a mobile-first approach with HTML and CSS, ensuring a responsive and user-friendly design for mobile devices while accommodating larger screens and providing a seamless cross-device experience.&lt;/p&gt;
&lt;h2 id="responsive-design-with-css-media-queries"&gt;Responsive Design with CSS Media Queries&lt;/h2&gt;
&lt;p&gt;Implementing responsive design with CSS media queries enables you to apply different styles based on the device’s screen size. This approach is commonly used with the mobile-first approach to improve user experience across various devices.&lt;/p&gt;
&lt;p&gt;You can create a responsive design using CSS media queries that provides an optimal viewing experience across multiple devices. It allows you to tailor your styles to different screen sizes’ specific needs and constraints, ensuring that your website or application is user-friendly and visually appealing on all devices.&lt;/p&gt;
&lt;p&gt;Here is how you can use CSS media queries for a mobile-first approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Design and style your mobile device website or application using CSS rules targeting smaller screens. This enables your design optimization for mobile users and establishes the mobile-first foundation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will use the &lt;code&gt;min-width&lt;/code&gt; media query for the mobile-first approach to enhance the design as the screen size increases progressively. This means that the default styles will be for mobile, and additional styles will be added as the screen size increases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You must determine the breakpoints at which you want to introduce layout or styling changes. Breakpoints are specific screen widths at which your design will adapt to fit the screen size better. Standard breakpoints include tablets, desktops, and larger screens.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To target specific screen sizes, write media queries using the &lt;code&gt;@media&lt;/code&gt; rule and the &lt;code&gt;min-width&lt;/code&gt; property.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"UTF-8"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"viewport"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;/* Default styles for mobile */&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;.grid-container-flex&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;flex&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;flex-direction&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;column&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;background-color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;purple&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0.9&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;margin-top&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;.grid-container-grid&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;grid&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;grid-template-columns&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1.1&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;/* Media query for tablets */&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;min-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;768&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;.grid-container-flex&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1.3&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;.grid-container-grid&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;grid-template-columns&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;/* Media query for desktops */&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;min-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;.grid-container-flex&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;.grid-container-grid&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;grid-template-columns&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     }&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;/&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt; &amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;My Mobile-First Approach HTML Structuring&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Home&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Shop&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Contact&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;&amp;gt;Store&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;/&lt;/span&gt;&lt;span&gt;nav&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;/&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"grid-container-flex"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;About Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;We work with skilled artisans and select premium materials to craft footwear that stands the test of time&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"grid-container-grid"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Our Products&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Men's shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Women's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;Kid's Shoes&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;Contact Us&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt;&amp;gt;Name:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"text"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"name"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt;&amp;gt;Email:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"email"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;Message:&amp;lt;/&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"message"&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;textarea&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;         &amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"submit"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Send Message"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;       &amp;lt;/&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;/&lt;/span&gt;&lt;span&gt;section&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;/&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;     &amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;amp;copy;&lt;/span&gt;&lt;span&gt; 2023 My Mobile-First Approach Example. All rights reserved.&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;   &amp;lt;/&lt;/span&gt;&lt;span&gt;footer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt; &amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above example includes CSS media queries for a mobile-first approach to adjust the styles for different screen sizes. The mobile styles are applied by default, and certain elements’ font size and height are increased for tablets. The font size and height are further adjusted for desktops to ensure optimal display on larger screens.&lt;/p&gt;
&lt;p&gt;You can check out &lt;a href="https://blog.openreplay.com/understanding-css-media-queries/"&gt;CSS media queries&lt;/a&gt; for an in-depth understanding of using CSS media queries.&lt;/p&gt;
&lt;h2 id="testing-and-optimization"&gt;Testing and Optimization&lt;/h2&gt;
&lt;p&gt;Testing and optimization are crucial steps in the mobile-first approach to ensure the effectiveness and performance of the designed website or application on various mobile devices.&lt;/p&gt;
&lt;p&gt;In the developer tools, you can use responsive design testing tools in modern browsers, such as Chrome’s Device Mode, to test on various devices and screen sizes. These tools allow you to simulate multiple devices and screen sizes, visually representing how the code renders on different devices.&lt;/p&gt;
&lt;p&gt;Let’s check how the mobile-first approach is displayed on different devices.&lt;/p&gt;
&lt;p&gt;Mobile display:
&lt;a href="/images/mobile-first-approach-with-html-and-css/images/image03.gif" class="article-body-image-wrapper"&gt;&lt;img src="/images/mobile-first-approach-with-html-and-css/images/image03.gif" alt="-"&gt;&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Large screen display:
&lt;a href="/images/mobile-first-approach-with-html-and-css/images/image04.gif" class="article-body-image-wrapper"&gt;&lt;img src="/images/mobile-first-approach-with-html-and-css/images/image04.gif" alt="-"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tablet display:
&lt;a href="/images/mobile-first-approach-with-html-and-css/images/image05.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/mobile-first-approach-with-html-and-css/images/image05.png" alt="-"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="using-responsive-image-techniques"&gt;Using responsive image techniques&lt;/h2&gt;
&lt;p&gt;Responsive image techniques for the mobile-first approach allow the images to adjust to different screen sizes, ensuring a better user experience on mobile devices while still providing high-quality images on larger screens.&lt;/p&gt;
&lt;p&gt;Some of the techniques to use when implementing responsive image techniques for a mobile-first approach include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the picture element can present different images based on screen size.
For example:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;picture&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;media&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"(min-width: 768px)"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"large.jpg"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;media&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"(min-width: 480px)"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"medium.jpg"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"small.jpg"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Responsive image"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;picture&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above example enables the browser to choose &lt;code&gt;large.jpg&lt;/code&gt; for screens wider than 768 pixels, &lt;code&gt;medium.jpg&lt;/code&gt; for screens wider than 480 pixels, and fallback to &lt;code&gt;small.jpg&lt;/code&gt; for smaller screens.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To avoid overflow of images from the container on different screen sizes, set the &lt;code&gt;max-width&lt;/code&gt; property of the image to 100% and let the height scale automatically to maintain the image’s aspect ratio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;max-width&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;To set multiple image sources with different resolutions or sizes, use the &lt;code&gt;srcset&lt;/code&gt; attribute. This enables the browser to select the most appropriate image based on the device’s screen size and pixel density.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"small.jpg"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"medium.jpg 800w, large.jpg 1200w"&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"Responsive Image"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above example shows the browser will choose between &lt;code&gt;small.jpg&lt;/code&gt;, &lt;code&gt;medium.jpg&lt;/code&gt;, or &lt;code&gt;large.jpg&lt;/code&gt; based on the available width (&lt;code&gt;800w&lt;/code&gt; or &lt;code&gt;1200w&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The mobile-first approach prioritizes mobile users and eliminates the issues associated with scaling down from desktop to mobile. By following the mobile-first approach and incorporating responsive design principles, we can create flexible and adaptive websites that meet the diverse needs of users across different screen sizes and devices. We can create a user-centered and efficient design that works well on mobile devices by starting with the smallest screens and focusing on essential content and functionality.&lt;/p&gt;

&lt;h3&gt;Gain Debugging Superpowers&lt;/h3&gt; 
&lt;p&gt;
  Unleash the power of session replay to reproduce bugs and track user frustrations. Get complete visibility into your frontend with OpenReplay, the most advanced open-source session replay tool for developers.
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openreplay/openreplay"&gt;&lt;img src="/media/openreplay-git-hero.svg" alt="OpenReplay"&gt;&lt;/a&gt;&lt;br&gt;
  &lt;/p&gt;
&lt;br&gt;
    &lt;a href="https://github.com/openreplay/openreplay"&gt;&lt;br&gt;
      &lt;p&gt;&lt;span&gt;&lt;br&gt;
        &lt;br&gt;
      &lt;/span&gt; Check our GitHub Repo&lt;/p&gt;

&lt;/a&gt;&lt;br&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
            `

</description>
      <category>html</category>
      <category>css</category>
      <category>mobile</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Use GitHub Copilot to Become More Productive Developer</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Thu, 06 Jul 2023 09:06:47 +0000</pubDate>
      <link>https://forem.com/farhadi/how-to-use-github-copilot-to-become-more-productive-developer-21pp</link>
      <guid>https://forem.com/farhadi/how-to-use-github-copilot-to-become-more-productive-developer-21pp</guid>
      <description>&lt;p&gt;`                      &lt;/p&gt;

&lt;p&gt;There are a number of AI tools for developers emerging on the market. But in my mind GitHub Copilot stands above the rest because of its usability, seamless IDE integration, and remarkable enhancements to developer productivity.&lt;/p&gt;
&lt;p&gt;Copilot offers a variety of AI tools that have radically streamlined my experience as a software developer. I've used it to generate code, tests, and even simple applications. It's also great for debugging, refactoring, and documenting existing code. &lt;/p&gt;
&lt;p&gt;Weirdly, using Copilot has caused me to develop features faster than business stakeholders can review them.&lt;/p&gt;
&lt;p&gt;It's important to note that AI tools, including Copilot, can be blatantly wrong, apologize (or not) when corrected, and then confidently produce the same error. But as long as you're aware of the downsides of AI tools, and have enough coding knowledge to recognize when they're incorrect, you can mitigate them on the path to &lt;a href="https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/"&gt;substantially improved productivity&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="how-to-setup-github-copilot"&gt;How to Setup GitHub Copilot&lt;/h2&gt;
&lt;p&gt;For setup and basic usage of Copilot, check out the &lt;a href="https://docs.github.com/en/copilot"&gt;docs&lt;/a&gt;. You can add on Copilot to an individual or business account, and there's a free trial and reasonable &lt;a href="https://github.com/features/copilot#pricing"&gt;pricing&lt;/a&gt; after the trial. &lt;/p&gt;
&lt;p&gt;After adding Copilot to your GitHub account, you'll want to install the &lt;a href="https://docs.github.com/en/copilot/getting-started-with-github-copilot"&gt;plugins for your IDE&lt;/a&gt; and log into GitHub to access Copilot.&lt;/p&gt;
&lt;p&gt;In this article, we'll use these &lt;a href="https://marketplace.visualstudio.com/search?term=copilot&amp;amp;target=VSCode&amp;amp;category=All%20categories&amp;amp;sortBy=Relevance"&gt;Visual Studio Code extensions&lt;/a&gt;:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GitHub Extension&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Preview&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot"&gt;Copilot&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AI pair programmer with in-IDE code suggestions&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-nightly"&gt;Copilot Nightly&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Nightly build of Copilot, includes latest changes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-labs"&gt;Copilot Labs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Experimental features in sidebar&lt;/td&gt;
&lt;td&gt;&lt;a href="https://githubnext.com/projects/copilot-labs/"&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat"&gt;Copilot Chat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Interactive chat in sidebar, part of Copilot X&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/features/preview/copilot-x"&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=GitHub.heygithub"&gt;Copilot Voice&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Voice assistant&lt;/td&gt;
&lt;td&gt;&lt;a href="https://githubnext.com/projects/copilot-voice/"&gt;Yes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;This info is up-to-date as the writing of this article, but will likely change as GitHub evolves these products.&lt;/li&gt;
&lt;li&gt;I haven't yet received access to Copilot Voice or Copilot (X) for Pull Requests, so my perspective on these are limited and based on GitHub's preview docs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="privacy"&gt;Privacy&lt;/h3&gt;
&lt;p&gt;Before jumping into some key use cases for Copilot, a quick note on privacy: Basically, if you trust GitHub to host your source code, you can likely trust what they do with your Copilot prompts and code snippets. [See their &lt;a href="https://github.com/features/copilot#faq"&gt;FAQ docs&lt;/a&gt; and &lt;a href="https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement"&gt;Privacy Statement&lt;/a&gt;.]&lt;/p&gt;
&lt;h2 id="use-cases-for-github-copilot"&gt;Use Cases for GitHub Copilot&lt;/h2&gt;
&lt;p&gt;The uses cases for GitHub Copilot are numerous, especially when you add in &lt;a href="https://github.com/features/preview/copilot-x"&gt;t&lt;/a&gt;he preview features of Labs, Chat, and Voice. Using Copilot's features can really streamline the development process. &lt;/p&gt;
&lt;p&gt;Here are some great ways to leverage Copilot extensions:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Extension(s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code Generation&lt;/td&gt;
&lt;td&gt;Copilot, Copilot Nightly, Copilot Voice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explaining Code&lt;/td&gt;
&lt;td&gt;Copilot Labs, Copilot Chat, Copilot Voice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language Translation&lt;/td&gt;
&lt;td&gt;Copilot Labs, Copilot Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debugging&lt;/td&gt;
&lt;td&gt;Copilot Labs, Copilot Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactoring&lt;/td&gt;
&lt;td&gt;Copilot Labs, Copilot Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Generation&lt;/td&gt;
&lt;td&gt;Copilot, Copilot Nightly, Copilot Labs, Copilot Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Reviews&lt;/td&gt;
&lt;td&gt;Copilot Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice-Driven Development&lt;/td&gt;
&lt;td&gt;Copilot Voice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3 id="code-generation"&gt;Code Generation&lt;/h3&gt;
&lt;p&gt;Copilot is known for its code completion features. If it's given a comment in the code or you type the beginnings of a line of code, Copilot will suggest a solution that you can accept, ignore, or explore alternatives. It's referred to as "ghost text".&lt;/p&gt;
&lt;p&gt;Once you have the Copilot extension installed and you're logged in, code completion is as simple as typing instructions and hitting the Tab key once the suggestion comes up.&lt;/p&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--owjPmbKV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://www.freecodecamp.org/news/content/images/2023/06/Screen-Recording-2023-06-09-at-8--1-.gif" alt="Screen-Recording-2023-06-09-at-8--1-" width="800" height="257"&gt;A comment prompt in Ruby that Copilot uses to create a method and invocation&lt;p&gt;Taking code completion one step further, Copilot Chat can take a single prompt and generate instructions for building an entire application. &lt;/p&gt;
&lt;p&gt;I asked it to create a REST API in Node with CRUD functions for "products", and it generated functional code. Impressive overall. Given the same prompt, ChatGPT also gave me instructions for how to run the code, which was nice.&lt;/p&gt;
&lt;p&gt;Copilot Voice can also write or edit code based on voice commands. Most of the time, using the keyboard with Copilot code completion is faster than dictating lines of code with Voice. But it's compelling to think about using Copilot Voice to create and run code without having to type or stare at a screen.&lt;/p&gt;
&lt;h3 id="explaining-code"&gt;Explaining Code&lt;/h3&gt;
&lt;p&gt;I often have to stare at a screen to figure out what a block of code is doing. Sometimes it's legacy code where I don't understand the business context. Sometimes it's using a particular library I'm not used to. Sometimes I curse the person who wrote it, even if it's me.&lt;/p&gt;
&lt;p&gt;Below is some code generated by Copilot Chat from my "REST API in Node..." prompt from above:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;get&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string"&gt;'/products/:id'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token parameter"&gt;req&lt;span&gt;,&lt;/span&gt; res&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token operator"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
  &lt;span class="token keyword"&gt;const&lt;/span&gt; id &lt;span class="token operator"&gt;=&lt;/span&gt; req&lt;span class="token punctuation"&gt;.&lt;/span&gt;params&lt;span class="token punctuation"&gt;.&lt;/span&gt;id&lt;span class="token punctuation"&gt;;&lt;/span&gt;
  &lt;span class="token keyword"&gt;const&lt;/span&gt; product &lt;span class="token operator"&gt;=&lt;/span&gt; products&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;find&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token parameter"&gt;p&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token operator"&gt;=&amp;gt;&lt;/span&gt; p&lt;span class="token punctuation"&gt;.&lt;/span&gt;id &lt;span class="token operator"&gt;===&lt;/span&gt; id&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
  &lt;span class="token keyword"&gt;if&lt;/span&gt; &lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
    res&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;json&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
  &lt;span class="token punctuation"&gt;}&lt;/span&gt; &lt;span class="token keyword"&gt;else&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
    res&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;status&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token number"&gt;404&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token function"&gt;json&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token literal-property property"&gt;error&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'Product not found'&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;
  &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I took this code and fed it into the "Explain" feature in Copilot Labs. Here's the response...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Here is the explanation for the code above:  &lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;We define a route with the route path /products/:id. The colon : in the path indicates that it is a route parameter. The value of the route parameter will be available in req.params. For example, if the route path is /products/:id and we make a request to /products/5, then the value of req.params will be { id: 5 }.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;We get the id from req.params and find the product with the given id from the products array. If a product with the given id exists, we return it. Otherwise, we send a 404 error response with the error message Product not found.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a pretty straightforward segment of code, and the response is clear and straightforward as well. It would be easy to add this as documentation in a code comment above the function.&lt;/p&gt;
&lt;p&gt;Another good example is regular expressions. I understand how regular expressions work but I don't often have the patience to figure out what a particular regex is doing. I fed Copilot Chat this giant regex statement for email validation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(?:[a-z0-9!#$%&amp;amp;'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&amp;amp;'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It explained the regex at a high level, indicating it was broken into the local and domain parts, representing before and after the "@" sign in an email address. Then it described allowable characters in each part. Quite helpful.  &lt;/p&gt;
&lt;h3 id="language-translation"&gt;Language Translation&lt;/h3&gt;
&lt;p&gt;Developers are often required to quickly learn new languages and frameworks. Copilot Labs and Chat make this pretty easy. Here's an array of products in JavaScript and Ruby that was converted by Copilot:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;let&lt;/span&gt; products &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token punctuation"&gt;[&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token literal-property property"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'1'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'Product 1'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;10.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token literal-property property"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'2'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'Product 2'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;19.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token literal-property property"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'3'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string"&gt;'Product 3'&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token literal-property property"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;7.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;products &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token punctuation"&gt;[&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token symbol"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'1'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'Product 1'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;10.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token symbol"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'2'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'Product 2'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;19.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt;
  &lt;span class="token punctuation"&gt;{&lt;/span&gt; &lt;span class="token symbol"&gt;id&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'3'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;name&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;'Product 3'&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;price&lt;/span&gt;&lt;span class="token operator"&gt;:&lt;/span&gt; &lt;span class="token number"&gt;7.99&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is a very simple example, so let's try making this into a class and going the other way (from Ruby to JavaScript):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;class&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;
  attr_reader &lt;span class="token symbol"&gt;:name&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token symbol"&gt;:price&lt;/span&gt;

  &lt;span class="token keyword"&gt;def&lt;/span&gt; &lt;span class="token method-definition"&gt;&lt;span&gt;initialize&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;name&lt;span class="token punctuation"&gt;,&lt;/span&gt; price&lt;span class="token punctuation"&gt;)&lt;/span&gt;
    &lt;span class="token variable"&gt;@name&lt;/span&gt; &lt;span class="token operator"&gt;=&lt;/span&gt; name
    &lt;span class="token variable"&gt;@price&lt;/span&gt; &lt;span class="token operator"&gt;=&lt;/span&gt; price
  &lt;span class="token keyword"&gt;end&lt;/span&gt;
&lt;span class="token keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;class&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
  &lt;span class="token function"&gt;constructor&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token parameter"&gt;name&lt;span&gt;,&lt;/span&gt; price&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt;
    &lt;span class="token keyword"&gt;this&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;name &lt;span class="token operator"&gt;=&lt;/span&gt; name&lt;span class="token punctuation"&gt;;&lt;/span&gt;
    &lt;span class="token keyword"&gt;this&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;price &lt;span class="token operator"&gt;=&lt;/span&gt; price&lt;span class="token punctuation"&gt;;&lt;/span&gt;
  &lt;span class="token punctuation"&gt;}&lt;/span&gt;
&lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This checks out. For good measure, I tested TypeScript as well, and it worked perfectly, too.&lt;/p&gt;
&lt;h3 id="debugging"&gt;Debugging&lt;/h3&gt;
&lt;p&gt;This is a very handy feature. You can give Copilot Chat or Labs problematic code or error messages and it will indicate what it thinks the issue is. &lt;/p&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6F5foc1L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://www.freecodecamp.org/news/content/images/2023/06/Screen-Recording-2023-06-14-at-1.gif" alt="Screen-Recording-2023-06-14-at-1" width="702" height="302"&gt;Copilot Labs "Fix Bug" Brush Feature&lt;p&gt;I can't tell you how many hairs I've pulled out because I couldn't find what amounted to a syntax error. Copilot's ability to fix bugs just makes me happier and hairier. &lt;/p&gt;
&lt;p&gt;You can also give Copilot Chat an error message with no other prompt and it can tell you the issue. I arbitrarily removed a dot from the Node REST API code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;products&lt;span class="token punctuation"&gt;[&lt;/span&gt;productIndex&lt;span class="token punctuation"&gt;]&lt;/span&gt; &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token punctuation"&gt;{&lt;/span&gt; id&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;req&lt;span class="token punctuation"&gt;.&lt;/span&gt;body &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I copied/pasted the error message in Chat, and it responded with...&lt;/p&gt;
&lt;blockquote&gt;Looking at the code excerpt you provided, it seems that the issue is on line 49 where there is a syntax error in the object literal. The ".." before &lt;code&gt;req.body&lt;/code&gt; is causing the error. It should be just one dot instead of two.&lt;/blockquote&gt;
&lt;p&gt;This is both correct (the line and source of the error) and incorrect (that it should be only one dot). It then gave me a code snippet with three dots, which is also correct. &lt;/p&gt;
&lt;p&gt;As I mentioned at the outset, you've gotta double-check AI's work. Still, I'm impressed by Copilot's ability to parse an error message, describe what it thinks is wrong, and suggest a fix.&lt;/p&gt;
&lt;h3 id="refactoring"&gt;Refactoring&lt;/h3&gt;
&lt;p&gt;Another great use case is refactoring. Consider the code below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;def&lt;/span&gt; &lt;span class="token method-definition"&gt;&lt;span&gt;price_with_discount&lt;/span&gt;&lt;/span&gt;
  price &lt;span class="token operator"&gt;-&lt;/span&gt; &lt;span class="token punctuation"&gt;(&lt;/span&gt;price &lt;span class="token operator"&gt;*&lt;/span&gt; discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt;
&lt;span class="token keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This simple price calculation doesn't factor in &lt;code&gt;nil&lt;/code&gt; values, strings that should be numbers, or reasonable values for &lt;code&gt;price&lt;/code&gt; or &lt;code&gt;discount_rate&lt;/code&gt;. We need the code to do this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure &lt;code&gt;price&lt;/code&gt; is an integer or float (not nil)&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;price&lt;/code&gt; is not negative&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;discount_rate&lt;/code&gt; is a float (not nil)&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;discount_rate&lt;/code&gt; is not negative and less than or equal to 1&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Copilot Chat handles this with ease...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="token keyword"&gt;def&lt;/span&gt; &lt;span class="token method-definition"&gt;&lt;span&gt;price_with_discount&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt;
  &lt;span class="token keyword"&gt;raise&lt;/span&gt; ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Price must be a positive number"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;unless&lt;/span&gt; price&lt;span class="token punctuation"&gt;.&lt;/span&gt;is_a&lt;span class="token operator"&gt;?&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token builtin"&gt;Numeric&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token operator"&gt;&amp;amp;&amp;amp;&lt;/span&gt; price &lt;span class="token operator"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="token number"&gt;0&lt;/span&gt;
  &lt;span class="token keyword"&gt;raise&lt;/span&gt; ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Discount rate must be a float between 0 and 1"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;unless&lt;/span&gt; discount_rate&lt;span class="token punctuation"&gt;.&lt;/span&gt;is_a&lt;span class="token operator"&gt;?&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token builtin"&gt;Float&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token operator"&gt;&amp;amp;&amp;amp;&lt;/span&gt; discount_rate &lt;span class="token operator"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="token number"&gt;0&lt;/span&gt; &lt;span class="token operator"&gt;&amp;amp;&amp;amp;&lt;/span&gt; discount_rate &lt;span class="token operator"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="token number"&gt;1&lt;/span&gt;

  price &lt;span class="token operator"&gt;-&lt;/span&gt; &lt;span class="token punctuation"&gt;(&lt;/span&gt;price &lt;span class="token operator"&gt;*&lt;/span&gt; discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt;
&lt;span class="token keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="test-generation"&gt;Test Generation&lt;/h3&gt;
&lt;p&gt;Using Copilot to generate tests is technically a subset of "Code Generation" above, but I felt it was so useful it warranted its own mention.&lt;/p&gt;
&lt;p&gt;Generating unit tests for code can be tedious if you're trying to cover happy and sad paths, primary use cases and edge cases. Our &lt;code&gt;price_with_discount&lt;/code&gt; code above needs test cases to ensure an error is raised if &lt;code&gt;price&lt;/code&gt; or &lt;code&gt;discount_rate&lt;/code&gt; don't meet the requirements. In addition, we might want to test the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;price&lt;/code&gt; without a &lt;code&gt;discount_rate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;price&lt;/code&gt; with a reasonable &lt;code&gt;discount_rate&lt;/code&gt; (for example, a 10% discount)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;price&lt;/code&gt; with a 100% &lt;code&gt;discount_rate&lt;/code&gt; (for example, if we want to give the product away)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With these and our previous error cases, here's what Copilot Chat generated, after a little fine-tuning (re-prompting) and switching from Minitest to Rspec.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RSpec&lt;span class="token punctuation"&gt;.&lt;/span&gt;describe Product &lt;span class="token keyword"&gt;do&lt;/span&gt;
  describe &lt;span class="token string-literal"&gt;&lt;span&gt;"#price_with_discount"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a valid price and discount rate"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"returns the price with the discount applied"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;100&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;0.2&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to eq&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token number"&gt;80&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;

    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a nil price"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"raises an ArgumentError with an appropriate message"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token keyword"&gt;nil&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;0.2&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect &lt;span class="token punctuation"&gt;{&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to raise_error&lt;span class="token punctuation"&gt;(&lt;/span&gt;ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Price must be a positive number"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;

    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a price less than 0"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"raises an ArgumentError with an appropriate message"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token operator"&gt;-&lt;/span&gt;&lt;span class="token number"&gt;100&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;0.2&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect &lt;span class="token punctuation"&gt;{&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to raise_error&lt;span class="token punctuation"&gt;(&lt;/span&gt;ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Price must be a positive number"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;

    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a nil discount rate"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"raises an ArgumentError with an appropriate message"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;100&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token keyword"&gt;nil&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect &lt;span class="token punctuation"&gt;{&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to raise_error&lt;span class="token punctuation"&gt;(&lt;/span&gt;ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Discount rate must be a float between 0 and 1"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;

    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a discount rate less than 0"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"raises an ArgumentError with an appropriate message"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;100&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token operator"&gt;-&lt;/span&gt;&lt;span class="token number"&gt;0.2&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect &lt;span class="token punctuation"&gt;{&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to raise_error&lt;span class="token punctuation"&gt;(&lt;/span&gt;ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Discount rate must be a float between 0 and 1"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;

    context &lt;span class="token string-literal"&gt;&lt;span&gt;"when given a discount rate greater than 1"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
      it &lt;span class="token string-literal"&gt;&lt;span&gt;"raises an ArgumentError with an appropriate message"&lt;/span&gt;&lt;/span&gt; &lt;span class="token keyword"&gt;do&lt;/span&gt;
        product &lt;span class="token operator"&gt;=&lt;/span&gt; &lt;span class="token class-name"&gt;Product&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;&lt;span class="token keyword"&gt;new&lt;/span&gt;&lt;span class="token punctuation"&gt;(&lt;/span&gt;&lt;span class="token string-literal"&gt;&lt;span&gt;"Test Product"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;100&lt;/span&gt;&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token number"&gt;1.5&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
        expect &lt;span class="token punctuation"&gt;{&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price_with_discount&lt;span class="token punctuation"&gt;(&lt;/span&gt;product&lt;span class="token punctuation"&gt;.&lt;/span&gt;price&lt;span class="token punctuation"&gt;,&lt;/span&gt; product&lt;span class="token punctuation"&gt;.&lt;/span&gt;discount_rate&lt;span class="token punctuation"&gt;)&lt;/span&gt; &lt;span class="token punctuation"&gt;}&lt;/span&gt;&lt;span class="token punctuation"&gt;.&lt;/span&gt;to raise_error&lt;span class="token punctuation"&gt;(&lt;/span&gt;ArgumentError&lt;span class="token punctuation"&gt;,&lt;/span&gt; &lt;span class="token string-literal"&gt;&lt;span&gt;"Discount rate must be a float between 0 and 1"&lt;/span&gt;&lt;/span&gt;&lt;span class="token punctuation"&gt;)&lt;/span&gt;
      &lt;span class="token keyword"&gt;end&lt;/span&gt;
    &lt;span class="token keyword"&gt;end&lt;/span&gt;
  &lt;span class="token keyword"&gt;end&lt;/span&gt;
&lt;span class="token keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One test for valid input, five for invalid input. All six work, and I didn't have to write them!&lt;/p&gt;
&lt;h3 id="code-reviews"&gt;Code Reviews&lt;/h3&gt;
&lt;p&gt;One feature of Copilot X is &lt;a href="https://githubnext.com/projects/copilot-for-pull-requests#technical-preview-available-now"&gt;Copilot for Pull Requests&lt;/a&gt;. Here are some of the key features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Template Expansion&lt;/strong&gt; – Leverage Copilot to fill in your PR template and explain code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gentest&lt;/strong&gt; – Generate tests for your code based on Copilot's analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost Text&lt;/strong&gt; – Receive suggestions while you're typing in the PR&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="voice-driven-development"&gt;Voice-Driven Development&lt;/h3&gt;
&lt;p&gt;Formerly known as "Hey, Github!", Copilot Voice allows you to use natural language prompts to interact with your code. It looks impressive, boasting these capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write/Edit Code&lt;/strong&gt; – Use voice controls to trigger Copilot code suggestions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Navigation&lt;/strong&gt; – Navigate a file without a keyboard or mouse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control the IDE&lt;/strong&gt; – Trigger any VS Code command&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Summarization&lt;/strong&gt; – Get summaries of blocks of code&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;p&gt;GitHub is rapidly producing revolutionary developer productivity tools with its suite of Copilot extensions. It's increasing my joy in programming and decreasing my time spent on mind-numbing tasks. I would encourage you to keep track of enhancements to Copilot as they're happening quickly.&lt;/p&gt;
&lt;p&gt;Ignore click-bait promises of a "10x productivity gain", but don't ignore the research of &lt;a href="https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/"&gt;Copilot's impact on developer productivity and happiness&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Spend some time with Copilot tools trying out the use cases above, and I think you'll be surprised by its effect on your productivity and happiness.&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
      <category>github</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>ChatGPT.js Powerful Client side JavaScript Library For ChatGPT</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Sat, 01 Jul 2023 07:35:42 +0000</pubDate>
      <link>https://forem.com/farhadi/chatgptjs-powerful-client-side-javascript-library-for-chatgpt-5aik</link>
      <guid>https://forem.com/farhadi/chatgptjs-powerful-client-side-javascript-library-for-chatgpt-5aik</guid>
      <description>&lt;p&gt;chatgpt.js is a powerful JavaScript library that allows for super easy interaction w/ the ChatGPT DOM.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feature-rich&lt;/li&gt;
&lt;li&gt;Object-oriented&lt;/li&gt;
&lt;li&gt;Easy-to-use&lt;/li&gt;
&lt;li&gt;Lightweight (yet optimally performant)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click on button below to jump into the official website of This Powerful Library &lt;/p&gt;

&lt;p&gt;&lt;a href="https://chatgpt.js.org/"&gt;Click Here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>javascript</category>
      <category>javascriptlibraries</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Navigation With Animated HERO Section</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Wed, 23 Nov 2022 14:51:33 +0000</pubDate>
      <link>https://forem.com/farhadi/navigation-with-animated-hero-section-46fi</link>
      <guid>https://forem.com/farhadi/navigation-with-animated-hero-section-46fi</guid>
      <description>&lt;p&gt;HTML Code `&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;/p&gt;


&lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
    Change English&lt;br&gt;
    &lt;br&gt;




&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;sectio class="nav"&amp;gt;
    &amp;lt;h1&amp;gt;FRONTEND TRENDS&amp;lt;/h1&amp;gt;
    &amp;lt;h3 class="span loader"&amp;gt;&amp;lt;span class="m"&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;E&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;E&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;F&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;I&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;T&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;S&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;o&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;T&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;E&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;O&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;O&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;G&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;I&amp;lt;/span&amp;gt;&amp;lt;span class="m"&amp;gt;E&amp;lt;/span&amp;gt;&amp;lt;span
            class="m"&amp;gt;S&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;
    &amp;lt;div class="nav-container"&amp;gt;&amp;lt;a class="nav-tab" href="#tab-svelte"&amp;gt;SVELTE&amp;lt;/a&amp;gt;&amp;lt;a class="nav-tab"
            href="#tab-esbuild"&amp;gt;ESBUILD&amp;lt;/a&amp;gt;&amp;lt;a class="nav-tab" href="#tab-next"&amp;gt;NEXT.JS&amp;lt;/a&amp;gt;&amp;lt;a class="nav-tab"
            href="#tab-typescript"&amp;gt;TYPESCRIPT&amp;lt;/a&amp;gt;&amp;lt;a class="nav-tab" href="#tab-vite"&amp;gt;VITE&amp;lt;/a&amp;gt;&amp;lt;span
            class="nav-tab-slider"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/sectio&amp;gt;
&amp;lt;main class="main"&amp;gt;
    &amp;lt;section class="slider" id="tab-svelte"&amp;gt;
        &amp;lt;h1&amp;gt;SVELTE&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;another frontend JS framework&amp;lt;/h2&amp;gt;
    &amp;lt;/section&amp;gt;
    &amp;lt;section class="slider" id="tab-esbuild"&amp;gt;
        &amp;lt;h1&amp;gt;ESBUILD&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;an extremely fast JavaScript bundler&amp;lt;/h2&amp;gt;
    &amp;lt;/section&amp;gt;
    &amp;lt;section class="slider" id="tab-next"&amp;gt;
        &amp;lt;h1&amp;gt;NEXT.JS&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;framework for Production&amp;lt;/h2&amp;gt;
    &amp;lt;/section&amp;gt;
    &amp;lt;section class="slider" id="tab-typescript"&amp;gt;
        &amp;lt;h1&amp;gt;TYPESCRIPT&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;giving you better tooling at any scale&amp;lt;/h2&amp;gt;
    &amp;lt;/section&amp;gt;
    &amp;lt;section class="slider" id="tab-vite"&amp;gt;
        &amp;lt;h1&amp;gt;VITE&amp;lt;/h1&amp;gt;
        &amp;lt;h2&amp;gt;a frontend build tool&amp;lt;/h2&amp;gt;
    &amp;lt;/section&amp;gt;
&amp;lt;/main&amp;gt;
&amp;lt;canvas class="background"&amp;gt;&amp;lt;/canvas&amp;gt;
&amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;CSS Code &lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;{
margin: 0;
padding: 0;
box-sizing: border-box;
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;body {&lt;br&gt;
    font-family: "ROBOTO", sans-serif;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav,&lt;br&gt;
.slider {&lt;br&gt;
    display: flex;&lt;br&gt;
    flex-direction: column;&lt;br&gt;
    justify-content: center;&lt;br&gt;
    align-items: center;&lt;br&gt;
    height: 100vh;&lt;br&gt;
    position: relative;&lt;br&gt;
    background-color: #1e1f26;&lt;br&gt;
    text-align: center;&lt;br&gt;
    padding: 0 2em;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav h1,&lt;br&gt;
.slider h1 {&lt;br&gt;
    font-family: "Josefin Sans", sans-serif;&lt;br&gt;
    font-size: 5vw;&lt;br&gt;
    margin: 0;&lt;br&gt;
    padding-bottom: 0.5rem;&lt;br&gt;
    letter-spacing: 0.5rem;&lt;br&gt;
    color: #03dac6;&lt;br&gt;
    transition: all 0.3s ease;&lt;br&gt;
    z-index: 3;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;h1:hover {&lt;br&gt;
    transform: translate3d(0, -10px, 22px);&lt;br&gt;
    color: #ff0266;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.slider h2 {&lt;br&gt;
    font-size: 2vw;&lt;br&gt;
    letter-spacing: 0.3rem;&lt;br&gt;
    font-family: "ROBOTO", sans-serif;&lt;br&gt;
    font-weight: 300;&lt;br&gt;
    color: #faebd7;&lt;br&gt;
    z-index: 4;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;h3.span {&lt;br&gt;
    font-size: 2vw;&lt;br&gt;
    letter-spacing: 0.7em;&lt;br&gt;
    font-family: "ROBOTO", sans-serif;&lt;br&gt;
    font-weight: 300;&lt;br&gt;
    color: #faebd7;&lt;br&gt;
    z-index: 4;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;span:hover {&lt;br&gt;
    color: #ff0266;&lt;br&gt;
    font-weight: 500;&lt;br&gt;
    font-size: 2.2vw;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;a {&lt;br&gt;
    text-decoration: none;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-container {&lt;br&gt;
    display: flex;&lt;br&gt;
    flex-direction: row;&lt;br&gt;
    position: absolute;&lt;br&gt;
    bottom: 0;&lt;br&gt;
    width: 100%;&lt;br&gt;
    height: 75px;&lt;br&gt;
    box-shadow: 20px 20px 50px rgba(0, 0, 0, 0.5);&lt;br&gt;
    background: #1e1f26;&lt;br&gt;
    z-index: 10;&lt;br&gt;
    transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-container--top-first {&lt;br&gt;
    position: fixed;&lt;br&gt;
    top: 75px;&lt;br&gt;
    transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-container--top-second {&lt;br&gt;
    position: fixed;&lt;br&gt;
    top: 0;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-tab {&lt;br&gt;
    display: flex;&lt;br&gt;
    justify-content: center;&lt;br&gt;
    align-items: center;&lt;br&gt;
    flex: 1;&lt;br&gt;
    color: #03dac6;&lt;br&gt;
    letter-spacing: 0.1rem;&lt;br&gt;
    transition: all 0.5s ease;&lt;br&gt;
    font-size: 2vw;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-tab:hover {&lt;br&gt;
    color: #1e1f26;&lt;br&gt;
    background: #03dac6;&lt;br&gt;
    transition: all 0.5s ease;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.nav-tab-slider {&lt;br&gt;
    position: absolute;&lt;br&gt;
    bottom: 0;&lt;br&gt;
    width: 0;&lt;br&gt;
    height: 2px;&lt;br&gt;
    background: #03dac6;&lt;br&gt;
    transition: left 0.3s ease;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.background {&lt;br&gt;
    position: absolute;&lt;br&gt;
    height: 90vh;&lt;br&gt;
    top: 0;&lt;br&gt;
    bottom: 0;&lt;br&gt;
    left: 0;&lt;br&gt;
    right: 0;&lt;br&gt;
    z-index: auto;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; (min-width: 800px) {&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.nav h1,
.slider h1 {
    font-size: 5vw;
}

.nav h2,
.slider h2 {
    font-size: 3vw;
}

.nav-tab {
    font-size: 3vw;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; screen only (min-width: 360px) {&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.nav h1,
.slider h1 {
    font-size: 8vw;
}

.nav h2,
.slider h2 {
    font-size: 2vw;
    letter-spacing: 0.2vw;
}

.nav-tab {
    font-size: 1.2vw;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;.background {&lt;br&gt;
    position: absolute;&lt;br&gt;
    height: 100vh;&lt;br&gt;
    top: 0;&lt;br&gt;
    bottom: 0;&lt;br&gt;
    left: 0;&lt;br&gt;
    right: 0;&lt;br&gt;
    z-index: 0;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span {&lt;br&gt;
    color: #faebd7;&lt;br&gt;
    text-shadow: 0 0 0 #faebd7;&lt;br&gt;
    -webkit-animation: loading 1s ease-in-out infinite alternate;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;@-webkit-keyframes loading {&lt;br&gt;
    to {&lt;br&gt;
        text-shadow: 20px 0 70px #ff0266;&lt;br&gt;
        color: #ff0266;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(2) {&lt;br&gt;
    -webkit-animation-delay: 0.1s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(3) {&lt;br&gt;
    -webkit-animation-delay: 0.2s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(4) {&lt;br&gt;
    -webkit-animation-delay: 0.3s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(5) {&lt;br&gt;
    -webkit-animation-delay: 0.4s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(6) {&lt;br&gt;
    -webkit-animation-delay: 0.5s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(7) {&lt;br&gt;
    -webkit-animation-delay: 0.6s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(8) {&lt;br&gt;
    -webkit-animation-delay: 0.7s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(9) {&lt;br&gt;
    -webkit-animation-delay: 0.8s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(10) {&lt;br&gt;
    -webkit-animation-delay: 0.9s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(11) {&lt;br&gt;
    -webkit-animation-delay: 1s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(12) {&lt;br&gt;
    -webkit-animation-delay: 1.1s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(13) {&lt;br&gt;
    -webkit-animation-delay: 1.2s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(14) {&lt;br&gt;
    -webkit-animation-delay: 1.3s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(15) {&lt;br&gt;
    -webkit-animation-delay: 1.4s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(16) {&lt;br&gt;
    -webkit-animation-delay: 1.5s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(17) {&lt;br&gt;
    -webkit-animation-delay: 1.6s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(18) {&lt;br&gt;
    -webkit-animation-delay: 1.7s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(19) {&lt;br&gt;
    -webkit-animation-delay: 1.8s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(20) {&lt;br&gt;
    -webkit-animation-delay: 1.9s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(21) {&lt;br&gt;
    -webkit-animation-delay: 2s;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.loader span:nth-child(22) {&lt;br&gt;
    -webkit-animation-delay: 2.1s;&lt;br&gt;
}&lt;br&gt;
`&lt;br&gt;
JavaScript &lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
/* Credit and Thanks:&lt;br&gt;
Matrix - Particles.js;&lt;br&gt;
SliderJS - Ettrics;&lt;br&gt;
Design - Sara Mazal Web;&lt;br&gt;
Fonts - Google Fonts&lt;br&gt;
*/&lt;/p&gt;

&lt;p&gt;window.onload = function () {&lt;br&gt;
    Particles.init({&lt;br&gt;
        selector: ".background"&lt;br&gt;
    });&lt;br&gt;
};&lt;br&gt;
const particles = Particles.init({&lt;br&gt;
    selector: ".background",&lt;br&gt;
    color: ["#03dac6", "#ff0266", "#000000"],&lt;br&gt;
    connectParticles: true,&lt;br&gt;
    responsive: [&lt;br&gt;
        {&lt;br&gt;
            breakpoint: 768,&lt;br&gt;
            options: {&lt;br&gt;
                color: ["#faebd7", "#03dac6", "#ff0266"],&lt;br&gt;
                maxParticles: 43,&lt;br&gt;
                connectParticles: false&lt;br&gt;
            }&lt;br&gt;
        }&lt;br&gt;
    ]&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;class NavigationPage {&lt;br&gt;
    constructor() {&lt;br&gt;
        this.currentId = null;&lt;br&gt;
        this.currentTab = null;&lt;br&gt;
        this.tabContainerHeight = 70;&lt;br&gt;
        this.lastScroll = 0;&lt;br&gt;
        let self = this;&lt;br&gt;
        $(".nav-tab").click(function () {&lt;br&gt;
            self.onTabClick(event, $(this));&lt;br&gt;
        });&lt;br&gt;
        $(window).scroll(() =&amp;gt; {&lt;br&gt;
            this.onScroll();&lt;br&gt;
        });&lt;br&gt;
        $(window).resize(() =&amp;gt; {&lt;br&gt;
            this.onResize();&lt;br&gt;
        });&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;onTabClick(event, element) {
    event.preventDefault();
    let scrollTop =
        $(element.attr("href")).offset().top - this.tabContainerHeight + 1;
    $("html, body").animate({ scrollTop: scrollTop }, 600);
}

onScroll() {
    this.checkHeaderPosition();
    this.findCurrentTabSelector();
    this.lastScroll = $(window).scrollTop();
}

onResize() {
    if (this.currentId) {
        this.setSliderCss();
    }
}

checkHeaderPosition() {
    const headerHeight = 75;
    if ($(window).scrollTop() &amp;gt; headerHeight) {
        $(".nav-container").addClass("nav-container--scrolled");
    } else {
        $(".nav-container").removeClass("nav-container--scrolled");
    }
    let offset =
        $(".nav").offset().top +
        $(".nav").height() -
        this.tabContainerHeight -
        headerHeight;
    if (
        $(window).scrollTop() &amp;gt; this.lastScroll &amp;amp;&amp;amp;
        $(window).scrollTop() &amp;gt; offset
    ) {
        $(".nav-container").addClass("nav-container--move-up");
        $(".nav-container").removeClass("nav-container--top-first");
        $(".nav-container").addClass("nav-container--top-second");
    } else if (
        $(window).scrollTop() &amp;lt; this.lastScroll &amp;amp;&amp;amp;
        $(window).scrollTop() &amp;gt; offset
    ) {
        $(".nav-container").removeClass("nav-container--move-up");
        $(".nav-container").removeClass("nav-container--top-second");
        $(".nav-container-container").addClass("nav-container--top-first");
    } else {
        $(".nav-container").removeClass("nav-container--move-up");
        $(".nav-container").removeClass("nav-container--top-first");
        $(".nav-container").removeClass("nav-container--top-second");
    }
}

findCurrentTabSelector(element) {
    let newCurrentId;
    let newCurrentTab;
    let self = this;
    $(".nav-tab").each(function () {
        let id = $(this).attr("href");
        let offsetTop = $(id).offset().top - self.tabContainerHeight;
        let offsetBottom =
            $(id).offset().top + $(id).height() - self.tabContainerHeight;
        if (
            $(window).scrollTop() &amp;gt; offsetTop &amp;amp;&amp;amp;
            $(window).scrollTop() &amp;lt; offsetBottom
        ) {
            newCurrentId = id;
            newCurrentTab = $(this);
        }
    });
    if (this.currentId != newCurrentId || this.currentId === null) {
        this.currentId = newCurrentId;
        this.currentTab = newCurrentTab;
        this.setSliderCss();
    }
}

setSliderCss() {
    let width = 0;
    let left = 0;
    if (this.currentTab) {
        width = this.currentTab.css("width");
        left = this.currentTab.offset().left;
    }
    $(".nav-tab-slider").css("width", width);
    $(".nav-tab-slider").css("left", left);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;new NavigationPage();&lt;br&gt;
  /* Credit and Thanks:&lt;br&gt;
Matrix - Particles.js;&lt;br&gt;
SliderJS - Ettrics;&lt;br&gt;
Design - Sara Mazal Web;&lt;br&gt;
Fonts - Google Fonts&lt;br&gt;
*/&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to convert HTML To React Component</title>
      <dc:creator>Farhad Rahmani</dc:creator>
      <pubDate>Sat, 19 Nov 2022 06:54:31 +0000</pubDate>
      <link>https://forem.com/farhadi/how-to-convert-html-to-react-component-1dpn</link>
      <guid>https://forem.com/farhadi/how-to-convert-html-to-react-component-1dpn</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr5apg1pwiogjhni2yh4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr5apg1pwiogjhni2yh4.jpg" alt="Image description" width="400" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just Simply Copy your HTML CODE into this website &lt;a href="https://magic.reactjs.net/htmltojsx.htm"&gt;https://magic.reactjs.net/htmltojsx.htm&lt;/a&gt; This Site will Generate JSX Code Copy from website paste into your React project files.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>html</category>
    </item>
  </channel>
</rss>
