<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeremy Hernandez</title>
    <description>The latest articles on DEV Community by Jeremy Hernandez (@jhernandez504).</description>
    <link>https://dev.to/jhernandez504</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%2F1412597%2F7a266734-93ca-463f-8d6e-000c20f7bbce.jpeg</url>
      <title>DEV Community: Jeremy Hernandez</title>
      <link>https://dev.to/jhernandez504</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jhernandez504"/>
    <language>en</language>
    <item>
      <title>Intro into Phaser.js</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Mon, 02 Dec 2024 09:31:48 +0000</pubDate>
      <link>https://dev.to/jhernandez504/intro-into-phaserjs-3c8b</link>
      <guid>https://dev.to/jhernandez504/intro-into-phaserjs-3c8b</guid>
      <description>&lt;p&gt;When I first started tinkering with game development, I came across &lt;em&gt;Phaser.js&lt;/em&gt; and honestly, I would say it's been fun. Whether you’re just curious about making games or want to create something polished, this framework seems to have a lot to offer. I will go into what some benefits I found were but before that, let's clear up an important question. What is Phaser.js?&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;Phaser.js&lt;/em&gt; is a fast, free, and open-source HTML5 game framework that simplifies the creation of 2D games for web browsers. It leverages modern web technologies like WebGL and Canvas for rendering, ensuring smooth performance across devices.&lt;/p&gt;

&lt;p&gt;Now, since I’ve spent some time exploring it, and here are three things that really stood out to me.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. It’s Super Easy to Get Started
&lt;/h2&gt;

&lt;p&gt;I’ll admit, I was a little intimidated when I first opened the Phaser.js documentation. Game development sounded complicated, but Phaser actually makes it easier to dive into.&lt;/p&gt;

&lt;p&gt;Here, I'll provide a template pulled straight from Phaser docs.&lt;br&gt;
This example initializes a Phaser game, loads assets, and displays a background with a sprite. It demonstrates how easy it is to set up a game scene with Phaser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AUTO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FIT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;autoCenter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CENTER_BOTH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;TitleScreen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;arcade&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;arcade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;gravity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;game&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Game&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sky&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assets/sky.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;star&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assets/star.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sky&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;star&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sprite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;star&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;



&lt;p&gt;Now if I wanted to set up a basic game, it can as easy as adding a few lines of code. Here’s something I made recently—a simple version of a Pong-like game:&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Game&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scene&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

  &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Ball&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;circle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xffffff&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setBounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCollideWorldBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setVelocity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Left Paddle&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paddleLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xffffff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paddleLeft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;paddleLeft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paddleLeft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setMass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Right Paddle&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paddleRight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;750&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xffffff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paddleRight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;paddleRight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paddleRight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;bod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setMass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Game&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AUTO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;TitleScreen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;arcade&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;arcade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;gravity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;game&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Game&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;game&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Game&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;game&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;game&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;What’s cool here is that I didn’t have to do much heavy lifting. Phaser takes care of things like adding physics to the ball, handling collisions, and making everything bounce off walls and paddles.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Built-In Physics Systems
&lt;/h2&gt;

&lt;p&gt;Phaser.js comes with Arcade Physics, Matter.js, and other physics engines built-in, allowing you to add realistic movement, gravity, and collisions without external libraries. This is particularly useful for developers who want to focus on gameplay rather than implementing low-level physics.&lt;/p&gt;

&lt;p&gt;Here’s how I added physics to a simple bouncing ball:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Ball&lt;/span&gt;
    &lt;span class="c1"&gt;// adds sprite with physics&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;circle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xffffff&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//adds bounce&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setBounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCollideWorldBounds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//adds movement&lt;/span&gt;
    &lt;span class="nx"&gt;ball&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setVelocity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;This snippet creates a sprite that bounces around the screen, leveraging Phaser's Arcade Physics for collision detection and velocity handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Cross-Platform Compatibility
&lt;/h2&gt;

&lt;p&gt;Phaser.js games can run on any modern web browser, making it an ideal choice for cross-platform deployment. From desktops to mobile devices, your games will work seamlessly without requiring significant code changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AUTO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FIT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;autoCenter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Phaser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CENTER_BOTH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;TitleScreen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;physics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;arcade&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;arcade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;gravity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using Phaser.AUTO, Phaser attempts to use WebGL first because it provides better performance and additional features. If WebGL isn't supported by the browser or the device, Phaser falls back to the Canvas renderer to ensure the game runs smoothly.&lt;/p&gt;

&lt;p&gt;Setting the scale mode to Phaser.Scale.FIT, this ensures the game scales properly to fit different screen sizes while maintaining aspect ratio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Phaser.js has been such a fun discovery for me. It’s not too difficult and is packed with features. If you’re even a little curious about making games, I totally recommend giving it a try.&lt;br&gt;
What’s the first game you’d make? For me, it was a simple bouncing ball, but now I’m dreaming up bigger projects. Time to get coding! 🎮&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ourcade - &lt;a href="https://www.youtube.com/watch?v=f7c9mM7w2fc&amp;amp;list=PLNwtXgWIx3rg_fv93PMDFfXahzhXxGe5Z" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=f7c9mM7w2fc&amp;amp;list=PLNwtXgWIx3rg_fv93PMDFfXahzhXxGe5Z&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://phaser.io/news/category/tutorial" rel="noopener noreferrer"&gt;https://phaser.io/news/category/tutorial&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.phaser.io/phaser/getting-started/what-is-phaser" rel="noopener noreferrer"&gt;https://docs.phaser.io/phaser/getting-started/what-is-phaser&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://labs.phaser.io/" rel="noopener noreferrer"&gt;https://labs.phaser.io/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>phaser</category>
      <category>learning</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Intro Into Bulma CSS: How Good Is It?</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Sun, 17 Nov 2024 05:17:13 +0000</pubDate>
      <link>https://dev.to/jhernandez504/intro-into-bulma-css-how-good-is-it-25h</link>
      <guid>https://dev.to/jhernandez504/intro-into-bulma-css-how-good-is-it-25h</guid>
      <description>&lt;p&gt;If you've ever spent hours tweaking CSS just to get a simple layout to work across different devices, you're not alone. While researching, I came across Bulma CSS. It's a lightweight CSS framework with a &lt;em&gt;component-based&lt;/em&gt; approach that simplifies the process of building responsive websites. Whether you're a seasoned developer or just starting out, Bulma offers a straightforward approach to creating flexible designs without getting bogged down by complex styling. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Bulma CSS?
&lt;/h2&gt;

&lt;p&gt;Bulma is a modern CSS framework that helps you design clean and responsive websites quickly. Unlike other frameworks that require you to work with complex JavaScript, Bulma is built &lt;em&gt;entirely&lt;/em&gt; with CSS, making it lightweight and easy to use. It offers a flexible grid system, components for navigation, buttons, forms, and more, and everything you need to get a website up and running with minimal effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose Bulma CSS?
&lt;/h2&gt;

&lt;p&gt;Here are &lt;strong&gt;4&lt;/strong&gt; standout features that make Bulma CSS effective for both beginners and experienced developers alike:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplicity and Readability&lt;/li&gt;
&lt;li&gt;Responsive Design Built-In&lt;/li&gt;
&lt;li&gt;Flexible and Easy-to-Use Grid System&lt;/li&gt;
&lt;li&gt;Quicker prototyping&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Simplicity and Readability
&lt;/h2&gt;

&lt;p&gt;One thing that stands out about Bulma is how simple it tries to make things. It uses Flexbox under the hood, which can make layout creation easier than writing traditional CSS. The class names are pretty clear, so it's not hard to understand what each one does at first glance. That said, it does feel a bit limiting at times. Instead of allowing for more flexibility, you’re often left working within the framework's constraints. While it’s definitely easier than writing long CSS rules, I can’t help but feel that it doesn’t offer the same level of control and customization that other frameworks like Tailwind provide. For simple projects or quick prototyping, it’s fine, but if you want more freedom, it might leave you wanting more.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title has-text-centered&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Grocery&lt;/span&gt; &lt;span class="nx"&gt;Store&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card has-background-grey-lighter &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card-content is-justify-content-center is-align-items-center&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h2&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title has-text-centered&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Vegetable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h2&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;has-text-centered&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;This&lt;/span&gt; &lt;span class="nx"&gt;should&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;nutrition&lt;/span&gt; &lt;span class="nx"&gt;facts&lt;/span&gt; &lt;span class="nx"&gt;about&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;vegetable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button is-rounded custom-blue-button m-3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Buy&lt;/span&gt; &lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;In this example, Bulma provides minimally styled components out of the box, but to add custom stylings like colors. &lt;/p&gt;

&lt;p&gt;To style Bulma components, you would either have to do some inline styling on the component itself or add CSS rules in a &lt;em&gt;styles.css&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here's how I did it for this Vegetable card.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.custom-blue-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#007ACC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* Custom blue color */&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;              &lt;span class="c"&gt;/* White text */&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c"&gt;/* Remove border */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.custom-blue-button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#005f8c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* Darker blue on hover */&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;              &lt;span class="c"&gt;/* Keep the text color white */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Responsive Design Built-In
&lt;/h2&gt;

&lt;p&gt;Bulma comes with a grid system that simplifies building responsive layouts. Instead of manually writing media queries, you can rely on its predefined classes to adjust the layout for different screen sizes. This can save time and reduce the hassle of tweaking your design for various devices.&lt;/p&gt;

&lt;p&gt;For instance, creating a grid layout with cards that reshapes based on screen size is straightforward with Bulma’s classes. It’s a helpful feature, especially if you’re looking for a quick way to ensure your site looks good on phones, tablets, and desktops.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;columns is-multiline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column is-12-mobile is-6-tablet is-4-desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card-content has-background-grey-lighter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Kiwi&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;are&lt;/span&gt; &lt;span class="nx"&gt;brown&lt;/span&gt; &lt;span class="nx"&gt;but&lt;/span&gt; &lt;span class="nx"&gt;green&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;inside&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column is-12-mobile is-6-tablet is-4-desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card-content has-background-grey-lighter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Cherry&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;top&lt;/span&gt;&lt;span class="o"&gt;!&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column is-12-mobile is-6-tablet is-4-desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;card-content has-background-grey-lighter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Strawberry&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;tastes&lt;/span&gt; &lt;span class="nx"&gt;good&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below, is how these screen sizes are reshaping the way the cards are displayed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile Screens&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1drr1871y9t8i1stvaj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1drr1871y9t8i1stvaj0.png" alt="Image description" width="800" height="1273"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Medium Screens&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrgktn9x3hbzn1ai1a1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrgktn9x3hbzn1ai1a1f.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Larger Screens&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwi6t6ei9oi89j0nc10uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwi6t6ei9oi89j0nc10uz.png" alt="Image description" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, the columns class defines the overall grid, and each column gets specific classes for different screen sizes like is-12-mobile, is-6-tablet, and is-4-desktop. These classes ensure that the layout adjusts accordingly: one column on small screens, two on tablets, and three on desktops.&lt;/p&gt;
&lt;h2&gt;
  
  
  Flexible and Easy-to-Use Grid System
&lt;/h2&gt;

&lt;p&gt;The grid system in Bulma is simple yet powerful. It’s built using Flexbox, making it easy to create both simple and complex layouts. The grid is based on a 12-column structure, so you can easily adjust the width of columns by specifying the number of columns you want them to span. The grid system is flexible and supports both fixed-width and fluid columns.&lt;/p&gt;

&lt;p&gt;For example, to create a two-column layout on a desktop and stack them on mobile, you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;columns&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column is-half&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Column&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column is-half&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Column&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In this layout, &lt;em&gt;is-half&lt;/em&gt; makes each column take up &lt;strong&gt;50%&lt;/strong&gt; of the container’s width. On smaller screens, the columns automatically stack on top of each other, so you don’t have to write custom media queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Prototyping
&lt;/h2&gt;

&lt;p&gt;With Bulma, you can create prototypes quickly by simply using the pre-defined classes. If you want to slap together some components with minimum styling, Bulma is great for that. The minimalistic design system of Bulma also means you can easily tweak or extend the styles to fit your project’s needs. Want to change the primary button color? Just update the button class with a different modifier, like is-link for a blue button, or is-danger for a red one.&lt;/p&gt;

&lt;p&gt;Here’s a simple navigation bar using Bulma's predefined class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;nav&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar is-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-brand&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Brand&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-burger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;expanded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-end&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Services&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;navbar-item&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Contact&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/nav&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mobile Screens&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsn19ldzc0s4ry099qbwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsn19ldzc0s4ry099qbwb.png" alt="Image description" width="800" height="146"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Larger Screens&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr94thnair4yxafodrit2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr94thnair4yxafodrit2.png" alt="Image description" width="800" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The navbar, navbar-item, and navbar-burger classes are all part of Bulma’s pre-defined component system. You can use them to create a fully responsive navigation bar without writing any custom CSS.&lt;/p&gt;

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

&lt;p&gt;While using Bulma CSS, I would say it has been an interesting experience. While it’s a solid framework that provides a set of pre-styled components, it feels a bit more traditional compared to utility-first frameworks like Tailwind. Bulma is great for beginners looking for a simple, flexible design system, but it doesn’t offer the same level of customizability and control that Tailwind does.&lt;/p&gt;

&lt;p&gt;To be honest, Bulma is a good starting point for those just getting into CSS frameworks, but there are probably better frameworks to invest your time in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://playcode.io/bulma" rel="noopener noreferrer"&gt;https://playcode.io/bulma&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://bulma.io/documentation/" rel="noopener noreferrer"&gt;https://bulma.io/documentation/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=u-oOdhS4Fc4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=u-oOdhS4Fc4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=LBzZLzu2GKo" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=LBzZLzu2GKo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/satyamtripathi651/bulma-css-framework-getting-started-guide-17hk"&gt;https://dev.to/satyamtripathi651/bulma-css-framework-getting-started-guide-17hk&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/scrimba/learn-bulma-css-in-5-minutes-26f0"&gt;https://dev.to/scrimba/learn-bulma-css-in-5-minutes-26f0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://devmountain.com/blog/why-bulma-css-could-be-your-new-favorite-framework/" rel="noopener noreferrer"&gt;https://devmountain.com/blog/why-bulma-css-could-be-your-new-favorite-framework/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>learning</category>
      <category>css</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Intro into Tailwind CSS</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Sun, 10 Nov 2024 23:53:03 +0000</pubDate>
      <link>https://dev.to/jhernandez504/intro-into-tailwind-css-2e8j</link>
      <guid>https://dev.to/jhernandez504/intro-into-tailwind-css-2e8j</guid>
      <description>&lt;p&gt;If you’ve ever built a website, you know that styling can sometimes be tedious, repetitive, and time-consuming. You write CSS rules, try to manage class names, and occasionally find yourself rewriting the same code over and over. That’s where Tailwind CSS comes in! Tailwind is a popular utility-first CSS framework that helps you build clean, modern, and fully responsive designs without the headache of traditional CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Tailwind CSS?
&lt;/h2&gt;

&lt;p&gt;Tailwind CSS is a utility-first CSS framework where each class performs a single function. Rather than writing custom CSS, you use a large set of pre-defined utility classes directly in your HTML. This approach speeds up the design process by making it easy to apply styles and allowing you to focus on the layout and feel of your website, rather than writing custom CSS from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose Tailwind CSS?
&lt;/h2&gt;

&lt;p&gt;Here are three standout features that I found that make Tailwind CSS cool and effective for both beginners and experienced developers alike:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;&lt;em&gt;Highly Customizable Utility Classes&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;em&gt;Responsive Design Made Simple&lt;/em&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt; &lt;em&gt;&lt;strong&gt;Rapid Prototyping with Minimal CSS&lt;/strong&gt;&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customizable Utility Classes
&lt;/h2&gt;

&lt;p&gt;Tailwind offers a comprehensive set of pre-defined utility classes, from padding and margin to font size, color, and grid layouts. Tailwind is designed to be flexible and customizable; you can easily adjust classes to suit your design needs or even configure the framework itself to include your unique styles and preferences.&lt;/p&gt;

&lt;p&gt;Below, I apply padding using &lt;code&gt;p-6&lt;/code&gt;, set background to white using &lt;code&gt;bg-white&lt;/code&gt; and apply rounded corners and shadow with &lt;code&gt;rounded-lg&lt;/code&gt; and  &lt;code&gt;shadow-lg&lt;/code&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;div class="bg-white p-6 m-10 max-w-sm rounded-lg shadow-lg border border-gray-200"&amp;gt;
  &amp;lt;h2 class="text-xl font-semibold text-gray-800"&amp;gt;Product Card&amp;lt;/h2&amp;gt;
  &amp;lt;p class="mt-4 text-gray-600"&amp;gt;This is a simple product card with customizable styles.&amp;lt;/p&amp;gt;
  &amp;lt;button class="mt-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"&amp;gt;
    Buy Now
  &amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;

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

&lt;/div&gt;



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

&lt;p&gt;If I wanted to customize those predefined classes, I could go into my &lt;em&gt;&lt;strong&gt;tailwind.config.js&lt;/strong&gt;&lt;/em&gt; to do it!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        customBlue: '#007ACC',
      },
      borderRadius: {
        'xl': '1.5rem',
      },
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;button class="mt-4 px-4 py-2 bg-customBlue text-white rounded-xl hover:bg-blue-600"&amp;gt;
  Buy Now
&amp;lt;/button&amp;gt;

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

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Simplistic Responsive Design
&lt;/h2&gt;

&lt;p&gt;Tailwind makes it easy to build responsive websites without writing custom media queries. Each utility class can be tailored to specific screen sizes by using prefixes like &lt;code&gt;sm:&lt;/code&gt;, &lt;code&gt;md:&lt;/code&gt;, &lt;code&gt;lg:&lt;/code&gt;, and &lt;code&gt;xl:&lt;/code&gt;. This structure makes it easy to create layouts that adapt seamlessly across devices, providing a better user experience with minimal effort.&lt;br&gt;
Here I have have an example of how I would create 3 'cards' to dynamically change size depending on the screen size. &lt;code&gt;grid-cols-1&lt;/code&gt; creates only 1 column on small screens, &lt;code&gt;md:grid-cols-2&lt;/code&gt; changes it to 2 columns on medium screens, and &lt;code&gt;lg:grid-cols-3&lt;/code&gt; changes it to 3 columns on large ones!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"&amp;gt;
  &amp;lt;div class="bg-white p-6 rounded-lg shadow-md"&amp;gt;
    &amp;lt;h3 class="text-lg font-semibold"&amp;gt;Apple&amp;lt;/h3&amp;gt;
    &amp;lt;p class="mt-2 text-gray-600"&amp;gt;Keeps the doctor away!&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class="bg-white p-6 rounded-lg shadow-md"&amp;gt;
    &amp;lt;h3 class="text-lg font-semibold"&amp;gt;Mango&amp;lt;/h3&amp;gt;
    &amp;lt;p class="mt-2 text-gray-600"&amp;gt;My favorite fruit&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class="bg-white p-6 rounded-lg shadow-md"&amp;gt;
    &amp;lt;h3 class="text-lg font-semibold"&amp;gt;Banana&amp;lt;/h3&amp;gt;
    &amp;lt;p class="mt-2 text-gray-600"&amp;gt;Are good when they're yellow!&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

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

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  Rapid Prototyping
&lt;/h2&gt;

&lt;p&gt;With Tailwind, you can quickly create polished prototypes directly in HTML, saving you time and allowing you to focus on the design and functionality of your app. This utility-based approach means less time writing custom CSS, which ultimately leads to faster project delivery. Since you can see the effects of each class immediately, it’s perfect for experimentation and refinement.&lt;/p&gt;

&lt;p&gt;Below, I can set a background color for nav bar using &lt;code&gt;bg-gray-800&lt;/code&gt;, &lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;justify-between&lt;/code&gt;, and &lt;code&gt;items-center&lt;/code&gt; create a flexible, centered layout, and &lt;code&gt;md:hidden&lt;/code&gt; hides the menu button on medium screens and up, while &lt;code&gt;md:flex&lt;/code&gt; displays the navigation links on medium screens and up.&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;nav class="bg-gray-800 p-4 text-white"&amp;gt;
  &amp;lt;div class="container mx-auto flex justify-between items-center"&amp;gt;
    &amp;lt;a href="#" class="text-2xl font-bold"&amp;gt;Brand&amp;lt;/a&amp;gt;
    &amp;lt;ul class="hidden md:flex space-x-4"&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#" class="hover:text-gray-300"&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#" class="hover:text-gray-300"&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#" class="hover:text-gray-300"&amp;gt;Services&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#" class="hover:text-gray-300"&amp;gt;Contact&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
    &amp;lt;button class="md:hidden bg-gray-700 p-2 rounded"&amp;gt;Menu&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

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

&lt;p&gt;To wrap things up, trying out Tailwind CSS as a new developer has been a game-changer for me. Compared to libraries like MUI or Chakra, which give you ready-made components, Tailwind’s utility-first approach feels liberating. I can build exactly what I envision directly in my HTML without having to dig through pre-styled components or worry about overriding defaults. At first, using so many classes in my HTML felt unusual, but it quickly made sense as I saw how fast I could style and adapt layouts without writing new CSS.&lt;/p&gt;

&lt;p&gt;Tailwind’s responsive utilities make it super easy to understand and build for different screen sizes, and prototyping is a breeze—I can experiment and adjust quickly without hopping between files. While MUI and Chakra are fantastic for projects that need polished components out of the box, Tailwind has been invaluable for learning the nuts and bolts of responsive design and building my own styles from scratch.&lt;/p&gt;

&lt;p&gt;Overall, Tailwind has been overall, a fantastic experience for me so far. The only difficulties I faced were having to learn Tailwind metrics and keywords. If you’re looking to learn more about styling or want to create layouts with your unique style, Tailwind CSS is definitely worth exploring!&lt;/p&gt;

&lt;h2&gt;
  
  
  sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tailwindcss.com/docs/utility-first" rel="noopener noreferrer"&gt;https://tailwindcss.com/docs/utility-first&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://play.tailwindcss.com/" rel="noopener noreferrer"&gt;https://play.tailwindcss.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tailwindui.com/" rel="noopener noreferrer"&gt;https://tailwindui.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/bengrnb/tailwind-overview-and-setup-pbp"&gt;https://dev.to/bengrnb/tailwind-overview-and-setup-pbp&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/akashakki/tailwind-css-for-beginners-a-step-by-step-guide-3gff"&gt;https://dev.to/akashakki/tailwind-css-for-beginners-a-step-by-step-guide-3gff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://devot.team/blog/tailwind-css-tutorial" rel="noopener noreferrer"&gt;https://devot.team/blog/tailwind-css-tutorial&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.material-tailwind.com/blog/7-reasons-why-you-should-use-tailwind-css" rel="noopener noreferrer"&gt;https://www.material-tailwind.com/blog/7-reasons-why-you-should-use-tailwind-css&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>tailwindcss</category>
      <category>learning</category>
    </item>
    <item>
      <title>Role of AI In Enhancing VR Experiences</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Mon, 07 Oct 2024 03:45:07 +0000</pubDate>
      <link>https://dev.to/jhernandez504/role-of-ai-in-enhancing-vr-experiences-531i</link>
      <guid>https://dev.to/jhernandez504/role-of-ai-in-enhancing-vr-experiences-531i</guid>
      <description>&lt;p&gt;I have always wondered, “&lt;em&gt;What are the limits of &lt;strong&gt;Artificial Intelligence&lt;/strong&gt;?&lt;/em&gt;” Whether we realize it or not, AI has been around in recognizable form since the 1950's, when two software-based AI programs were created to play checkers and chess. Now, it has started to make itself more prevalent in our world, leaving an impact that will last for the foreseeable future. As our world continues to advance in technology, AI will keep influencing our experiences, particularly in &lt;em&gt;&lt;strong&gt;Virtual Reality&lt;/strong&gt;&lt;/em&gt; (VR). &lt;/p&gt;

&lt;p&gt;Today, there are many concerns for AI, but we stand to benefit a great deal in regards to VR. Virtual Reality can be greatly, enhanced in almost every aspect by AI, as if, they were created together. With the implementation of AI, there are four key areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Optimizations for Graphics Rendering&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Object Recognition&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Behavioral Analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personalization &amp;amp; Customizations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Optimization for Graphics Rendering
&lt;/h2&gt;

&lt;p&gt;The rendering of graphics has always been known to be a resource-intensive process. With the need for powerful hardware to handle processes, many developers use AI-driven techniques instead to save costs. Some examples are real-time adjustments to lighting, shadows, and textures. By using machine learning algorithms, AI is becoming more equipped to analyze environments, predict pixels in real time and enhance visual effects and realistic simulations. With this, our experience becomes more immersive and life-like.&lt;/p&gt;

&lt;p&gt;Here we have &lt;strong&gt;Nvidia&lt;/strong&gt; testing the limits of AI algorithms.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb8p8e0c9vhbx9d3d26u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb8p8e0c9vhbx9d3d26u.jpg" alt="Real world vs AI Generated World" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Object Recognition
&lt;/h2&gt;

&lt;p&gt;With the use of &lt;em&gt;Object Recognition&lt;/em&gt; algorithms laying the foundations for spatial learning, VR apps are able to see objects in virtual space. They can see gestures and movements while recognizing environmental components and interact with them. With real-time tracking of gestures, this allows the users to have a sense of presence and immersion while also improving the usability and accessibility for those who need it. Many companies and video games already use Object Recognition. &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%2F6dnne7mdcpwfjzikps7x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dnne7mdcpwfjzikps7x.jpg" alt="Self-driving tesla" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Behavioral Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Behavioral Analysis&lt;/em&gt;&lt;/strong&gt; is a specific field of AI focuses on analyzing users' actions and behaviors. With the collective insights developed from that data, along with predictive modeling techniques, VR developers are able to collect information and analyze a user's actions, emotions and interactions with the virtual environment. By using this data, they can develop VR applications to cater to an individual user's needs, which opens the door to an improved, overall experience that leaves us with a better sense of satisfaction and engagement. I believe there is also an opportunity to collect data and contribute to the studies of mental health.&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%2F4ixngohldh7qpos7yg1s.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%2F4ixngohldh7qpos7yg1s.png" alt="Image description" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalizations &amp;amp; Customizations
&lt;/h2&gt;

&lt;p&gt;Using AI algorithms, VR apps are able to track a user's behavior and actions and give user's possible personalized content, recommendations or experience that are tailored to their needs or interests. How cool would it be if there was a game that could change or adapt according to you? Personalizations can also include adaptable video game mechanics that change according to user's capabilities, customized avatar designs or even interactive virtual simulations that keep you engaged.&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%2Fritpy090spdwz5fo0ggz.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%2Fritpy090spdwz5fo0ggz.png" alt="Image description" width="742" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;There are limitless opportunities when it comes to the implementation of Artificial Intelligence. With the proper use and cautiousness, we can use it to enhance every aspect of Virtual Reality. From improving realistic simulations to crafting adaptable and unique experiences, we have much to look forward to. I believe the world will continue to rapidly advance in technology and the use of it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.codementor.io/@lukos86/the-exciting-future-of-vr-and-ai-how-technology-is-changing-the-game-2epy3jyl51" rel="noopener noreferrer"&gt;https://www.codementor.io/@lukos86/the-exciting-future-of-vr-and-ai-how-technology-is-changing-the-game-2epy3jyl51&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.momentslog.com/development/architecture/the-role-of-ai-in-virtual-reality-immersive-experiences" rel="noopener noreferrer"&gt;https://www.momentslog.com/development/architecture/the-role-of-ai-in-virtual-reality-immersive-experiences&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=z-8gz5h6Zcs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=z-8gz5h6Zcs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://rockpaperreality.com/insights/extended-reality/how-ai-is-making-immersive-experiences-more-powerful/" rel="noopener noreferrer"&gt;https://rockpaperreality.com/insights/extended-reality/how-ai-is-making-immersive-experiences-more-powerful/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://digitalreality.ieee.org/publications/ai-in-virtual-reality" rel="noopener noreferrer"&gt;https://digitalreality.ieee.org/publications/ai-in-virtual-reality&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://askaispace.com/whats-new/ais-role-in-enhancing-virtual-reality-experiences/" rel="noopener noreferrer"&gt;https://askaispace.com/whats-new/ais-role-in-enhancing-virtual-reality-experiences/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.theverge.com/2018/12/3/18121198/ai-generated-video-game-graphics-nvidia-driving-demo-neurips" rel="noopener noreferrer"&gt;https://www.theverge.com/2018/12/3/18121198/ai-generated-video-game-graphics-nvidia-driving-demo-neurips&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.hrfuture.net/talent-management/technology/tech-forward-hr-embracing-ai-vr-and-ar-for-employee-empowerment/" rel="noopener noreferrer"&gt;https://www.hrfuture.net/talent-management/technology/tech-forward-hr-embracing-ai-vr-and-ar-for-employee-empowerment/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>vr</category>
      <category>learning</category>
    </item>
    <item>
      <title>Intro to Ember.js Components</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Mon, 30 Sep 2024 04:41:41 +0000</pubDate>
      <link>https://dev.to/jhernandez504/intro-to-emberjs-components-2427</link>
      <guid>https://dev.to/jhernandez504/intro-to-emberjs-components-2427</guid>
      <description>&lt;p&gt;When you're researching what frameworks to use when developing an app, it's like going to a car dealership. Each car brand is, in essence, a framework. Deciding what framework would be best for developing an app comes down to preference. If you've come across Ember.js, then I welcome you!&lt;/p&gt;

&lt;p&gt;If you're just starting out with &lt;strong&gt;Ember.js&lt;/strong&gt;, one of the most exciting and important aspects you'll encounter is &lt;strong&gt;&lt;em&gt;components&lt;/em&gt;&lt;/strong&gt;. Components are the building blocks of any Ember.js application and help you break down your interface into reusable pieces. But don't worry—though they sound technical, components are a great way to keep your app organized and scalable.&lt;br&gt;
If you've search anything related to Ember, you will find there is basically two versions- &lt;em&gt;class&lt;/em&gt; Ember and Ember with &lt;em&gt;Glimmer&lt;/em&gt;, I'll walk you through classic Ember.js components, helping you understand what they are, how they work, and how to create your first one!&lt;/p&gt;
&lt;h2&gt;
  
  
  Components
&lt;/h2&gt;

&lt;p&gt;Components in Ember.js are like small, self-contained UI elements that have their own functionality and style. Let's think of them as the LEGO blocks of our application. Each block will have its own specific purpose, but when put together, they build the complete interface.&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%2Fi8wi7y9tmqu5xfbn759v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8wi7y9tmqu5xfbn759v.jpg" alt="Lego Blocks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, a button, a navigation bar, or a modal window can all be individual components. They can take inputs, manage their own state, and send actions or events to other parts of the application.&lt;/p&gt;

&lt;p&gt;If you ever ask yourself, "Why should we use components?", here are three great points.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt;: Components can be reused across multiple parts of our application, saving us time and effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Separation of Concerns&lt;/strong&gt;: Components encapsulate their behavior and template, which helps to organize code better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;: When components are well-structured, it’s easier to update and maintain them as our app grows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's start with what makes a component. An Ember component typically consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Template&lt;/strong&gt;: This is the HTML with &lt;em&gt;handlebars&lt;/em&gt; that defines the visual structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Javascript Class&lt;/strong&gt;: This file would contain the logic behind the component such as managing state or handling a user's input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Styles&lt;/strong&gt;: You can define CSS or SCSS styles specific to the component to ensure it looks just the way you want.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Template
&lt;/h2&gt;

&lt;p&gt;Now let's get started on creating a component's template.&lt;br&gt;
Assuming that we already installed ember and its dependencies, lets start by opening up our app in a coding environment. Now remember, templates are responsible for html structures of our components. In our app, we should have an existing &lt;em&gt;&lt;strong&gt;application.hbs&lt;/strong&gt;&lt;/em&gt;. We want to display a list of bears, so we would need to create a template for bear-list. For naming convention of ember components, they need to be &lt;em&gt;Pascalcase&lt;/em&gt;, which is hyphenated and file type is &lt;em&gt;&lt;strong&gt;.hbs&lt;/strong&gt;&lt;/em&gt; (handlebars).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App/templates/components/bear-list.hbs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we should have two templates for two components. Next, we will want to add structure in our &lt;em&gt;bear-list.hbs&lt;/em&gt;. Let's add a loop that will list each bear from a bears array that we will create later. You'll notice that ember uses mustache syntax to insert dynamic content, handle expressions, and invoke helpers or components.&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%2Fh11ikwk27gt5ue3ybalg.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%2Fh11ikwk27gt5ue3ybalg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Javascript Class
&lt;/h2&gt;

&lt;p&gt;Now, that we have our templates for our components, all there is left to do is create our JS files for our our bears-list component. For our bears-list, we need to defined a bears array and an action to that'll allow us to push new bears to array from an input. I won't delve too deep into what our &lt;em&gt;application.js&lt;/em&gt; will be responsible for, but it simplest terms, it will handle our state of the app and manage the data from an API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App/component/bears-list.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi9vhd0zw10dap9fo7cn.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%2Fvi9vhd0zw10dap9fo7cn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Styles
&lt;/h2&gt;

&lt;p&gt;After the bones of our application has been created, we can focus on styling our app. There should be a default app.css file that we can edit. I've decided to style our button and page. Styling is used with normal CSS formatting.&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%2Fr87tf4giruwqudxf6r25.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%2Fr87tf4giruwqudxf6r25.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;As for an introduction to Ember JS components, we can see that that components are essentially lego blocks that we can dynamically use to create interactive user interfaces for our ember applications. I hope soon to learn even more to be able to implement the use of API and routes in ember.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=53OpEYA4zPQ" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=53OpEYA4zPQ&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=50Ktfz8c34o&amp;amp;t=665s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=50Ktfz8c34o&amp;amp;t=665s&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://guides.emberjs.com/release/" rel="noopener noreferrer"&gt;https://guides.emberjs.com/release/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/ember-js-components/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/ember-js-components/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=HP7LoPx2Ivs&amp;amp;list=PLk51HrKSBQ88wDXgPF-QLMfPFlLwcjTlo&amp;amp;index=4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=HP7LoPx2Ivs&amp;amp;list=PLk51HrKSBQ88wDXgPF-QLMfPFlLwcjTlo&amp;amp;index=4&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ember</category>
      <category>learning</category>
      <category>developer</category>
    </item>
    <item>
      <title>Why is less more? Minimalistic UI</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Mon, 23 Sep 2024 01:32:50 +0000</pubDate>
      <link>https://dev.to/jhernandez504/why-is-less-more-minimalistic-ui-467l</link>
      <guid>https://dev.to/jhernandez504/why-is-less-more-minimalistic-ui-467l</guid>
      <description>&lt;p&gt;In today’s fast-paced digital world, technology plays a vital role in nearly every aspect of our lives. From mobile apps to web platforms, and from smart devices to enterprise software, one of the key elements that often determines the success of any technology is its User Interface (&lt;em&gt;UI&lt;/em&gt;). UI design serves as the bridge between users and technology, shaping how people interact with digital products. A well-designed UI not only enhances the user experience but also boosts engagement, satisfaction, and the overall success of a product.&lt;/p&gt;

&lt;p&gt;Minimalist UI &lt;em&gt;(MUI)&lt;/em&gt; design is grounded in the principle of &lt;em&gt;"less is more."&lt;/em&gt; As the years go by, this approach has slowly been trending in the many facets of our daily lives. Many well-known companies have implemented this concept already without us realizing it. &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%2F0svk1qzkqayzz64adcbd.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%2F0svk1qzkqayzz64adcbd.jpg" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So how does one create a minimalistic user-interface? Since there are various components in a UI, I'll focus on a few key concepts. By focusing only on essential elements, we can strip away all the unnecessary components, creating a clean and efficient user interface. This design approach believes that simplicity enhances both usability and user experience, making interactions more intuitive and enjoyable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplicity and Clarity
&lt;/h2&gt;

&lt;p&gt;Minimalist design is all about the &lt;em&gt;simplicity&lt;/em&gt;. This means creating interfaces with &lt;strong&gt;minimal visual elements&lt;/strong&gt; while keeping the core functionality intact. If there are less elements, that opens up the option for essential elements to be larger and better use of negative space between elements. Clutter-free screens make it easier for users to find what they need without distractions. Many apps such as DuoLingo, Spotify and even Instagram use the minimalistic approach. &lt;/p&gt;

&lt;p&gt;As mentioned above, we can implicitly, prove &lt;strong&gt;simplicity&lt;/strong&gt; has been shown to translate to increased &lt;strong&gt;user satisfaction&lt;/strong&gt;.&lt;br&gt;
If we stop and look around us, we'll notice that the devices we hold in our hands already display this. A great example of this would be &lt;em&gt;Apple&lt;/em&gt;.&lt;br&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%2F2fsqbxuuq2cx44a7gtrl.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%2F2fsqbxuuq2cx44a7gtrl.jpg" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clear navigation and legibility&lt;/strong&gt; are at the forefront of (UID). Users should immediately understand how to interact with the system, without needing to wade through unnecessary buttons or text. By eliminating excess, the interface becomes more intuitive, helping users complete tasks &lt;em&gt;quickly&lt;/em&gt; and &lt;em&gt;efficiently&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Increased Focus and Faster Load Times
&lt;/h2&gt;

&lt;p&gt;When unnecessary elements are removed, the user can focus on the key functionalities. If we do that, it encourages the removal of distractions, allowing users to concentrate on what's important, whether that’s content or the primary actions within the app. We can open up room to choose a color scheme. A proper color palette for a UI can elevate a product from the rest, such as small selection of neutral and soft colors that's less jarring to the eyes. A smooth transition between contrasting colors could make all the difference. &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%2Fidnifwxp6lvcv8yyj1th.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%2Fidnifwxp6lvcv8yyj1th.jpg" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Along with &lt;strong&gt;improved focus&lt;/strong&gt;, &lt;em&gt;fewer elements&lt;/em&gt; contribute to &lt;strong&gt;faster load times&lt;/strong&gt;, a crucial aspect of user satisfaction—especially in mobile environments. Faster performance reduces frustration and increases the likelihood of continued usage, benefiting both users and developers. I'm sure there are many who will agree with me when I say no one likes to wait for apps or pages to load&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Platform Consistency and Timelessness
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MUI&lt;/strong&gt; designs tend to be more adaptable across various platforms and devices. With fewer elements to scale or adjust, the experience remains consistent whether on a desktop, tablet, or mobile phone. Minimalist designs are also timeless, avoiding trends that can become outdated quickly.&lt;/p&gt;

&lt;p&gt;The longevity of minimalist designs is a major benefit. Simple, clean interfaces tend to age better because they don’t rely on overly ornate or trendy elements. This makes the design sustainable, requiring fewer updates to stay relevant over time.&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%2Fvzgbszhkwhedn0ig083i.jpeg" 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%2Fvzgbszhkwhedn0ig083i.jpeg" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I believe the advantages of minimalist UI design are clear. It can enhance user experiences, improve focus, speed up load times, and provide a consistent experience across most devices. While there are challenges—such as balancing simplicity with functionality—when executed well, minimalism can offer a sleek, enduring solution for modern UI design.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@lakshmandvk/the-rise-of-minimalist-ui-ux-design-in-the-digital-age-d7b321c8a32a" rel="noopener noreferrer"&gt;https://medium.com/@lakshmandvk/the-rise-of-minimalist-ui-ux-design-in-the-digital-age-d7b321c8a32a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.bighuman.com/blog/guide-to-minimalistic-user-interface-design" rel="noopener noreferrer"&gt;https://www.bighuman.com/blog/guide-to-minimalistic-user-interface-design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://sympli.io/blog/the-art-of-minimalism-in-ui-design" rel="noopener noreferrer"&gt;https://sympli.io/blog/the-art-of-minimalism-in-ui-design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://fastercapital.com/content/Clear-UI-Design-for-Better-User-Experience.html#The-Importance-of-Clarity-in-UI-Design" rel="noopener noreferrer"&gt;https://fastercapital.com/content/Clear-UI-Design-for-Better-User-Experience.html#The-Importance-of-Clarity-in-UI-Design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=XoNTygM2BOI" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=XoNTygM2BOI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://penji.co/minimalist-ui/" rel="noopener noreferrer"&gt;https://penji.co/minimalist-ui/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@thetpine254/10-mobile-app-ui-design-examples-that-are-clean-and-awesome-47ddc70536e" rel="noopener noreferrer"&gt;https://medium.com/@thetpine254/10-mobile-app-ui-design-examples-that-are-clean-and-awesome-47ddc70536e&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://bejamas.io/blog/minimalist-color-palette-and-typography-in-web-design" rel="noopener noreferrer"&gt;https://bejamas.io/blog/minimalist-color-palette-and-typography-in-web-design&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://devforum.roblox.com/t/ui-style-guide-series-minimalistic-simplistic/2578826" rel="noopener noreferrer"&gt;https://devforum.roblox.com/t/ui-style-guide-series-minimalistic-simplistic/2578826&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>minimalistic</category>
      <category>ui</category>
      <category>developer</category>
      <category>learning</category>
    </item>
    <item>
      <title>Array Method Sort on Numbers;</title>
      <dc:creator>Jeremy Hernandez</dc:creator>
      <pubDate>Thu, 08 Aug 2024 15:24:36 +0000</pubDate>
      <link>https://dev.to/jhernandez504/array-method-sort-on-numbers-dlm</link>
      <guid>https://dev.to/jhernandez504/array-method-sort-on-numbers-dlm</guid>
      <description>&lt;h2&gt;
  
  
  First experience with Sort()
&lt;/h2&gt;

&lt;p&gt;As a beginner developer learning &lt;strong&gt;Javascript&lt;/strong&gt;, there were a few things I found confusing. &lt;br&gt;
During my learning of Javascript Arrays, one of those things was &lt;em&gt;&lt;strong&gt;Sort()&lt;/strong&gt;&lt;/em&gt;. &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%2Fdl0dxi5zl94uyy6gtoxc.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%2Fdl0dxi5zl94uyy6gtoxc.png" alt="General code example of sort method" width="408" height="84"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sort was a native array method that would take an array, compare each element with the next and automatically sort its elements in ascending order. Simple right? But I had to ask myself, "&lt;em&gt;What is actually happening under the hood?&lt;/em&gt;."&lt;/p&gt;

&lt;p&gt;Take this example below.&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%2Fjkmd2d020pjye0fgkiv7.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%2Fjkmd2d020pjye0fgkiv7.png" alt="Array of numbers 1 to 10" width="800" height="196"&gt;&lt;/a&gt;&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%2Fnfxn4l77cgm4rta3zwwz.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%2Fnfxn4l77cgm4rta3zwwz.png" alt="Console logs arr array after sorting" width="800" height="59"&gt;&lt;/a&gt;&lt;br&gt;
Here, I have an array of &lt;em&gt;numbers&lt;/em&gt;, in which I would then apply the sort method on.&lt;br&gt;
In my mind, I'm thinking, "&lt;em&gt;If every number is sorted in ascending order, why is &lt;strong&gt;10&lt;/strong&gt; not at the end of this array?"&lt;/em&gt;.&lt;br&gt;
Obviously, I have zero clue on what is happening as I have had zero prior experience with programming.&lt;br&gt;
&lt;strong&gt;Sort()&lt;/strong&gt; is not behaving like I'd expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Googling
&lt;/h2&gt;

&lt;p&gt;After browsing a few online forums and a couple videos, I felt like I started to understand.&lt;/p&gt;

&lt;p&gt;If we use the sort() by itself, with no argument passed into it, the method will sort the elements in the array. But the only issue is, this method will convert the elements it reads into datatype-- &lt;em&gt;strings.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We have to remember that a method will behave like a robot so when it is reading a multi-digit string, it's seeing it as a series of numbers and not as a whole.&lt;/p&gt;

&lt;p&gt;As strings, it will compare the Unicode numerical code values  of the first character in those string numbers. The number &lt;strong&gt;10&lt;/strong&gt;'s first character is 1 which has a value less than number &lt;strong&gt;2&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;In the midst of googling up a storm on sort(), I came across some solutions to how we can change up how the sort method operates.&lt;/p&gt;

&lt;p&gt;Here, I have an array named &lt;em&gt;numbers&lt;/em&gt; with its elements in random order but I'd like to sort them in ascending order.&lt;/p&gt;

&lt;p&gt;Firstly, as an array method, Sort has () because it can accept an argument. This is what I used to change the method.&lt;/p&gt;

&lt;p&gt;Instead of allowing the method to read elements as strings, I passed in a &lt;strong&gt;parameter&lt;/strong&gt;. A &lt;em&gt;function&lt;/em&gt;, more specifically. The function itself, will take in comparative parameters, &lt;em&gt;a&lt;/em&gt; and &lt;em&gt;b&lt;/em&gt;. The function will then return a value and depending on that value, it will determine the order in which the method will sort.&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%2F1uvwj64r1k9iw9w893a5.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%2F1uvwj64r1k9iw9w893a5.png" alt="Function taking in a and b parameters" width="800" height="96"&gt;&lt;/a&gt;&lt;br&gt;
In the example above, we can see the sort() taking in a function which has parameters &lt;strong&gt;(a, b)&lt;/strong&gt; and it will no longer compare a and b as strings but &lt;em&gt;integers&lt;/em&gt;, and then it returns the &lt;em&gt;value&lt;/em&gt; resulting from &lt;em&gt;a - b&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Now, as I said before, the value will determine the sorting action. But how?&lt;/p&gt;

&lt;p&gt;In the code example, &lt;em&gt;a - b&lt;/em&gt;, it will subtract b from a. &lt;br&gt;
The resulting value can only be 1 out of 3.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Negative number&lt;/li&gt;
&lt;li&gt;Positive number&lt;/li&gt;
&lt;li&gt;0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;em&gt;a - b&lt;/em&gt; results in a number that is negative, a will come before b.&lt;br&gt;
Below, if we see &lt;strong&gt;&lt;em&gt;a&lt;/em&gt;&lt;/strong&gt; as 1 and &lt;strong&gt;&lt;em&gt;b&lt;/em&gt;&lt;/strong&gt; as 10, the difference would be &lt;em&gt;&lt;strong&gt;-9&lt;/strong&gt;&lt;/em&gt;. &lt;br&gt;
So 1 would come before 10. &lt;br&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%2Fl5542rkkzjzrn11mi4tp.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%2Fl5542rkkzjzrn11mi4tp.png" alt="1 minus 10" width="224" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, if &lt;em&gt;a - b&lt;/em&gt; results to a positive number, &lt;em&gt;b&lt;/em&gt; will come before &lt;em&gt;a&lt;/em&gt;.&lt;br&gt;
If &lt;strong&gt;&lt;em&gt;b&lt;/em&gt;&lt;/strong&gt; comes before &lt;strong&gt;&lt;em&gt;a&lt;/em&gt;&lt;/strong&gt;, 2 will now be before 10.&lt;br&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%2Fnkx4nkok13yslf4aqxs8.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%2Fnkx4nkok13yslf4aqxs8.png" alt="10 minus 2" width="200" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, if a - b equates to &lt;em&gt;zero&lt;/em&gt;, then order will remain the same.&lt;br&gt;
If my numbers array above had a duplicate number, this value would occur once.&lt;/p&gt;

&lt;p&gt;Also, on the side note, if you wanted to sort in descending order, you could do &lt;em&gt;b - a&lt;/em&gt;, which would sort inversely.&lt;/p&gt;

&lt;p&gt;As as example, &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%2Ffkp8p0m67sklw8z6150j.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%2Ffkp8p0m67sklw8z6150j.png" alt="array of 5, 5, 4" width="380" height="116"&gt;&lt;/a&gt;&lt;br&gt;
If &lt;em&gt;a - b&lt;/em&gt;, was 5 minus 5, it would result to &lt;em&gt;zero&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thoughts
&lt;/h2&gt;

&lt;p&gt;To wrap up, if you wanted to apply sort method to an array of numbers in ascending order, be sure to pass in a function like (a, b) =&amp;gt; a - b;&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://forum.freecodecamp.org/t/arr-sort-a-b-a-b-explanation/167677" rel="noopener noreferrer"&gt;https://forum.freecodecamp.org/t/arr-sort-a-b-a-b-explanation/167677&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=CTHhlx25X-U" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=CTHhlx25X-U&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/news/how-to-sort-javascript-array-accurately/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/how-to-sort-javascript-array-accurately/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/news/how-does-the-javascript-sort-function-work/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/how-does-the-javascript-sort-function-work/&lt;/a&gt;&lt;/p&gt;

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