<?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: Danial Habib</title>
    <description>The latest articles on Forem by Danial Habib (@codingcss).</description>
    <link>https://forem.com/codingcss</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%2F1077232%2F3b048c5a-675a-4e47-98d1-b6bcef78c538.png</url>
      <title>Forem: Danial Habib</title>
      <link>https://forem.com/codingcss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codingcss"/>
    <language>en</language>
    <item>
      <title>TikTok usage is starting to slow — is TikTok Shop to blame?</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Sun, 21 Jan 2024 13:01:29 +0000</pubDate>
      <link>https://forem.com/codingcss/tiktok-usage-is-starting-to-slow-is-tiktok-shop-to-blame-3c4c</link>
      <guid>https://forem.com/codingcss/tiktok-usage-is-starting-to-slow-is-tiktok-shop-to-blame-3c4c</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%2Fsh6n73psvpoeeyfyrqw7.png" 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%2Fsh6n73psvpoeeyfyrqw7.png" alt="TikTok Shop" width="800" height="532"&gt;&lt;/a&gt; Image Credits: Mateusz Slodkowski/SOPA Images / Getty Images&lt;/p&gt;




&lt;p&gt;TikTok may have been the world's top app by downloads and consumer spending in 2023, but it was not the top by actual usage. Last year, Facebook again maintained its №1 position by monthly active users, followed by other Meta-owned apps WhatsApp, Instagram, and Messenger - all of which were ahead of TikTok at №5. Now new data indicates that TikTok's growth has started to slow, begging the question of whether the app's move into e-commerce via TikTok Shop is to blame.&lt;/p&gt;

&lt;p&gt;According to new data from market intelligence firm &lt;a href="https://sensortower.com/"&gt;Sensor Tower&lt;/a&gt;, while TikTok's growth remains positive, that growth is decelerating. In 2022, TikTok's monthly active users grew an average of 12% year-over-year per quarter, but this figure fell to 3% year-over-year per quarter in 2023.&lt;/p&gt;

&lt;p&gt;The change comes on the heels of &lt;a href="https://newsroom.tiktok.com/en-us/introducing-tiktok-shop"&gt;TikTok's launch&lt;/a&gt; of TikTok Shop in the U.S.&lt;/p&gt;

&lt;p&gt;The video app &lt;a href="https://www.semafor.com/article/11/11/2022/tiktok-launches-e-commerce-feature-in-app-to-compete-with-amazon"&gt;began testing Shop in the U.S. in November 2022&lt;/a&gt; and those tests expanded at the beginning of last year as more brands came on board, including PacSun, Revolve, Willow Boutique, and beauty brand KimChi Chic, among others. While the Shop didn't "officially" launch in the U.S. until September 2023, it was only one of several efforts to translate the influence of TikTok videos - essentially the whole "&lt;a href="https://www.tiktok.com/discover/tiktok-made-me-buy-it?lang=en"&gt;TikTok made me buy it&lt;/a&gt;" meme - into real-world sales.&lt;/p&gt;

&lt;p&gt;Last summer in the U.K., for example, TikTok experimented with an in-app shopping section called "Trendy Beat," which offered products sold by TikTok parent Byte Dance. TikTok also offers an affiliate program that allows creators to earn commissions from products, as &lt;a href="https://apnews.com/article/tiktok-online-shopping-65470c109c80408f05875d8678fe5072"&gt;the AP&lt;/a&gt; and &lt;a href="https://www.businessinsider.com/tiktok-quietly-rolling-out-affiliate-program-us-creators-shop-2023-4"&gt;others&lt;/a&gt; have reported. &lt;/p&gt;

&lt;p&gt;But sellers' embrace of the shopping platform has started to lead to complaints, &lt;a href="https://www.businessinsider.com/tiktok-shop-users-complain-its-making-the-app-dystopian-2023-11"&gt;as Business Insider noted in November&lt;/a&gt;, with some lamenting that TikTok Shop was turning the app into an "ad-filled wasteland" and a "dystopian" space. Elsewhere on the web, Redditors have been debating whether &lt;a href="https://www.reddit.com/r/tiktokgossip/comments/13kbsk6/the_tiktok_shop_has_ruined_tiktok/"&gt;TikTok Shop has "ruined" the app&lt;/a&gt;, which is now filled with "people dropshipping/selling cheap products," as one Reddit user put it. &lt;/p&gt;

&lt;p&gt;"Personally, I'm starting to get really annoyed by how almost every other video on my [For You Page] is someone overhyping a product from the Shop feature to try to get it to go viral and make a lot of commissions," wrote Redditor u/megg-salad-sammich in September. "It's great that it's a new avenue for creators to make money, but I find myself scrolling less and less because I know pretty much every video is just trying to get me to buy some random thing," they said.&lt;/p&gt;

&lt;p&gt;A search across Reddit finds many more threads complaining of the same thing throughout last year - saying how TikTok is "&lt;a href="https://www.reddit.com/r/TikTok/comments/1780ie4/why_so_many_ads_now_super_annoying/"&gt;annoying&lt;/a&gt;" now because of TikTok Shop and seeing ads every few videos is a frustrating experience. &lt;/p&gt;

&lt;p&gt;While TikTok users are adapting to their favorite social network turning into an online mall, TikTok's Shop Seller app, which powers its e-commerce initiative, has grown. &lt;/p&gt;

&lt;p&gt;Sensor Tower data indicates the Shop Seller's growth has been "robust" since the fourth quarter of 2022, rising 230% year-over-year as of the fourth quarter of 2023. However, the app has only a fraction of TikTok's active user base - currently 1.4 billion as of the first quarter of this year. Shop Seller, meanwhile, has just around 6 million monthly active users, the firm reported.&lt;/p&gt;

&lt;p&gt;Instagram could ultimately benefit from the user frustration around TikTok Shop, given that the Meta-owned app removed its own Shop tab in January of last year and killed off live shopping in March. This could potentially make it more acceptable to those wanting to avoid more direct calls to action to shop in-app.&lt;/p&gt;

&lt;p&gt;Meta's move was triggered by broader industry trends, which seem to not bode well for TikTok Shop's future. Live shopping had blossomed during the pandemic, and e-commerce sales skyrocketed. But when things returned to normal, social commerce (including live shopping) was found to have made up only around 5% of total e-commerce sales in the U.S. as of 2022. That seemed to indicate that U.S. consumers may not have been as primed to shop directly from videos, though they &lt;a href="https://www.theatlantic.com/technology/archive/2024/01/stanley-cups-valentines-day-target-starbucks/677190/?utm_source=feed"&gt;are obviously still influenced by online trends.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;However, users aren't yet so upset with TikTok Shop as to abandon the app for Instagram Reels.&lt;/p&gt;

&lt;p&gt;Sensor Tower found that Instagram's monthly active user growth has been relatively consistent at "mid-single digits" and hasn't been significantly impacted negatively or positively since the launch of the TikTok Shop Seller app.&lt;/p&gt;

&lt;p&gt;Data from another firm, App figures, also supports this conclusion but adds that, although TikTok's revenue has been growing, its downloads have been stagnant or dropping more than growing - a trend that's been going on for over a year now, including both globally and in the U.S.&lt;/p&gt;

&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%2Fz4wyugkqv2m8jnbw3i2a.png" 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%2Fz4wyugkqv2m8jnbw3i2a.png" alt="TikTok's" width="640" height="342"&gt;&lt;/a&gt; Image Credits: Appfigures&lt;/p&gt;

&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%2Foiuvp2i64v3agxfsqjvt.png" 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%2Foiuvp2i64v3agxfsqjvt.png" alt="TikTok's" width="640" height="342"&gt;&lt;/a&gt; Image Credits: Appfigures&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>news</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>6 Amazing Headers for Freelancer/Agency Website</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Mon, 15 Jan 2024 16:58:44 +0000</pubDate>
      <link>https://forem.com/codingcss/6-amazing-headers-for-freelanceragency-website-1cgd</link>
      <guid>https://forem.com/codingcss/6-amazing-headers-for-freelanceragency-website-1cgd</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%2Fhc0sbe9s7e4jl557sate.png" 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%2Fhc0sbe9s7e4jl557sate.png" alt="web template design" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&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%2Fzyyx010ndkjzb9x6lbze.png" 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%2Fzyyx010ndkjzb9x6lbze.png" alt="web template design" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&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%2Fn47jokivm8oijgk51zfe.png" 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%2Fn47jokivm8oijgk51zfe.png" alt="web template design" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&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%2F6xp8ezxb32ad6zmli115.png" 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%2F6xp8ezxb32ad6zmli115.png" alt="web template design" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&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%2Fxlcegsqfaccijqorjtmb.png" 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%2Fxlcegsqfaccijqorjtmb.png" alt="web template design" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&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%2Foutdl83lddaxqen891uo.png" 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%2Foutdl83lddaxqen891uo.png" alt="web template design" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design link : &lt;a href="https://www.figma.com/community/file/1328662399939962106"&gt;https://www.figma.com/community/file/1328662399939962106&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>design</category>
      <category>react</category>
    </item>
    <item>
      <title>SaaS Landing Page</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Sun, 14 Jan 2024 15:24:22 +0000</pubDate>
      <link>https://forem.com/codingcss/saas-landing-page-4nba</link>
      <guid>https://forem.com/codingcss/saas-landing-page-4nba</guid>
      <description>&lt;p&gt;do you want design free then contact me&lt;/p&gt;

&lt;p&gt;📩 Simply comment your email id and send me a &lt;a href="https://www.linkedin.com/in/danialhabib/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; connection request, and I'll promptly provide you with access to the design.&lt;/p&gt;

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

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

</description>
      <category>webdev</category>
      <category>design</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Face Hop animation using CSS and Js</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Sun, 07 Jan 2024 12:03:49 +0000</pubDate>
      <link>https://forem.com/codingcss/face-hop-animation-using-css-and-js-3co0</link>
      <guid>https://forem.com/codingcss/face-hop-animation-using-css-and-js-3co0</guid>
      <description>&lt;p&gt;Here is the cool Face Hop animation using CSS and Js. &lt;/p&gt;

&lt;h2&gt;
  
  
  HTML
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Here is the HTML part&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;link rel="stylesheet" href="style.css"&amp;gt;
    &amp;lt;title&amp;gt;Face Hop Animation using CSS and Js&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class="container"&amp;gt; 
        &amp;lt;div class="shadow"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class="squish"&amp;gt;
          &amp;lt;h1 data-3d-text&amp;gt; &amp;lt;/h1&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class="particles"&amp;gt;
          &amp;lt;div class="floor"&amp;gt;&amp;lt;/div&amp;gt;
          &amp;lt;div class="air"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
       &amp;lt;/div&amp;gt; 

       &amp;lt;script type="module" src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Here, the script type is the module&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  CSS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Now, let’s add some CSS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@charset "UTF-8";
@import url("https://cdn.skypack.dev/that-3d-text-library/lib/styles.css");
@import url("https://fonts.googleapis.com/css2?family=Bakbak+One&amp;amp;family=Caprasimo&amp;amp;family=Chonburi&amp;amp;family=Graduate&amp;amp;family=Righteous&amp;amp;display=swap");
:root {
  --font-size: clamp(100px, 40vmin, 200px);
}

html, body {
  overflow: hidden;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  position: relative;
}

body {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  perspective: 700px;
}
body::after {
  position: absolute;
  background: linear-gradient(0deg, rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0));
  width: 100%;
  height: 45%;
  top: 0;
  left: 0;
  z-index: 1;
}
body &amp;gt; * {
  z-index: 2;
}

.container, .squish {
  transform-style: preserve-3d;
  position: relative;
}

.container {
  margin-bottom: calc(50vh - var(--font-size));
}

.squish {
  z-index: 2;
}

.shadow {
  transform-style: flat;
  z-index: 1;
  transform: translatex(-10%) translatez(-30px);
  position: absolute;
  bottom: calc(var(--font-size) * 0.25);
  left: 0;
  width: 120%;
  height: calc(var(--font-size) * 0.15);
  opacity: 1;
  background-color: var(--shadow-color, black);
  border-radius: 100vmin;
  filter: blur(25px);
}

h1 {
  --layers: 10;
  --depth: 30;
  font-size: var(--font-size);
}

.particles {
  position: absolute;
  left: 50%;
  z-index: 1;
  transform: translatez(-50px);
  bottom: calc(var(--font-size) * 0.3);
}
.particles .floor div,
.particles .air div {
  transform-style: preserve-3d;
  display: block;
  position: absolute;
  top: 0;
  left: 0;
}
.particles .floor div::after,
.particles .air div::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  transform: translate(-50%, -50%);
  border-radius: 50%;
}
.particles .floor {
  transform: rotatex(-60deg);
}
.particles .floor div::after {
  border: solid 1.5vmin var(--floor-particle, white);
  width: 8vmin;
  height: 8vmin;
}
.particles .air div::after {
  content: "★";
  color: var(--air-particle, white);
  font-size: 10vmin;
}
.particles .air div:nth-child(2n)::after {
  color: var(--air-particle-alt, hotpink);
}
.particles .air .p0::after {
  content: "●";
}
.particles .air .p1::after {
  content: "✖︎";
}
.particles .air .p2::after {
  content: "◼︎";
}
.particles .air .p3::after {
  content: "▲";
}

.style-0 {
  --color: white;
  --color-front: black;
  --floor-particle: black;
  --air-particle: black;
  --air-particle-alt: white;
  background-color: yellow;
}
.style-0 [data-mod-3] {
  --color: black;
}

.style-2 {
  --color: #3066BE;
  --color-front: #6D9DC5;
  --floor-particle: transparent;
  --air-particle: transparent;
  --air-particle-alt: transparent;
  background-color: #6D9DC5;
  background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 100 100"%3E%3Cg fill-rule="evenodd"%3E%3Cg fill="%23ffffff" fill-opacity="0.4"%3E%3Cpath opacity=".5" d="M96 95h4v1h-4v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9zm-1 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9z"/%3E%3Cpath d="M6 5V0H5v5H0v1h5v94h1V6h94V5H6z"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E'), radial-gradient(#6D9DC5, #3066BE);
}
.style-2::after {
  content: none;
}
.style-2 .shadow {
  display: none;
}
.style-2 .front {
  text-shadow: -2px -2px 0 #fff, 2px -2px 0 #fff, -2px 2px 0 #fff, 2px 2px 0 #fff;
}

.style-3 {
  --color: #B79492;
  --color-front: #EAE1DF;
  --floor-particle: #B79492;
  --air-particle: orange;
  --air-particle-alt: #B79492;
  --background-color: #917C78;
}

.style-4 {
  --color: #DB504A;
  --color-front: #E3B505;
  --floor-particle: #E3B505;
  --air-particle: #DB504A;
  --air-particle-alt: #E3B505;
  background-color: #084C61;
}

.style-5 {
  background: repeating-linear-gradient(45deg, red, red 10vmin, white 10vmin, white 20vmin);
  --color: red;
  --color-front: white;
  --floor-particle: transparent;
  --air-particle: transparent;
  --air-particle-alt: transparent;
}
.style-5::after {
  content: none;
}

.style-6 {
  --color: #424C55;
  --color-front: #E3B505;
  --floor-particle: #E3B505;
  --air-particle: #424C55;
  --air-particle-alt: #E3B505;
  background-color: #D1CCDC;
}

.style-7 {
  --color: #6CCFF6;
  --color-front: #001011;
  --floor-particle: #FFFFFC;
  --air-particle: #FFFFFC;
  --air-particle-alt: #FFFFFC;
  background-color: #00393D;
}

.style-8 {
  --color: #F9DC5C;
  --color-front: #ED254E;
  --floor-particle: #ED254E;
  --air-particle: #ED254E;
  --air-particle-alt: #F9DC5C;
  background-color: #F4FFFD;
}

.style-9 {
  background-color: #42E2B8;
  background-image: url('data:image/svg+xml,%3Csvg fill="%23F3DFBF" width="100" height="100" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M8 16c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8zm0-2c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zm33.414-6l5.95-5.95L45.95.636 40 6.586 34.05.636 32.636 2.05 38.586 8l-5.95 5.95 1.414 1.414L40 9.414l5.95 5.95 1.414-1.414L41.414 8zM40 48c4.418 0 8-3.582 8-8s-3.582-8-8-8-8 3.582-8 8 3.582 8 8 8zm0-2c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zM9.414 40l5.95-5.95-1.414-1.414L8 38.586l-5.95-5.95L.636 34.05 6.586 40l-5.95 5.95 1.414 1.414L8 41.414l5.95 5.95 1.414-1.414L9.414 40z"  fill-rule="evenodd"/%3E%3C/svg%3E');
  --color: #F3DFBF;
  --color-front: #EB8A90;
  --floor-particle: #EB8A90;
  --air-particle: #EB8A90;
  --air-particle-alt: #F3DFBF;
}
.style-9::after {
  content: none;
}

.style-10 {
  --color: #138A36;
  --color-front: #34403A;
  --floor-particle: #ffffff;
  --air-particle: #ffffff;
  --air-particle-alt: #ffffff;
  background-color: #18FF6D;
}

.style-11 {
  --color: #FFA69E;
  --color-front: #DDFFF7;
  --floor-particle: #AA4465;
  --air-particle: #AA4465;
  --air-particle-alt: #462255;
  background-color: #93E1D8;
}

.style-12 {
  --color: #64B6AC;
  --color-front: #FEE9E1;
  --floor-particle: #64B6AC;
  --air-particle: #64B6AC;
  --air-particle-alt: #64B6AC;
  background-color: #FEE9E1;
}

.style-13 {
  --color: #F4D58D;
  --color-front: #BF0603;
  --floor-particle: #708D81;
  --air-particle: #708D81;
  --air-particle-alt: #001427;
  background-color: #8D0801;
}

.style-14 {
  --color: #BB4430;
  --color-front: #7EBDC2;
  --floor-particle: #7EBDC2;
  --air-particle: #BB4430;
  --air-particle-alt: #7EBDC2;
  background-color: #231F20;
}

.style-15 {
  background: repeating-radial-gradient(circle farthest-side, #F487B6, #F487B6 10vmin, #CC59D2 10vmin, #CC59D2 20vmin);
  --color: #FDE12D;
  --color-front: #9046CF;
  --floor-particle: transparent;
  --air-particle: #FDE12D;
  --air-particle-alt: #FFF3F0;
}
.style-15::after {
  content: none;
}

.font-0 {
  font-family: "Bakbak One", cursive;
}

.font-1 {
  font-family: "Graduate", cursive;
}

.font-2 {
  font-family: "Chonburi", cursive;
}

.font-3 {
  font-family: "Righteous", cursive;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;p&gt;Let’s add our JavaScript module&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Those3DTexts } from "https://cdn.skypack.dev/that-3d-text-library";
import { gsap } from "https://cdn.skypack.dev/gsap";
import { MotionPathPlugin } from "https://cdn.skypack.dev/gsap/MotionPathPlugin";

gsap.registerPlugin(MotionPathPlugin);

const letters = ['', '', '', '', '', '', '', '', '', ''];

new Those3DTexts();

const STYLE_COUNT = 16;
const FONT_COUNT = 1;
const BOUNCE_DURATION = 1.3;
const BOUNCE_HEIGHT = -90;
const BOUNCE_WOBBLE = 0.75; // lower = more wobble
const FLOOR_PARTICLE_COUNT = 1;
const AIR_PARTICLE_COUNT =4;

const LETTER = document.querySelector('h1')
const BODY = document.body

let count = 0;

BODY.classList.add('style-0');
LETTER.classList.add('font-0');

const setNextStyle = () =&amp;gt; {

  BODY.classList.remove(`style-${count % (STYLE_COUNT)}`);
  LETTER.classList.remove(`font-${count % (FONT_COUNT)}`);
  count++;
  BODY.classList.add(`style-${count % (STYLE_COUNT)}`);
  LETTER.classList.add(`font-${count % (FONT_COUNT)}`);
}

const particles = {
  floor: [],
  air: []
}

const setupParticles = () =&amp;gt; {

  const floor = document.querySelector('.floor');
  const air = document.querySelector('.air');

  for(let i = 0; i &amp;lt; FLOOR_PARTICLE_COUNT; i++) {
    let particle = document.createElement('div');
    floor.appendChild(particle)
    particles.floor.push(particle)
  }

  for(let i = 0; i &amp;lt; AIR_PARTICLE_COUNT; i++) {
    let particle = document.createElement('div');
    air.appendChild(particle)
    particles.air.push(particle)
  }
}

setupParticles()


let letterCount = 0

const nextLetter = () =&amp;gt; {
  letterCount ++;
  const letterElements = LETTER.querySelectorAll('span') 
  letterElements.forEach(l =&amp;gt; l.innerText = letters[letterCount % letters.length])
}

const glitch = () =&amp;gt; {
  gsap.to('h1 span', {keyframes: [{opacity: 'random(0, 1)', xPercent: 'random(-10, 10)', opacity: 'random(0, 1)', yPercent: 'random(-10, 10)'}, {opacity: 'random(0, 1)', xPercent: 'random(-20, 20)', yPercent: 'random(-20, 20)'}, {opacity: 'random(0, 1)', xPercent: 'random(-10, 10)', yPercent: 'random(-10, 10)'}, {opacity: 1, xPercent: 0, yPercent: 0}], yoyo: true, ease: 'power4.inOut', duration: BOUNCE_DURATION * 0.5})
}

const bounce = () =&amp;gt; {
  const tl = gsap.timeline({defaults: { duration: BOUNCE_DURATION * 0.5}, onComplete: () =&amp;gt; {
    setNextStyle();  
    nextLetter();
    bounce();
  }})
  tl.set('.squish', {scaleY: BOUNCE_WOBBLE, scaleX: 1 + (1 - BOUNCE_WOBBLE)})
  tl.to('.squish', {scaleY: 1, scaleX: 1, duration: BOUNCE_DURATION * 0.6, ease: 'elastic'}, 0)
  tl.to(LETTER, {yPercent: BOUNCE_HEIGHT, ease: 'circ.out'}, 0)
  tl.to('.shadow', {opacity: 0.2, ease: 'circ.out'}, 0)
  tl.to(LETTER, {yPercent: 10, ease: 'circ.in'}, BOUNCE_DURATION * 0.5)
  tl.to('.shadow', {opacity: 1, ease: 'circ.in'}, BOUNCE_DURATION * 0.5)
  tl.to(LETTER, {rotationZ: "random(-150, 150)", rotationY: "random(-50, 50)", rotationX: "random(-50, 50)", duration: BOUNCE_DURATION, ease: 'none'}, 0)
  // tl.to('.squish', {scaleY: BOUNCE_WOBBLE, duration: 0.2}, '-=0.2')


  gsap.fromTo(particles.floor, {x: 0, y: 0,  scale: 1, opacity: 0.7}, {duration:  Math.min(BOUNCE_DURATION, 0.7 + Math.random() * 0.8), ease: 'power4.out', opacity: 0, scale: 2.5})

  particles.air.forEach((particle) =&amp;gt; {
    particle.setAttribute('class', `p${Math.floor(Math.random() * 4)}`)
    gsap.fromTo(particle, {opacity: 1, x: 0, y: 0, z: 0, scale: 'random(0.3, 1)'}, { 
      duration: Math.min(BOUNCE_DURATION, 0.3 + Math.random() * 0.3),
      ease: 'linear',
      opacity: 0,
      rotate: 'random(-100, 100)',
      x: 'random(-250, 250)',
      y: 'random(-200, -100)',
      z: 'random(-400, 400)',
    })
  })

  if(Math.random() &amp;gt; 0.95) glitch()
}

bounce();

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

&lt;/div&gt;



&lt;p&gt;**Boom! **There you have it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zkG133_G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kliubisl6cpeuqxam8u.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zkG133_G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kliubisl6cpeuqxam8u.gif" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;The Source Code of this project is available on CodePen – &lt;a href="https://codepen.io/codingcss/pen/WNmwMmq"&gt;Face Hop animation&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The Source Code of this project is available on GitHub – &lt;a href="https://github.com/codingcss/Face-Hop-animation"&gt;Face Hop animation&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Latest React Project</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Thu, 04 Jan 2024 20:47:55 +0000</pubDate>
      <link>https://forem.com/codingcss/my-latest-react-project-2c35</link>
      <guid>https://forem.com/codingcss/my-latest-react-project-2c35</guid>
      <description>&lt;p&gt;🏡 Thrilled to share my latest project, Adina Hotel Spa! &lt;br&gt;
🚀 Explore seamless Hotel Rooms. &lt;br&gt;
🌐I have crafted the completely Responsive Frontend with ReactJS, React Spinners, React Router, Tailwind CSS, React Icons, and Swiper. &lt;/p&gt;

&lt;p&gt;Here is the live project link.&lt;br&gt;
&lt;a href="https://adina-hotel-spa.netlify.app/"&gt;https://adina-hotel-spa.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Will appreciate any suggestions and feedback from seniors and experienced devs. &lt;/p&gt;

&lt;h1&gt;
  
  
  webdevelopment #react #project #javascript  🏠🖥
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Travel Agency Landing Page</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Mon, 01 Jan 2024 14:44:44 +0000</pubDate>
      <link>https://forem.com/codingcss/travel-agency-landing-page-3g61</link>
      <guid>https://forem.com/codingcss/travel-agency-landing-page-3g61</guid>
      <description>&lt;p&gt;&lt;a href="https://www.figma.com/@codingcss"&gt;Traveling&lt;/a&gt; is probably in a lot of yearly to-do lists and most of us are probably in the midst of planning our next big trip of the season.&lt;/p&gt;

&lt;p&gt;One thing we’d probably appreciate is an application that is both appealing and simple to use, giving you all the detailed and specific information of a travel destination alongside stunning photos that make you want to be there already. It would be even better if said app also lets you find hotels, plan accommodations and set itineraries all inside the app on a good-looking interface.&lt;/p&gt;

&lt;p&gt;On the other side of the fence, creating such apps might be challenging though not impossible. Many designers have attempted to create the idea of a travel app. And some of them are really good.&lt;/p&gt;

&lt;p&gt;App design making use of more widely-known UX patterns to produce smoother user flow between core functions of the application in the order they’re most often utilized.&lt;/p&gt;

&lt;p&gt;Redesign the visual appearance of the interface brings it in-line with modern smartphone applications.&lt;/p&gt;

&lt;p&gt;Implement additional features that provide the user with useful information. Also, it assists in planning their movements and keeping the user informed during them.&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://www.figma.com/@codingcss"&gt;web template&lt;/a&gt; is simple and clean but has all you need. Color palette is set in bright colors and white. The pack includes Slider, some type of blog pages, Maps, Events list, Calendar, Timeline list and Mansory gallery. Everything is editable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gfvfh4bh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grxzdpa5qj1dhkige24g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gfvfh4bh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grxzdpa5qj1dhkige24g.jpg" alt="Travel Agency Landing Page" width="800" height="2652"&gt;&lt;/a&gt; &lt;/p&gt;




&lt;h2&gt;
  
  
  Travel Agency Landing Page
&lt;/h2&gt;




&lt;h3&gt;
  
  
  Designed by : &lt;a href="https://www.figma.com/community/file/1323645036412828053/travel-agency-landing-page"&gt;https://www.figma.com/@codingcss&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Check out their incredible work ☝🏻
&lt;/h3&gt;




&lt;h3&gt;
  
  
  Additional, If you are looking for a professional website service, I’m here to bring your vision to life.
&lt;/h3&gt;




&lt;h3&gt;
  
  
  We offer in our service :
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Custom Web Design
&lt;/h4&gt;

&lt;h4&gt;
  
  
  2. Responsive Design
&lt;/h4&gt;

&lt;h4&gt;
  
  
  3. E-commerce Solutions
&lt;/h4&gt;




&lt;h3&gt;
  
  
  Subscribe My YouTube Channel: &lt;a href="https://www.youtube.com/channel/UC2ePmMbkHo_xi7RWmWmvdVA"&gt;LearnWithDanial&lt;/a&gt; to improve your Web Development skills and for useful tips and tutorials.
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/channel/UC2ePmMbkHo_xi7RWmWmvdVA" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>design</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Arithmetic Operators in JavaScript</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Fri, 29 Dec 2023 12:56:26 +0000</pubDate>
      <link>https://forem.com/codingcss/arithmetic-operators-in-javascript-1bnb</link>
      <guid>https://forem.com/codingcss/arithmetic-operators-in-javascript-1bnb</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/channel/UC2ePmMbkHo_xi7RWmWmvdVA" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pGheea2T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ybich226siy3d6ark2l8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pGheea2T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ybich226siy3d6ark2l8.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wtEqb1uS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gwfg2461n3xtpnws0qgp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wtEqb1uS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gwfg2461n3xtpnws0qgp.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vhgw4vGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzijqw6cevo4jbqbo0fp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vhgw4vGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzijqw6cevo4jbqbo0fp.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CBMbzIlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7h20ecvgwtc0xz80h5d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CBMbzIlH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7h20ecvgwtc0xz80h5d.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cKz6HUI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xnmfgs5nli5itylulk83.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cKz6HUI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xnmfgs5nli5itylulk83.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NexQ8ObR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b6415aixxuusqecq3kra.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NexQ8ObR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b6415aixxuusqecq3kra.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2b7Q0VmF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r3hl8d00zxl2vl5wqt9b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2b7Q0VmF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r3hl8d00zxl2vl5wqt9b.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dhgVyhlE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3jrd0ajs7g16cldzv1t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dhgVyhlE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3jrd0ajs7g16cldzv1t.jpg" alt="Arithmetic Operators in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>github</category>
    </item>
    <item>
      <title>Building an AI Image Classification Tool with Next.js</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Tue, 26 Dec 2023 16:26:34 +0000</pubDate>
      <link>https://forem.com/codingcss/building-an-ai-image-classification-tool-with-nextjs-470</link>
      <guid>https://forem.com/codingcss/building-an-ai-image-classification-tool-with-nextjs-470</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's digital age, artificial intelligence (AI) has become an integral part of various industries. One area where AI has made significant strides is in image classification. With the help of pre-trained machine learning models, developers can now create powerful AI tools that can accurately classify images based on their contents. In this article, we will explore how to build a simple AI image classification tool using Next.js, a popular JavaScript framework, and a pre-trained model called MobileNet.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to support my channel and see more great content, hit that subscribe button.😍&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/channel/UC2ePmMbkHo_xi7RWmWmvdVA" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Next.js?
&lt;/h2&gt;

&lt;p&gt;Before we dive into the details of building an AI image classification tool, let's take a moment to understand what Next.js is. Next.js is a React framework that allows developers to build server-side rendered (SSR) and static websites using JavaScript. It provides a wide range of features and optimizations, making it an ideal choice for building modern web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;To get started with our AI image classification tool, we first need to set up a Next.js project. If you haven't already installed Next.js, you can do so by running the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g create-next-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once Next.js is installed, we can create a new project by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app my-image-classification-tool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new directory called my-image-classification-tool with a basic Next.js project structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up TensorFlow.js
&lt;/h2&gt;

&lt;p&gt;Next, we need to set up TensorFlow.js, a JavaScript library that allows us to run machine learning models directly in the browser. To install TensorFlow.js, run the following command in your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @tensorflow/tfjs @tensorflow-models/mobilenet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that TensorFlow.js is installed, we can proceed to build our AI image classification tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the AI Image Classification Tool
&lt;/h2&gt;

&lt;p&gt;To build our AI image classification tool, we'll start by creating a new file called ImageClassifier.js in the pages directory. This file will contain the logic for loading the MobileNet model and classifying images. Here's an example implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useState, useEffect } from "react";
import * as tf from "@tensorflow/tfjs";
import * as mobilenet from "@tensorflow-models/mobilenet";

const ImageClassifier = () =&amp;gt; {
  const [model, setModel] = useState(null);

  useEffect(() =&amp;gt; {
    const loadModel = async () =&amp;gt; {
      const mobilenetModel = await mobilenet.load();
      setModel(mobilenetModel);
    };

    loadModel();
  }, []);

  const classifyImage = async (image) =&amp;gt; {
    if (model) {
      const predictions = await model.classify(image);
      console.log(predictions);
    }
  };

  return &amp;lt;div&amp;gt;{/* Add image classification form here */}&amp;lt;/div&amp;gt;;
};

export default ImageClassifier;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we import the necessary dependencies from TensorFlow.js and define a functional component called ImageClassifier. Inside the component, we use the useState and useEffect hooks to load the MobileNet model when the component mounts. We also define a classifyImage function that takes an image as input and uses the loaded model to classify the image.&lt;/p&gt;

&lt;p&gt;Next, we need to create a form in our ImageClassifier component where users can upload images for classification. Here's an example implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useState, useEffect } from "react";
import * as tf from "@tensorflow/tfjs";
import * as mobilenet from "@tensorflow-models/mobilenet";

const ImageClassifier = () =&amp;gt; {
  const [selectedImage, setSelectedImage] = useState(null);

  const handleImageUpload = (event) =&amp;gt; {
    const file = event.target.files[0];
    const imageUrl = URL.createObjectURL(file);
    setSelectedImage(imageUrl);
    classifyImage(imageUrl);
  };

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;input type="file" accept="image/*" onChange={handleImageUpload} /&amp;gt;
      {selectedImage &amp;amp;&amp;amp; &amp;lt;img src={selectedImage} alt="Selected" /&amp;gt;}
    &amp;lt;/div&amp;gt;
  );
};

export default ImageClassifier;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the updated code, we add an input field of type "file" where users can select an image for classification. We capture the selected image file and create a URL for it using URL.createObjectURL(). We then update the state with the selected image URL and call the classifyImage function to classify the image.&lt;/p&gt;

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

&lt;p&gt;In this article, we have explored how to build a simple AI image classification tool using Next.js and TensorFlow.js. We started by setting up a Next.js project and installing the necessary dependencies. Then, we implemented the logic for loading the MobileNet model and classifying images. Finally, we created a form where users can upload images for classification.&lt;/p&gt;

&lt;p&gt;With this AI image classification tool, you can now leverage the power of pre-trained machine learning models to classify images based on their contents. Whether you're building an e-commerce platform, a social media app, or any other application that involves image classification, Next.js and TensorFlow.js provide a powerful and flexible solution to meet your needs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Tips for styling React apps in JavaScript</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Fri, 22 Dec 2023 15:02:40 +0000</pubDate>
      <link>https://forem.com/codingcss/tips-for-styling-react-apps-in-javascript-57ag</link>
      <guid>https://forem.com/codingcss/tips-for-styling-react-apps-in-javascript-57ag</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OG2aec4U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scpgqttozk0gxvptb346.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OG2aec4U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scpgqttozk0gxvptb346.png" alt=" react and Javascript " width="752" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While many developers still use CSS to style their React apps, writing styles in JavaScript has become an increasingly popular practice as it gives all of the conveniences of CSS preprocessors without the need to learn a new language.&lt;/p&gt;

&lt;p&gt;Most CSS-in-JS libraries involve creating a JavaScript object of styles. As an example, this is what a style object looks like using my preferred library, Aphrodite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const styles = StyleSheet.create({
  container: {
    position: 'relative',
    width: 40,
    height: 50,
  },
)}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Variables
&lt;/h2&gt;

&lt;p&gt;Many best practices from SASS/LESS workflows still apply when using JavaScript styles. Colors fonts, and other constants can be stored as variables, which can be used like so:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// colors
const YELLOW = '#FFF83C';
// fonts
const BOLD = 700;
const TIMES_NEW_ROMAN = '"Times New Roman", Georgia, Serif';
// shared constants
const border = `1px solid ${YELLOW}`;
const styles = StyleSheet.create({
  textBox: {
    color: YELLOW,
    fontFamily: TIMES_NEW_ROMAN,
    fontWeight: BOLD,
    border, 
  },
)}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;New ES6 language features come are handy for sharing styles cleanly. In the above example, border is referenced with the object literal shorthand notation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Use JS objects in place of mixins
&lt;/h2&gt;

&lt;p&gt;The spread operator (…) is particularly useful when defining a commonly-used sequence of styles (in this example the rules needed to add an ellipsis to overflowing text).&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const textEllipsis = {
  whiteSpace: 'nowrap',
  textOverflow: 'ellipsis',
  overflow: 'hidden',
  width: '100%',
};
const styles = StyleSheet.create({
  textBox: {
    ...textEllipsis,
    backgroundColor: 'gray',
  },
)}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Create helper functions for more complex motifs
&lt;/h2&gt;

&lt;p&gt;More complicated sequences of rules can be abstracted behind helper functions. For example, when styling placeholder text, I use a function that returns an object of styles:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const getPlaceholderStyles = obj =&amp;gt; ({
  '::-webkit-input-placeholder': obj,
  '::-moz-placeholder': obj,
  ':-ms-input-placeholder': obj,
  ':-moz-placeholder': obj,
  ':placeholder': obj,
});
const styles = StyleSheet.create({
  input: getPlaceholderStyles({ color: RED }),
)}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Be consistent about naming schemes
&lt;/h2&gt;

&lt;p&gt;One of biggest advantages of writing styles in JavaScript is that classNames are scoped to each component by default. This means that conventions like BEM are unnecessary. Still, it is helpful to be consistent with a naming scheme for classNames. For example, I use container for the outermost className of each React component.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to support my channel and see more great content, hit that subscribe button.😍&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--bWZ0rhAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://yt3.googleusercontent.com/J7dxwM33TYr2hFpyOimDwd5i8k1jsjqjLeekOGtwU19bEiLIJB1quakBkSoDcK2nC5G7B3ea%3Ds900-c-k-c0x00ffffff-no-rj" height="800" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417/" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Welcome to Learn with Daniel

I'm Danial and on this channel, you'll find tutorials on HTML, CSS, and JavaScript, as well as creative UI/UX designs, CSS animations, and effects. Whether you're a beginner or an experienced developer, I hope you find my content helpful and enjoyable.

My goal is to inspire and empower design-focused frontend developers &amp;amp; designers.

Don't forget to subscribe to my channel and enable notifications by clicking the bell icon. That way, you'll be the first to know about new tutorials and resources as soon as they're released.

#html #javascript #css #coding #frondend #htmlcss #javascriptprojects #programming #css #trend #viral #program #shortsvideo #shorts #youtubeshort 

        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--GxB0J_hV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/28b0985e/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>programming</category>
    </item>
    <item>
      <title>Who’s That Pokémon? | JavaScript Project</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Thu, 21 Dec 2023 14:58:02 +0000</pubDate>
      <link>https://forem.com/codingcss/whos-that-pokemon-javascript-project-45m5</link>
      <guid>https://forem.com/codingcss/whos-that-pokemon-javascript-project-45m5</guid>
      <description>&lt;p&gt;Hey everyone. Welcome to today's tutorial. In today's tutorial, we will learn how to create a Pokémon quiz game called "Who's the Pokémon?". To build this project we would need HTML, CSS, and JavaScript. Let's discover how to build this project in a few simple and easy-to-follow steps.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to support my channel and see more great content, hit that subscribe button.😍&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--bWZ0rhAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://yt3.googleusercontent.com/J7dxwM33TYr2hFpyOimDwd5i8k1jsjqjLeekOGtwU19bEiLIJB1quakBkSoDcK2nC5G7B3ea%3Ds900-c-k-c0x00ffffff-no-rj" height="800" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Welcome to Learn with Daniel

I'm Danial and on this channel, you'll find tutorials on HTML, CSS, and JavaScript, as well as creative UI/UX designs, CSS animations, and effects. Whether you're a beginner or an experienced developer, I hope you find my content helpful and enjoyable.

My goal is to inspire and empower design-focused frontend developers &amp;amp; designers.

Don't forget to subscribe to my channel and enable notifications by clicking the bell icon. That way, you'll be the first to know about new tutorials and resources as soon as they're released.

#html #javascript #css #coding #frondend #htmlcss #javascriptprojects #programming #css #trend #viral #program #shortsvideo #shorts #youtubeshort 

        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--GxB0J_hV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/28b0985e/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Video Tutorial:
&lt;/h2&gt;

&lt;p&gt;For a better understanding of how we built the functionality of this project, I would advise you to watch the video below. If you find the video helpful give it a like and subscribe to &lt;a href="https://www.youtube.com/@learnwithdanial417"&gt;my YouTube channel&lt;/a&gt; where I post new tips, tricks, and tutorials related to HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0ps6W8ro8q8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Folder Structure:
&lt;/h2&gt;

&lt;p&gt;Let's build the project folder structure before we begin writing the code. We create a project folder called 'Who's the Pokemon?'. Inside this folder, we have three files. These files are index.html, style.css, script.js, and the images of various Pokémon.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML:
&lt;/h2&gt;

&lt;p&gt;We begin with the HTML Code. First, create a file called - 'index.html'. Copy the code below and paste it into your HTML file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;title&amp;gt;Who's that Pokemon&amp;lt;/title&amp;gt;
    &amp;lt;!-- Google Fonts --&amp;gt;
    &amp;lt;link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&amp;amp;display=swap"
      rel="stylesheet"
    /&amp;gt;
    &amp;lt;!-- Stylesheet --&amp;gt;
    &amp;lt;link rel="stylesheet" href="style.css" /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="game-container hide"&amp;gt;
      &amp;lt;div class="header"&amp;gt;
        &amp;lt;div class="timer"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div class="container"&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class="score-container"&amp;gt;
      &amp;lt;div id="user-score"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;button id="start"&amp;gt;Start&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;!-- Script --&amp;gt;
    &amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  CSS:
&lt;/h2&gt;

&lt;p&gt;Next, we style our list using CSS. For this copy, the code provided to you below and paste it into your stylesheet.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
  font-family: "Poppins", sans-serif;
}
body {
  height: 100vh;
  background: linear-gradient(
    #da2e2c 49%,
    #090029 49%,
    #090029 51%,
    #ffffff 51%
  );
}
.score-container {
  position: absolute;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 50%;
}
#start {
  background-color: #ffffff;
  height: 6em;
  width: 6em;
  font-size: 1.8em;
  border: 0.4em solid #090029;
  border-radius: 50%;
  cursor: pointer;
}
.game-container {
  background-color: #ffffff;
  width: 100%;
  max-width: 31em;
  padding: 3em 1.5em;
  border: 0.6em solid #090029;
  border-radius: 0.5em;
  position: absolute;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 50%;
}
.timer span {
  font-weight: 600;
}
.header,
.num {
  text-align: right;
}
.pokemon-image {
  display: block;
  margin: 3em auto 0 auto;
}
.options {
  display: flex;
  justify-content: center;
  gap: 0.5em;
  flex-wrap: wrap;
}
.options button {
  background-color: #ffffff;
  padding: 0.8em;
  border: 0.3em solid #090029;
  border-radius: 0.5em;
  box-shadow: 0 0.5em 0 0 #090029;
  cursor: pointer;
}
.options button:hover {
  box-shadow: none;
  transform: translateY(0.6em);
}
.nxt-btn-div {
  margin-top: 3em;
  display: flex;
  justify-content: flex-end;
}
.next-btn {
  cursor: pointer;
  background-color: #090029;
  color: #ffffff;
  border-radius: 0.5em;
  font-size: 1.2em;
  padding: 0.8em 3em;
}
.hide {
  display: none;
}
.options:disabled {
  border-color: #a0a0a0;
  color: #a0a0a0;
  box-shadow: 0 0.5em 0 0 #a0a0a0;
  cursor: not-allowed;
}
.options button.correct {
  background: #58cc5d;
}
.options button.incorrect {
  background: #eb5650;
}
.options button.correct,
.options button.incorrect {
  color: #ffffff;
  border-color: #090029;
  box-shadow: 0 0.5em 0 0 #090029;
}
.score-container {
  position: absolute;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 50%;
}
#user-score {
  margin-bottom: 1em;
  color: #ffffff;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  JavaScript:
&lt;/h2&gt;

&lt;p&gt;Finally, we add functionality using JavaScript. Once again copy the code below and paste it into your script file.&lt;/p&gt;

&lt;p&gt;The game consists of a series of questions with images of Pokémon, and the user has to choose the correct option from a list of options.&lt;/p&gt;

&lt;p&gt;The steps included in creating this are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, initialize all the images and their corresponding correct options in an array of objects and create an array of different options for the questions. Apart from this, declare variables and create references&lt;/li&gt;
&lt;li&gt;When the user clicks the start button the “startGame” function is called. It calls the “populateQuestions” function to populate 5 random. questions in an array and then calls the “cardGenerator” function to generate the UI for the game.&lt;/li&gt;
&lt;li&gt;“cardGenerator” further calls “populateOptions” to get all 4 options for our question and to shuffle options randomly it makes a call to the “randomShuffle” function, then it calls the “timerDisplay” function to start the countdown.&lt;/li&gt;
&lt;li&gt;When the user clicks an option the “checker” function is called which checks if the selected option is correct or not, updates the score, and calls the “nextQuestion” function which displays the next question. The “nextQuestion” function would also be called if the countdown ends or if the user clicks the next button.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Initial References

//Questions Or Images
const questions = [
  {
    image: "Alakazam.jpg",
    correct_option: "Alakazam",
  },
  {
    image: "Arcanine.jpg",
    correct_option: "Arcanine",
  },
  {
    image: "Bulbasaur.jpg",
    correct_option: "Bulbasaur",
  },
  {
    image: "Cubone.jpg",
    correct_option: "Cubone",
  },
  {
    image: "Ditto.jpg",
    correct_option: "Ditto",
  },
  {
    image: "Gloom.jpg",
    correct_option: "Gloom",
  },
  {
    image: "Gyarados.jpg",
    correct_option: "Gyarados",
  },
  {
    image: "Hitmonlee.jpg",
    correct_option: "Hitmonlee",
  },
  {
    image: "Horsea.jpg",
    correct_option: "Horsea",
  },
  {
    image: "Koffing.jpg",
    correct_option: "Koffing",
  },
  {
    image: "Mewtwo.jpg",
    correct_option: "Mewtwo",
  },
  {
    image: "Seaking.jpg",
    correct_option: "Seaking",
  },
  {
    image: "Tauros.jpg",
    correct_option: "Tauros",
  },
  {
    image: "Venonat.jpg",
    correct_option: "Venonat",
  },
  {
    image: "Victreebe.jpg",
    correct_option: "Victreebe",
  },
  {
    image: "eevee.jpg",
    correct_option: "Eevee",
  },
];

//All options
const optionsArray = [
  "Alakazam",
  "Arcanine",
  "Bulbasaur",
  "Cubone",
  "Ditto",
  "Gloom",
  "Gyarados",
  "Hitmonlee",
  "Horsea",
  "Koffing",
  "Mewtwo",
  "Pikachu",
  "Seaking",
  "Tauros",
  "Venonat",
  "Victreebe",
  "eevee",
  "Ivysaur",
  "Venusaur",
  "Charmander",
  "Charmeleon",
  "Charizard",
  "Squirtle",
  "Wartortle",
  "Blastoise",
  "Caterpie",
  "Metapod",
  "Butterfree",
  "Weedle",
  "Kakuna",
  "Beedrill",
  "Pidgey",
  "Pidgeotto",
  "Pidgeot",
  "Rattata",
  "Raticate",
  "Spearow",
  "Fearow",
  "Ekans",
  "Arbok",
];
const container = document.querySelector(".container");
const gameContainer = document.querySelector(".game-container");
const startButton = document.getElementById("start");
const scoreContainer = document.querySelector(".score-container");
const userScore = document.getElementById("user-score");
let timer = document.getElementsByClassName("timer")[0];
let nextBtn;
let score, currentQuestion, finalQuestions;
let countdown,
  count = 11;

//Random value from array
const randomValueGenerator = (array) =&amp;gt;
  array[Math.floor(Math.random() * array.length)];

//Random shuffle array
const randomShuffle = (array) =&amp;gt; array.sort(() =&amp;gt; 0.5 - Math.random());

//Start game
const startGame = () =&amp;gt; {
  //Select random 5 questions
  scoreContainer.classList.add("hide");
  gameContainer.classList.remove("hide");
  finalQuestions = populateQuestions();
  score = 0;
  currentQuestion = 0;
  //Generate card for first question
  cardGenerator(finalQuestions[currentQuestion]);
};

//Timer
const timerDisplay = () =&amp;gt; {
  countdown = setInterval(() =&amp;gt; {
    count -= 1;
    timer.innerHTML = `&amp;lt;span&amp;gt;Time Left: &amp;lt;/span&amp;gt;${count}s`;
    if (count == 0) {
      clearInterval(countdown);
      nextQuestion();
    }
  }, 1000);
};

//Create options
const populateOptions = (correct_option) =&amp;gt; {
  let arr = [];
  arr.push(correct_option);
  let optionsCount = 1;
  while (optionsCount &amp;lt; 4) {
    let randomvalue = randomValueGenerator(optionsArray);
    if (!arr.includes(randomvalue)) {
      arr.push(randomvalue);
      optionsCount += 1;
    }
  }
  return arr;
};

//Choose random questions
const populateQuestions = () =&amp;gt; {
  let questionsCount = 0;
  let chosenObjects = [];
  let questionsBatch = [];
  //5 Questions
  while (questionsCount &amp;lt; 5) {
    let randomvalue = randomValueGenerator(questions);
    let index = questions.indexOf(randomvalue);
    if (!chosenObjects.includes(index)) {
      questionsBatch.push(randomvalue);
      chosenObjects.push(index);
      questionsCount += 1;
    }
  }
  return questionsBatch;
};

//check selected answer
const checker = (e) =&amp;gt; {
  let userSolution = e.target.innerText;
  let options = document.querySelectorAll(".option");
  if (userSolution === finalQuestions[currentQuestion].correct_option) {
    e.target.classList.add("correct");
    score++;
  } else {
    e.target.classList.add("incorrect");
    options.forEach((element) =&amp;gt; {
      if (element.innerText == finalQuestions[currentQuestion].correct_option) {
        element.classList.add("correct");
      }
    });
  }

  clearInterval(countdown);
  //disable all options
  options.forEach((element) =&amp;gt; {
    element.disabled = true;
  });
};

//Next question
const nextQuestion = (e) =&amp;gt; {
  //increment currentQuestion
  currentQuestion += 1;
  if (currentQuestion == finalQuestions.length) {
    gameContainer.classList.add("hide");
    scoreContainer.classList.remove("hide");
    startButton.innerText = `Restart`;
    userScore.innerHTML =
      "Your score is " + score + " out of " + currentQuestion;
    clearInterval(countdown);
  } else {
    cardGenerator(finalQuestions[currentQuestion]);
  }
};

//Card UI
const cardGenerator = (cardObject) =&amp;gt; {
  const { image, correct_option } = cardObject;
  let options = randomShuffle(populateOptions(correct_option));
  container.innerHTML = `&amp;lt;div class="quiz"&amp;gt;
  &amp;lt;p class="num"&amp;gt;
  ${currentQuestion + 1}/5
  &amp;lt;/p&amp;gt;
  &amp;lt;div class="questions"&amp;gt;
    &amp;lt;img class="pokemon-image" src="${image}"/&amp;gt;
  &amp;lt;/div&amp;gt;
    &amp;lt;div class="options"&amp;gt;
    &amp;lt;button class="option" onclick="checker(event)"&amp;gt;${options[0]}
    &amp;lt;/button&amp;gt;
    &amp;lt;button class="option" onclick="checker(event)"&amp;gt;${options[1]}
    &amp;lt;/button&amp;gt;
    &amp;lt;button class="option" onclick="checker(event)"&amp;gt;${options[2]}
    &amp;lt;/button&amp;gt;
    &amp;lt;button class="option" onclick="checker(event)"&amp;gt;${options[3]}
    &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="nxt-btn-div"&amp;gt;
        &amp;lt;button class="next-btn" onclick="nextQuestion(event)"&amp;gt;Next&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

  &amp;lt;/div&amp;gt;`;
  //For timer
  count = 11;
  clearInterval(countdown);
  //Display timer
  timerDisplay();
};

startButton.addEventListener("click", startGame);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Go ahead and customize the project the way you like. If you have any queries, suggestions, or feedback comment below. Download the source code by clicking on the ‘Download Code’ button below.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://github.com/codingcss/Who-s-That-Pok-mon-JavaScript-Project"&gt;Download Code&lt;/a&gt;&lt;/p&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/codingcss"&gt;
        codingcss
      &lt;/a&gt; / &lt;a href="https://github.com/codingcss/Who-s-That-Pok-mon-JavaScript-Project"&gt;
        Who-s-That-Pok-mon-JavaScript-Project
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Who's That Pokémon? | JavaScript Project
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Who-s-That-Pok-mon-JavaScript-Project&lt;/h1&gt;
&lt;p&gt;Who's That Pokémon? | JavaScript Project&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codingcss/Who-s-That-Pok-mon-JavaScript-Project"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What you think?🔆</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Wed, 13 Dec 2023 16:41:25 +0000</pubDate>
      <link>https://forem.com/codingcss/what-you-think-3ccm</link>
      <guid>https://forem.com/codingcss/what-you-think-3ccm</guid>
      <description>&lt;p&gt;What you think?🔆&lt;/p&gt;

&lt;h1&gt;
  
  
  motivation #entrepreneur #selfgrowth #workhard #focus #goals #motivationalquotes #motivation #inspiration #inspirationalquotes
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>CSS Cake Animation</title>
      <dc:creator>Danial Habib</dc:creator>
      <pubDate>Wed, 13 Dec 2023 13:46:43 +0000</pubDate>
      <link>https://forem.com/codingcss/css-cake-animation-3n5c</link>
      <guid>https://forem.com/codingcss/css-cake-animation-3n5c</guid>
      <description>&lt;p&gt;Hey everyone. Welcome to today’s tutorial. In today’s tutorial, we will learn how to create cake animation. To create this animation, we need HTML and CSS. This is intermediate-level CSS animation.&lt;/p&gt;

&lt;p&gt;If you are looking for more such CSS projects to enhance your skills, you can check out this &lt;a href="https://youtube.com/playlist?list=PLZvS0_FHa8MH_AZtuaCbRUielg3WaGCbY&amp;amp;si=g3W-egrPxRg9Utuy"&gt;playlist here&lt;/a&gt;. This playlist consists of 50 + CSS animation tutorials. The difficulty of this project varies from easy to quite complex. This playlist is suitable for all kinds of learners who are interested in learning CSS.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--bWZ0rhAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://yt3.googleusercontent.com/J7dxwM33TYr2hFpyOimDwd5i8k1jsjqjLeekOGtwU19bEiLIJB1quakBkSoDcK2nC5G7B3ea%3Ds900-c-k-c0x00ffffff-no-rj" height="800" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/@learnwithdanial417" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Welcome to Learn with Daniel

I'm Danial and on this channel, you'll find tutorials on HTML, CSS, and JavaScript, as well as creative UI/UX designs, CSS animations, and effects. Whether you're a beginner or an experienced developer, I hope you find my content helpful and enjoyable.

My goal is to inspire and empower design-focused frontend developers &amp;amp; designers.

Don't forget to subscribe to my channel and enable notifications by clicking the bell icon. That way, you'll be the first to know about new tutorials and resources as soon as they're released.

#html #javascript #css #coding #frondend #htmlcss #javascriptprojects #programming #css #trend #viral #program #shortsvideo #shorts #youtubeshort 

        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--H58PAQKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/cf791362/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Video Tutorial:
&lt;/h2&gt;

&lt;p&gt;If you are interested in watching a video tutorial rather than reading this blogpost, you can check out the video down below. Also, subscribe to &lt;a href="https://www.youtube.com/@learnwithdanial417"&gt;my YouTube channel&lt;/a&gt; where I first new tips, tricks and tutorials every alternate day.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RAunJ0c7xIQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Folder Structure:
&lt;/h2&gt;

&lt;p&gt;Before you start coding, let us take a look at the project folder structure. We build a project folder called CSS cake animation. Inside this folder, we have two files. These files are index.html and style.css.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML:
&lt;/h2&gt;

&lt;p&gt;We begin with the HTML code. We created you with a class name container. Weep rap all the other elements inside this container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;title&amp;gt;Cake Animation&amp;lt;/title&amp;gt;
    &amp;lt;link rel="stylesheet" href="style.css" /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="container center"&amp;gt;
      &amp;lt;div class="candle"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;div class="layer-1"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;div class="layer-2"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;div class="layer-3"&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  CSS:
&lt;/h2&gt;

&lt;p&gt;Next we shape, style, and position the elements using CSS. You also add animations to various shapes to complete the animation.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
body {
  background-color: #f1d632;
}
.container {
  height: 100vh;
  width: 31.25em;
}
.center,
.container * {
  position: absolute;
  margin: auto;
  left: 0;
  right: 0;
}
.layer-1 {
  background-color: #367bd0;
  height: 7.5em;
  width: 21.87em;
  top: -7.5em;
  background-size: 1.56em 9.37em;
  background-position: 0 -1.25em;
  background-image: radial-gradient(
    circle at 0.78em 1em,
    #f5f5f5 1.25em,
    transparent 1.3em
  );
  animation: fall-1 8s infinite;
}
@keyframes fall-1 {
  20% {
    transform: translateY(35.62em);
  }
  100% {
    transform: translateY(35.62em);
  }
}
.layer-1:before {
  content: "";
  position: absolute;
  height: 1.25em;
  width: 100%;
  background-color: #f54597;
  bottom: 0;
}
.layer-1:after {
  content: "";
  position: absolute;
  height: 0.75em;
  width: 0.75em;
  background-color: #9a152b;
  border-radius: 50%;
  top: 2.81em;
  left: 1.87em;
  box-shadow: 3.12em 1.56em #f1663e, 5.31em -1em #f5e671, 9.37em 2.4em #9a152b,
    12.5em -1.56em #f1663e, 14.68em 0 #f5e671, 18.75em 1.56em #9a152b;
}
.layer-2 {
  height: 7.5em;
  width: 15.62em;
  background-color: #ff99b9;
  top: -7.5em;
  background-image: repeating-linear-gradient(
    90deg,
    transparent 0,
    transparent 3.12em,
    #ff4a83 3.12em,
    #ff4a83 6.25em
  );
  animation: fall-2 8s infinite;
}
@keyframes fall-2 {
  20% {
    transform: translateY(0);
  }
  40% {
    transform: translateY(28.12em);
  }
  100% {
    transform: translateY(28.12em);
  }
}
.layer-3 {
  background-color: #9a202f;
  height: 7.5em;
  width: 9.37em;
  top: -7.5em;
  background-size: 1.56em 9.37em;
  background-position: 0 -1.25em;
  background-image: radial-gradient(
    circle at 0.78em 1em,
    #ffee8d 1.25em,
    transparent 1.3em
  );
  animation: fall-3 8s infinite;
}
@keyframes fall-3 {
  40% {
    transform: translateY(0);
  }
  60% {
    transform: translateY(20.62em);
  }
  100% {
    transform: translateY(20.62em);
  }
}
.layer-3:before {
  position: absolute;
  content: "";
  height: 0.93em;
  width: 100%;
  top: 3.12em;
  background-color: #ffee8d;
}
.layer-3:after {
  position: absolute;
  content: "";
  background-color: #f54597;
  height: 1.25em;
  width: 1.25em;
  border-radius: 50%;
  top: -1.25em;
  left: 0.37em;
  box-shadow: 1.87em 0 #f54597, 3.75em 0 #f54597, 5.62em 0 #f54597,
    7.5em 0 #f54597;
}
.candle {
  height: 3.12em;
  width: 0.75em;
  background-color: #3aa2cf;
  top: -3.12em;
  border-radius: 0.12em 0.12em 0 0;
  animation: fall-4 8s infinite;
}
@keyframes fall-4 {
  60% {
    transform: translateY(0);
  }
  80% {
    transform: translateY(13.12em);
  }
  100% {
    transform: translateY(13.12em);
  }
}
.candle:before {
  position: absolute;
  content: "";
  background-color: #f1af3f;
  height: 1.25em;
  width: 1.25em;
  margin: -0.25em;
  border-radius: 50% 50% 50% 0;
  top: -1.3em;
  transform: rotate(135deg);
  animation: flame 2s infinite;
}
@keyframes flame {
  50% {
    transform: scale(0.8) rotate(135deg);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That’s it for this tutorial. If you face any issues while creating this project, you can download the source code by clicking on the download code button below. If you have any queries, suggestions, or feedback you can comment them below&lt;/p&gt;



&lt;p&gt;&lt;a href="https://github.com/codingcss/CSS-Cake-Animation"&gt;Download Code&lt;/a&gt;&lt;/p&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/codingcss"&gt;
        codingcss
      &lt;/a&gt; / &lt;a href="https://github.com/codingcss/CSS-Cake-Animation"&gt;
        CSS-Cake-Animation
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      CSS Cake Animation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
CSS-Cake-Animation&lt;/h1&gt;
&lt;p&gt;CSS Cake Animation&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codingcss/CSS-Cake-Animation"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>ai</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
