<?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: Baba Umar</title>
    <description>The latest articles on DEV Community by Baba Umar (@notumar).</description>
    <link>https://dev.to/notumar</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%2F170202%2Fd7980ad7-113a-4574-b18d-9aceaea6ac3b.jpeg</url>
      <title>DEV Community: Baba Umar</title>
      <link>https://dev.to/notumar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/notumar"/>
    <language>en</language>
    <item>
      <title>Sizing with ems and rems</title>
      <dc:creator>Baba Umar</dc:creator>
      <pubDate>Fri, 24 Jan 2025 18:38:33 +0000</pubDate>
      <link>https://dev.to/notumar/sizing-with-ems-and-rems-d5h</link>
      <guid>https://dev.to/notumar/sizing-with-ems-and-rems-d5h</guid>
      <description>&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%2Ferml5uma1gk7w910s37k.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%2Ferml5uma1gk7w910s37k.png" alt="The default size of an M in pixels" width="434" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an em?
&lt;/h2&gt;

&lt;p&gt;The word "em" originated from the letter M and an em is a measurement equal to the size of a capital M in pixels on a screen. This is by default 16x if a font-size isn't set. &lt;code&gt;So 1em = 16px&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The em unit also defaults to the font-size of a parent element for children elements if the font-size isn't set.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where do I use ems?
&lt;/h2&gt;

&lt;p&gt;ems are a relative CSS measuring unit. Examples of other some other measuring units are :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"px" - pixels &lt;/li&gt;
&lt;li&gt;"vw" - viewport width
&lt;/li&gt;
&lt;li&gt;"in" - inches&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So you use it in places where you'll use length units such as for paddings, margins and font-sizes to name a few.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3schools.com/cssref/css_units.php" rel="noopener noreferrer"&gt;Read more about absolute and relative measuring units here&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Let's take font sizing as an example use case. Say we have a text paragraph like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; This is an example &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This looks like this in your browser:&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%2Fi9pxr098x59btqqbt1v1.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%2Fi9pxr098x59btqqbt1v1.png" alt="Rendered code" width="274" height="88"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Using pixels
&lt;/h3&gt;

&lt;p&gt;By default, it has a size of 16px. We can increase this size by specifying a pixel value in the CSS.&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;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* double the current size (i.e 2 * 16px) */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it looks like this in your browser!&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%2Fxjrqkru9qs96q6z0wg7z.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%2Fxjrqkru9qs96q6z0wg7z.png" alt="Rendered code" width="498" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have a bigger text&lt;/p&gt;




&lt;h3&gt;
  
  
  Using ems
&lt;/h3&gt;

&lt;p&gt;We can achieve the same effect using em units. If we want to double the size like we did with pixels, we simply do:&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;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* double the current size (i.e 2 * 1em [16px]) */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can still see the we have the same larger size text as in the pixel example.&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%2Fxjrqkru9qs96q6z0wg7z.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%2Fxjrqkru9qs96q6z0wg7z.png" alt="Rendered code" width="498" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we want to reduce the size relative to the default font size we can do this:&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;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* half the current size */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This basically means: &lt;br&gt;
&lt;code&gt;0.5 * 16px(1em) = 8px&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hence the new size of the text is even smaller at 8px as seen below:&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%2Fsaxwj1srrb6q1g7kvxb3.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%2Fsaxwj1srrb6q1g7kvxb3.png" alt="0.5 em visualized" width="202" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see the ems in comparison. We can have three html elements with different em values as seen below:&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"one"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am 0.5 em or 8px &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"two"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am 1em or 16px and the default font size on browsers &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"three"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am 2em or 32px which is double the size above me &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CSS
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.one&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.two&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.three&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2em&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;This is displayed as:&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%2F6xwjmqe6v4m7z01wvf6q.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%2F6xwjmqe6v4m7z01wvf6q.png" alt="Comparing all three" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why do we use ems?
&lt;/h2&gt;

&lt;p&gt;Two main examples are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Accessibility: If a user is trying to zoom in to see larger text on screen, using ems allows the browser to seamlessly resize the text based on the zoom. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexible layouts: If you have a group of UI elements like a button input and maybe some text and you want to resize them all at once, paddings and margins included, setting an em value allows you to resize them from a single reference i.e the default em unit which is the font-size of the containing element (root or a parent element)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Dangers of em unit
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;ems can be computationally expensive because they are relative, especially when they are used in complex CSS math.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compounding: So remember em units are relative to the root or parent font-size, if you set/change that value, the change is passed down to the children and they take the value from the nearest parent.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's take this example:&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am parent with size 1em or 16px
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am child with size 2em or 32px 
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"grandchild"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am grandchild with 3em or 96px because my parent is 32px!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CSS
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;1em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.grandchild&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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




&lt;p&gt;This is the compounding effect, and can lead to unwanted experiences as a user may think that the font size of the grandchild would be &lt;code&gt;3 * 16px = 48px&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How do we prevent this? rem units
&lt;/h3&gt;

&lt;p&gt;To prevent this, we have rem units which are relative to the root element.&lt;/p&gt;

&lt;p&gt;What this means is that it an em will always be the HTML root element font-size of 16px, preventing compounding, this means the example above now looks like this&lt;/p&gt;

&lt;h4&gt;
  
  
  HTML
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am parent with size 1em or 16px
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am child with size 2em or 32px 
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class= &lt;/span&gt;&lt;span class="s"&gt;"grandchild"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; I am grandchild with 3em or 48px because my parent is the root element 16px!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CSS
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.grandchild&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;MDN: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font-size#ems" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/CSS/font-size#ems&lt;/a&gt;&lt;br&gt;
W3Schools: &lt;a href="https://www.w3schools.com/cssref/css_units.php" rel="noopener noreferrer"&gt;https://www.w3schools.com/cssref/css_units.php&lt;/a&gt;&lt;br&gt;
Youtube video: &lt;a href="https://www.youtube.com/watch?v=dKvEwtqkVCs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=dKvEwtqkVCs&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to use a loading animation in your Vue app</title>
      <dc:creator>Baba Umar</dc:creator>
      <pubDate>Tue, 24 Aug 2021 02:35:34 +0000</pubDate>
      <link>https://dev.to/notumar/how-to-use-a-loading-animation-in-your-vue-app-o9f</link>
      <guid>https://dev.to/notumar/how-to-use-a-loading-animation-in-your-vue-app-o9f</guid>
      <description>&lt;h2&gt;
  
  
  Why do we need loading animations?
&lt;/h2&gt;

&lt;p&gt;Loading animations simply allow us to notify the users of an ongoing process(e.g. data retrieval, validation etc.)&lt;/p&gt;

&lt;p&gt;You can build your own using HTML and CSS &lt;a href="https://www.w3schools.com/howto/howto_css_loader.asp" rel="noopener noreferrer"&gt;here's the link to a W3schools tutorial&lt;/a&gt; or you can visit &lt;a href="https://loading.io/" rel="noopener noreferrer"&gt;Loading.io&lt;/a&gt; to see a lot of cool designs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do we use loaders in Vue
&lt;/h2&gt;

&lt;p&gt;In this article we will set up a simple loader to run when we try to retrieve data from an API. To get started:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Set up a Vue project&lt;/strong&gt;&lt;br&gt;
Requirements for Vue CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;Node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An open command line terminal on your computer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started:&lt;br&gt;
Install the Vue CLI to easily create a new Vue project from your terminal:&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%2Fjlvor1vvt2gjc6bv8m0g.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%2Fjlvor1vvt2gjc6bv8m0g.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once it has been installed, enter the code below to create a new vue project:&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%2Fzaq7wh4lqh73cpai9426.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%2Fzaq7wh4lqh73cpai9426.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;To see how to setup a Vue CLI project, click &lt;a href="https://cli.vuejs.org/guide/creating-a-project.html#vue-create" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Set up a simple Vue file&lt;/strong&gt;&lt;br&gt;
The basic Vue SFC(Single File Component) has three sections &lt;br&gt;
&lt;code&gt;&amp;lt;template&amp;gt;&amp;lt;/template&amp;gt;&lt;/code&gt; - This holds your HTML&lt;br&gt;
&lt;code&gt;&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; - This holds your Javascript&lt;br&gt;
&lt;code&gt;&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt; - This holds your css&lt;/p&gt;

&lt;p&gt;Here is a sample Vue file:&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%2Fum2mcxrbwb7t2ks2thdr.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%2Fum2mcxrbwb7t2ks2thdr.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Set up the HTML container for the data&lt;/strong&gt;&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%2Fltsa41c7kt95n3iwdpmm.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%2Fltsa41c7kt95n3iwdpmm.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Set up the CSS and layout for the container&lt;/strong&gt;&lt;br&gt;
I've set up a simple flexbox with centered content:&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%2Frmqvj0k7z7a4wugyflin.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%2Frmqvj0k7z7a4wugyflin.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Setting up data retrieval and loading animation&lt;/strong&gt;&lt;br&gt;
We can have a sample loading animation &lt;a href="https://loading.io/spinner/disk/-wordpress-disk-ball-circle-round-rotate" rel="noopener noreferrer"&gt;here&lt;/a&gt;:&lt;br&gt;
This is done in the JavaScript section and we will be using &lt;a href="https://any-api.com/nba_com/nba_com/console/_boxscore/GET" rel="noopener noreferrer"&gt;NBA boxscores&lt;/a&gt;. Here's how we'll do it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create data object and set loading to true&lt;/li&gt;
&lt;li&gt;Add a method to get data to the methods list&lt;/li&gt;
&lt;li&gt; On created, fetch the data, append to the HTML component and set loading to false to disable loading animation&lt;/li&gt;
&lt;/ul&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%2Fc22rzm77v1xvui0abqsc.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%2Fc22rzm77v1xvui0abqsc.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Finally reference the updated data in the HTML&lt;/strong&gt;&lt;br&gt;
All together now:&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%2Foveh2kmj58546jy3p2xa.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%2Foveh2kmj58546jy3p2xa.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! Now when you try to retrieve data from the endpoint, the loading animation will show first for better UX.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
