<?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: TechSnack - Technology Tutorials</title>
    <description>The latest articles on DEV Community by TechSnack - Technology Tutorials (@techsnack).</description>
    <link>https://dev.to/techsnack</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%2F684466%2Fd5efaddd-7e16-487d-a4c3-8575f4a3cee4.jpg</url>
      <title>DEV Community: TechSnack - Technology Tutorials</title>
      <link>https://dev.to/techsnack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techsnack"/>
    <language>en</language>
    <item>
      <title>The Evolution of Web Browsers: Unveiling the Magic Behind Their Functionality</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Sat, 07 Oct 2023 06:54:10 +0000</pubDate>
      <link>https://dev.to/techsnack/the-evolution-of-web-browsers-unveiling-the-magic-behind-their-functionality-2f37</link>
      <guid>https://dev.to/techsnack/the-evolution-of-web-browsers-unveiling-the-magic-behind-their-functionality-2f37</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's digital age, web browsers are our windows to the expansive online world. They seamlessly connect us to websites, deliver multimedia content, and enable online transactions. But how did these digital marvels come into existence, and what makes them work? In this article, we'll not only explore the inner workings of web browsers but also take a journey through their fascinating history.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Birth of Web Browsing
&lt;/h2&gt;

&lt;p&gt;Before we delve into the intricate details of how web browsers function, let's take a step back in time to the early days of the internet. The World Wide Web, created by Sir Tim Berners-Lee in 1989, marked the beginning of a revolutionary era. Initially, accessing web pages was a text-based affair using command-line interfaces. However, the need for a user-friendly way to navigate the web soon became apparent.&lt;/p&gt;

&lt;h3&gt;
  
  
  1990s: The Birth of Browsers
&lt;/h3&gt;

&lt;p&gt;The early 1990s saw the emergence of the first web browsers. NCSA Mosaic, created by Marc Andreessen, was one of the pioneering browsers, introducing graphical interfaces for web navigation. It allowed users to view text and images on web pages, setting the stage for the web as we know it today.&lt;/p&gt;

&lt;h3&gt;
  
  
  1994: Netscape Navigator
&lt;/h3&gt;

&lt;p&gt;Netscape Navigator, released in 1994, was a game-changer. It popularized the use of hypertext links, images, and multimedia content, making the web more visually appealing and interactive. Netscape's innovations laid the foundation for many web features we take for granted today.&lt;/p&gt;

&lt;h3&gt;
  
  
  1995: Internet Explorer
&lt;/h3&gt;

&lt;p&gt;In response to Netscape's success, Microsoft launched Internet Explorer, leading to the first browser war. This competition resulted in rapid advancements in browser technology and improved support for emerging web standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  2000s: The Browser Wars and the Rise of Mozilla Firefox
&lt;/h3&gt;

&lt;p&gt;The early 2000s continued to see fierce competition between browsers, with Internet Explorer and Netscape battling for dominance. However, a significant turning point occurred when Mozilla Firefox was released in 2004. Firefox gained a reputation for being faster, more secure, and more compliant with web standards, sparking a new era of browser innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Modern Web Browser
&lt;/h2&gt;

&lt;p&gt;Now that we've journeyed through the history of web browsers, let's explore how these browsers function today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User Interface: The user interface (UI) provides the familiar address bar, tabs, buttons, and other elements. It's a far cry from the early days of text-based browsing, thanks to user-centric design principles.&lt;/li&gt;
&lt;li&gt;Rendering Engine: The core of a modern browser, the rendering engine, interprets HTML, CSS, and JavaScript to render web pages accurately. Browsers like Chrome use Blink, Firefox employs Gecko, and Safari utilizes WebKit.&lt;/li&gt;
&lt;li&gt;Networking: Browsers must connect to the internet to fetch web content. They use protocols like HTTP and HTTPS to request data from web servers.&lt;/li&gt;
&lt;li&gt;Browser Engine: This component manages user interactions, such as clicking links and navigating the UI, instructing the rendering engine on what to display.&lt;/li&gt;
&lt;li&gt;JavaScript Engine: JavaScript plays a pivotal role in web interactivity. Browsers are equipped with JavaScript engines (e.g., V8 in Chrome) to execute and process JavaScript code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Browsing Process
&lt;/h2&gt;

&lt;p&gt;Here's how these elements come together to display web pages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Requesting a Web Page
&lt;/h3&gt;

&lt;p&gt;When you enter a URL in the address bar and press Enter, the browser's networking component sends a request to the web server hosting the website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Receiving Data
&lt;/h3&gt;

&lt;p&gt;The web server processes the request and sends back a response containing the web page's content, often written in HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Rendering the Web Page
&lt;/h3&gt;

&lt;p&gt;The rendering engine interprets the HTML, CSS, and JavaScript to create a Document Object Model (DOM) and a CSS Object Model (CSSOM). These models define the page's structure and styling. The rendering engine then combines them to create a Render Tree, which determines the layout and appearance of each element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Interactivity with JavaScript
&lt;/h3&gt;

&lt;p&gt;If the web page includes JavaScript code, the browser's JavaScript engine executes it, enabling dynamic interactions like animations and form submissions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Continuous Updates
&lt;/h3&gt;

&lt;p&gt;Web browsers continuously check for updates on the web page, ensuring smooth user experiences. When updates occur, the rendering engine repaints and reflows affected parts of the page.&lt;/p&gt;

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

&lt;p&gt;Web browsers have come a long way since the early days of the internet, evolving into the sophisticated tools we rely on daily. By understanding their history and inner workings, we gain a deeper appreciation for the technology that makes the internet accessible and interactive. The next time you open your favorite browser, remember the journey it took to bring you the boundless world of the internet.&lt;/p&gt;

&lt;p&gt;Stay tuned for the next article where we will exploring how the modern web browser works in-depth.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Resurrecting an open-source text based game? *Seeking collaborators*</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Wed, 30 Aug 2023 03:50:00 +0000</pubDate>
      <link>https://dev.to/techsnack/resurrecting-an-open-source-text-based-game-seeking-collaborators-483n</link>
      <guid>https://dev.to/techsnack/resurrecting-an-open-source-text-based-game-seeking-collaborators-483n</guid>
      <description>&lt;p&gt;I have been interested in beginning a new project and figured this may be a good place to take the first step.&lt;/p&gt;

&lt;p&gt;There are open-source projects from places like sourceforge that are built on outdated PHP packages that I would like to resurrect from the dead. Some of these games are what inspired me to get into web development such as solar-empire.net and LoTGD. I feel as though a great way to resurrect them would be to begin the discussion surrounding who would be willing to toss some spare time at a passion project, which open-source project to begin with and the stacks and packages that could be used to best achieve our end goal.&lt;/p&gt;

&lt;p&gt;If any of you are familiar with the browser based games I mentioned above then you may have noticed that I am over the age of 30. Because of this fact, and a yearning to learn how these games were made, I began diving into web dev technologies over 20 years ago. Since then I have forged a path forward with my passion and have secured a job as a professional full stack developer. I also have nearly three years experience as a project manager in the industry. As such I feel as if I may be in a unique position to finally begin this project!&lt;/p&gt;

&lt;p&gt;Please, understand that anybody who may wish to be involved will be volunteering their time unless we can crowd source funding or find a revenue stream out of this project. As such this is currently considered a passion project and would only serve to help you gain more experience, a project to put on your portfolio and the enjoyment of having been a part of restoring a part of Internet history.&lt;/p&gt;

&lt;p&gt;If your interest has been piqued then feel free to comment here to begin the discussion. If this gains any sort of traction we will centralize our communications.&lt;/p&gt;

&lt;p&gt;Thank you for reading this far ♥️&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is your favorite programming language and why?</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Wed, 30 Aug 2023 01:46:46 +0000</pubDate>
      <link>https://dev.to/techsnack/what-is-your-favorite-programming-language-and-why-1mcp</link>
      <guid>https://dev.to/techsnack/what-is-your-favorite-programming-language-and-why-1mcp</guid>
      <description>&lt;p&gt;There are so many languages out there that enable us to create so many new things. So, I got curious what languages others may find to be the best tool for the job.&lt;/p&gt;

&lt;p&gt;I'll start. I enjoy using JavaScript the most due to its versatility and what it allows front-end devs to produce. Let me know in the comments what you think!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>discuss</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>What is a 'Lambda' function?</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Tue, 29 Aug 2023 06:05:48 +0000</pubDate>
      <link>https://dev.to/techsnack/what-is-a-lambda-function-4e5o</link>
      <guid>https://dev.to/techsnack/what-is-a-lambda-function-4e5o</guid>
      <description>&lt;p&gt;Many of you may be familiar with the term &lt;em&gt;Lambda function&lt;/em&gt;. Maybe you've heard somebody in the programming field use it. But, what is it truly and how can we most simply describe it? To begin answering this question we first need to understand the origin and usage of the term so that we may move past that aspect of the term and begin looking more closely at what this elusive term really means in the simplest terms possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Historical origin and usage:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To begin with let's touch on the origin of the term and its initial usage. &lt;em&gt;Lambda Function&lt;/em&gt; is derived from a calculus term &lt;a href="https://en.m.wikipedia.org/wiki/Lambda_calculus"&gt;Lambda calculus&lt;/a&gt; (λ-calculus) and was used to describe a formal mathematical system, which simply put, requires three &lt;em&gt;lambda terms&lt;/em&gt; and two reduction steps. Basically, it is a mathematical system consisting of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A Lambda term or a parameter representing a mathematical or logical value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Lambda abstraction or a specific function definition M&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An application of function M to argument N&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You may read more deeply on the entire subject at the Wiki link above if you wish. For those of us looking for a concise description let's move on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Evolution of the term and modern usage&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Moving beyond the days of the early 1900s a new form of function programming had become a more widely studied and understood field. Computer programming was now a tool that people could utilize to build upon the years of mathematical and electronical understandings. To spare you all the extensive history lesson I will briefly touch on a few major revolutions which led to the term we are discussing today.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Programmable electronic computers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compilers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Low-level programming languages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High-level programming languages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Programming paradigms&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As each of these burgeoning technologies were coming into being it brought with it years of mathematical principles which were now being utilized in a very new way. One of these principles was the functional programming paradigms whereby functional algorithms were used, as opposed to the object oriented programming paradigms, to write extendable, re-usable and efficient snippets of code.&lt;/p&gt;

&lt;p&gt;One such type of function was the &lt;em&gt;Anonymous Function&lt;/em&gt;. This particular type of function would simply be an unnamed function. Now, for the simple definition: &lt;strong&gt;&lt;em&gt;A Lambda Function is an Anonymous function  generally adhering to the principle constraints of the lambda calculus and written in a single line of code.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In summary a Lambda Function is a very simple concept whose name is a historical artifact which generally tends to overcomplicate and overshadow it's meaning. Not only is the lambda function a powerful tool but it also embodies the spirit of elegance and simplicity that all great mathematical concepts seem to have in common.&lt;/p&gt;




&lt;p&gt;I would love to share some examples and common use cases of this concept in the future. If you have any questions or wish to report inaccurate information please leave a comment so that I may address them.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>api</category>
      <category>learning</category>
    </item>
    <item>
      <title>What I Learned | My First Client | Web Startup</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Sun, 26 Sep 2021 17:29:27 +0000</pubDate>
      <link>https://dev.to/techsnack/what-i-learned-my-first-client-web-startup-4mkj</link>
      <guid>https://dev.to/techsnack/what-i-learned-my-first-client-web-startup-4mkj</guid>
      <description>&lt;h3&gt;
  
  
  A little bit about me
&lt;/h3&gt;

&lt;p&gt;My name is James and I have been doing full stack web development for since 2002. Mind you until recently this was only a hobby that I have only recently decided to turn into a career path. Now, that is not to say that I haven't been "keeping up with the code-ashions", throughout the years I have observed and kept up with the evolution of everything from HTML/CSS/JS/PHP/SQL to frameworks and tools like Node.JS and Bootstrap. I understand that this is most likely not the case for most of you, but don't worry. As long as you are adept at using a search engine and you have the drive to learn/implement new concepts you will be just fine! Anyway, let's get into it!&lt;/p&gt;

&lt;h3&gt;
  
  
  Services / Setting rate
&lt;/h3&gt;

&lt;p&gt;Depending on your experience level you may be able to offer services from a wide range of possible services. You may also want to pay a contractor to do some of the things you cannot. I did this for Dev-ops work on my first project and I am glad I did. Some of the services I am able to offer are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web Design (Figma)&lt;/li&gt;
&lt;li&gt;Web Development&lt;/li&gt;
&lt;li&gt;Managed Hosting (contracted out)&lt;/li&gt;
&lt;li&gt;Dev-ops (contracted out)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As far as setting a rate goes this is completely up to you. Do you want paid a lump sum on a per project basis? Would you rather charge based on an *hourly rate x project time estimate"? You can also have a mix of box which was ultimately the way I chose to go. We will cover this below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding the first client / Being sought out
&lt;/h3&gt;

&lt;p&gt;This is a notoriously hard step that I kinda lucked out on but I will explain how it worked for me so that you may be able to find your first client successfully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Word-of-mouth&lt;/strong&gt; is one of the great advertising tools out there. Even with most modern advancements this method is still regarded as one of the best! I know, asking for help is hard, but believe me you will regret no asking for help more often than you will for having asked for help. Now, how do we use this helpful method??? Family and friends, of course, by starting a conversation on social media we can ask the people we know whether they know anybody in need of our services. This is the method I chose and it worked out well for me. Within one day of reaching out for help I was talking to who I am now able to call my first client!&lt;/p&gt;

&lt;p&gt;Just a small note, there is no one direct way to success at this stage, I have heard it said, "In order to be successful as a web agency startup you need to understand that luck plays a large roll but not as large a roll as drive, determination and willpower."&lt;/p&gt;

&lt;p&gt;In the comments please let us know any other methods you have used. Was it successful? How are things going now?&lt;/p&gt;

&lt;h3&gt;
  
  
  Landing the project / Getting hired
&lt;/h3&gt;

&lt;p&gt;It is important to keep in mind that once you have found a potential client, or they have found you, this is not a done deal just yet. Actually, it is at this stage is where a lot of soft skills come into play, and it seems the most important aspect of this stage (and many others) is effective communication. You may be communicating over DMs, email or in so many other ways. You should remain concise and professional at all times. &lt;/p&gt;

&lt;p&gt;What should this conversation entail? Well, this is a highly variable situation and is not a cookie-cutter type thing. These conversations have an ebb-and-flow with some basic consistencies across many projects. Some of the information you will likely be asked for is as such:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much experience do you have in _____?&lt;/li&gt;
&lt;li&gt;What is your rate?&lt;/li&gt;
&lt;li&gt;Do you offer ____?&lt;/li&gt;
&lt;li&gt;Can you provide examples of other relevant projects?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE: Sometimes you will find out that they have paid another agency to do work for them in the past. Sometimes this may mean that you are expected to re-work an old agency's shoddy work. In the case of my first client this was a near $1,000 site in which she had to remove due to copy-written materials that the other agency has used. This resulted in the need for a fresh build.&lt;/p&gt;

&lt;p&gt;If the client seems interested after interviewing you then we can proceed.There are questions you will need answers for in order to offer up a proposal for the job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this a fresh build or a redevelopment of an existing build?&lt;/li&gt;
&lt;li&gt;What are the features they will be needing?&lt;/li&gt;
&lt;li&gt;Do they need a design made or will they be providing one?&lt;/li&gt;
&lt;li&gt;Will they need media/assets or will they be providing them?&lt;/li&gt;
&lt;li&gt;Are they using a hosting/managed hosting platform?&lt;/li&gt;
&lt;li&gt;Do they have a tech stack in mind?&lt;/li&gt;
&lt;li&gt;Will they need managed hosting?&lt;/li&gt;
&lt;li&gt;Do they own a domain name (or multiple)?&lt;/li&gt;
&lt;li&gt;What is the time frame for release?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From these questions we can start to build a foundation from which to work from. I will use my first client as an example below:&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluating Work / Scoping out the project / Making a proposal
&lt;/h3&gt;

&lt;p&gt;Once we have gathered the relevant information we can begin to look closer at the job itself. &lt;strong&gt;We will want to make sure that we can not only provide the services needed but that we can do it within the allotted time frame.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NOTE: You may need to outsource some of the work to contractor(s) or other agencies and this is perfectly fine. I had to employ the help of a dev-ops friend in order to deliver for my first client. &lt;strong&gt;Don't assume that because you know server-side or back-end programming that you also know how to configure servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make sure that we are able to deliver the work we promise we must review the answers we get to this question and break it down into its constituent parts. In order to do this effectively I took the information I gathered and made the following Document:&lt;br&gt;
&lt;a href="//tinyurl.com/vrhp67w"&gt;Scope Document&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will notice how this document contains a layman explanation, a detailed list of technical jobs and a breakdown of price (per service). This ensures that we are being entirely transparent with our client as to our intentions.&lt;/p&gt;

&lt;p&gt;Once completed and we are happy with the scope we should send this over to the potential client to review. &lt;strong&gt;Only once there is a mutually agreed upon scope will we begin the work!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What's next?
&lt;/h3&gt;

&lt;p&gt;If you vetted everything appropriately you should be able to get to work on your first client's project!&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;You can find my first client's website &lt;a href="//curtisandgrammykindkids.com"&gt;Here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To employ us for your next web project:&lt;br&gt;
Email: &lt;a href="mailto:jamesromesberg@gmail.com"&gt;jamesromesberg@gmail.com&lt;/a&gt;&lt;br&gt;
Phone: (814)485-1621&lt;/p&gt;

&lt;p&gt;Follow us on &lt;a href="https://www.facebook.com/GvGMediaSolutions"&gt;Facebook!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow us on &lt;a href="https://twitter.com/RomesbergJames"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>design</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>Understanding Progressive Web Apps: Delivering a Mobile Experience - HTML5 and JavaScript Service Workers in 2021</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Sun, 15 Aug 2021 08:05:19 +0000</pubDate>
      <link>https://dev.to/techsnack/simple-progressive-web-apps-websites-you-can-install-3k0e</link>
      <guid>https://dev.to/techsnack/simple-progressive-web-apps-websites-you-can-install-3k0e</guid>
      <description>&lt;h2&gt;
  
  
  What is a PWA?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A PWA (Progressive Web Application) is a type of app software delivered through the web. PWAs are built using common technologies such as HTML, CSS and JavaScript. They can be installed and function on any platform which uses a W3C compliant web browser on either desktop or mobile devices.&lt;br&gt;
It is important to note that the browser will allow your web application to become a PWA only over a &lt;code&gt;secure connection&lt;/code&gt; (using SSL encryption technology) or on &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Who Can Install PWAs?
&lt;/h3&gt;

&lt;p&gt;Support for PWAs are mostly focused around mobile browsers but there is limited support for some desktop browsers as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  Support as of August 2021:
&lt;/h4&gt;
&lt;h5&gt;
  
  
  Mobile:
&lt;/h5&gt;

&lt;p&gt;Nearly every mobile browser supports PWAs, with the exception of KaiOS&lt;/p&gt;
&lt;h5&gt;
  
  
  Desktop:
&lt;/h5&gt;

&lt;p&gt;Chrome 39 &amp;amp; UP&lt;br&gt;
Edge 79 &amp;amp; UP&lt;br&gt;
IOS Safari/Chrome 11.3 &amp;amp; UP - Partial Support&lt;br&gt;
Firefox - Deprecated as of January 2021&lt;/p&gt;
&lt;/blockquote&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%2Fxyysfqvzxebf6fjq5p6p.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%2Fxyysfqvzxebf6fjq5p6p.png" alt="Progressive Web App Browser Support Table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Screenshot from &lt;a href="https://caniuse.com/?search=PWA" rel="noopener noreferrer"&gt;caniuse.com&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should I Develop PWAs?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  Purpose:
&lt;/h4&gt;

&lt;p&gt;PWAs allow us to offer web applications that can be installed onto any device and act indistinguishably from a native app.&lt;br&gt;
By meeting certain criteria, your website or web application can easily be turned into a PWA as well.&lt;/p&gt;
&lt;h4&gt;
  
  
  Required Technologies:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;NodeJS (optional package that we will be using here)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Benefits:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Application Store Registration&lt;/li&gt;
&lt;li&gt;Offline Fallbacks&lt;/li&gt;
&lt;li&gt;Network or Cache First Resource Fetching&lt;/li&gt;
&lt;li&gt;Push Notifications&lt;/li&gt;
&lt;li&gt;Background Sync&lt;/li&gt;
&lt;li&gt;And More&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  It doesn't take much to get started!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Our File Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    -root/
      -index.html
      -manifest.json
      -service-worker.js
      -logo.[png, jpg, etc...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  index.html
&lt;/h2&gt;

&lt;p&gt;Development can start with a basic HTML5 boilerplate.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML5 Boilerplate
&lt;/h3&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;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;TechSnack Simple PWA&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello World!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  manifest.json
&lt;/h2&gt;

&lt;p&gt;In order for the user's device to know what to do with our web application, we are going to need to provide it some details. These details are fairly self explanatory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We will leave the &lt;code&gt;icons&lt;/code&gt; array empty for now. More on this shortly.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack Simple PWA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/?home=true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"theme_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&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="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#FFFFFF"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fullscreen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"portrait"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;With this information the user's device can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install our application&lt;/li&gt;
&lt;li&gt;Apply a custom icon for launching the app&lt;/li&gt;
&lt;li&gt;Display a custom splash screen on launch&lt;/li&gt;
&lt;li&gt;Allow customization of the application window and behaviour&lt;/li&gt;
&lt;li&gt;Mimic native application behaviour&lt;/li&gt;
&lt;li&gt;Allow access to native features such as GPS and push notifications&lt;/li&gt;
&lt;li&gt;Register our application with popular app stores&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Linking manifest.json
&lt;/h2&gt;

&lt;p&gt;Use the &lt;code&gt;link&lt;/code&gt; tag to connect &lt;code&gt;manifest.json&lt;/code&gt; to our app&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;head&amp;gt;&lt;/span&gt;

      ...

      &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"manifest"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"manifest.json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Node Packages (1 - optional)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/pwa-asset-generator" rel="noopener noreferrer"&gt;pwa-asset-generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;As previously mentioned, the user's device will apply the custom icon for us. For it to do that we will need to supply at least one image for the device to reference.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What about multiple screen sizes or resolutions?
&lt;/h3&gt;

&lt;p&gt;There are countless different mobile devices being used around the world today. To optimize the display of visual assets, each device prefers logos of a certain dimension.&lt;/p&gt;

&lt;h2&gt;
  
  
  pwa-asset-generator
&lt;/h2&gt;

&lt;p&gt;You will need at least one image file of the following MIME types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PNG&lt;/li&gt;
&lt;li&gt;JPEG/JPG&lt;/li&gt;
&lt;li&gt;SVG&lt;/li&gt;
&lt;li&gt;WebP&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $ npm install --global pwa-asset-generator
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;We will now want to run the package in our &lt;code&gt;webroot&lt;/code&gt; directory.&lt;br&gt;
The following snippet will do for our purposes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx pwa-asset-generator [path/to/logo] [path/to/output/dir] -i [path/to/index.html] -m [path/to/manifest.json] -f&lt;/code&gt;&lt;br&gt;
The &lt;code&gt;-f&lt;/code&gt; flag generates favicon image/meta tag&lt;/p&gt;
&lt;h3&gt;
  
  
  Execution - From &lt;code&gt;webroot&lt;/code&gt; directory
&lt;/h3&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $ npx pwa-asset-generator logo.jpg logos -i index.html -m manifest.json -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&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%2F2sx52e4v6s2mn2yhjx4t.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%2F2sx52e4v6s2mn2yhjx4t.png" alt="Command line output | pwa-asset-generator | npm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is worth noting that if you execute &lt;code&gt;pwa-asset-generator&lt;/code&gt; without using the &lt;code&gt;-i&lt;/code&gt;, &lt;code&gt;-m&lt;/code&gt; and &lt;code&gt;-f&lt;/code&gt; flags the results will be output to your console instead.&lt;/p&gt;

&lt;p&gt;Copy and paste the results into the &lt;code&gt;icons&lt;/code&gt; array within &lt;code&gt;manifest.json&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fmnb02co2lbdp3ay0oltb.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%2Fmnb02co2lbdp3ay0oltb.png" alt="Command line output | pwa-asset-generator | npm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Copy and paste the output into the &lt;code&gt;head&lt;/code&gt; tag of &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fli3s906b1r3i36tzmlgl.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%2Fli3s906b1r3i36tzmlgl.png" alt="Command line output | pwa-asset-generator | npm"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  New &lt;code&gt;icons/&lt;/code&gt; directory
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Contains all of the generated images.&lt;/p&gt;
&lt;/blockquote&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%2Fzhad7nlvodfcmmgh0q1p.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%2Fzhad7nlvodfcmmgh0q1p.png" alt="Directory Structure for PWA Icon Images"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Updated &lt;code&gt;index.html&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Our &lt;code&gt;index.html&lt;/code&gt; file should look like this now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    &amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;meta name="theme-color" content="#000000"&amp;gt;
    &amp;lt;link rel="apple-touch-icon" href="icons/apple-icon-180.png"&amp;gt;

    &amp;lt;meta name="apple-mobile-web-app-capable" content="yes"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2048-2732.jpg" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2732-2048.jpg" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1668-2388.jpg" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2388-1668.jpg" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1536-2048.jpg" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2048-1536.jpg" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1668-2224.jpg" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2224-1668.jpg" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1620-2160.jpg" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2160-1620.jpg" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1284-2778.jpg" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2778-1284.jpg" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1170-2532.jpg" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2532-1170.jpg" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1125-2436.jpg" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2436-1125.jpg" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1242-2688.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2688-1242.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-828-1792.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1792-828.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1242-2208.jpg" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-2208-1242.jpg" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-750-1334.jpg" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1334-750.jpg" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-640-1136.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&amp;gt;
    &amp;lt;link rel="apple-touch-startup-image" href="icons/apple-splash-1136-640.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&amp;gt;

    &amp;lt;title&amp;gt;TechSnack | Simple PWA&amp;lt;/title&amp;gt;
    &amp;lt;link id="favicon" rel="sortcut icon" href="favicon.ico" type="image/x-icon"&amp;gt;
    &amp;lt;link rel="manifest" href="manifest.json"&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Final &lt;code&gt;manifest.json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Our &lt;code&gt;manifest.json&lt;/code&gt; file should look like this now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack Simple PWA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/?home=true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/manifest-icon-192.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maskable any"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/manifest-icon-512.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maskable any"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"theme_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&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="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#FFFFFF"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fullscreen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"portrait"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Service Worker
&lt;/h2&gt;

&lt;p&gt;Before our PWA can do all of the fancy things previously mentioned we must first create a service worker.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A service worker is a listener script the browser runs in the background. The service worker runs separately from the webpage allowing for the implementation of features that do not require interaction or calls from the webpage or user.&lt;br&gt;
Service Workers may support features such as &lt;code&gt;periodic sync&lt;/code&gt; or &lt;code&gt;geofencing&lt;/code&gt; in the future.&lt;br&gt;
NOTE: Although service workers are a JavaScript file, there are additional limitations imposed when coding. You may not have access to the DOM through a service worker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Lifecycle of a Service Worker
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;There are multiple functions/features that you would normally have to build out around &lt;a href="https://developers.google.com/web/fundamentals/primers/service-workers" rel="noopener noreferrer"&gt;A Service Workers Lifecycle&lt;/a&gt;.&lt;br&gt;
We will be using an API called &lt;code&gt;workbox&lt;/code&gt; to avoid worrying about configuring what is under the hood.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;workbox&lt;/code&gt; API
&lt;/h3&gt;

&lt;p&gt;For our service worker, we are going to employ the use of an API called &lt;code&gt;workbox&lt;/code&gt;. This API offers baked-in features that would require multiple articles to describe on its own. &lt;br&gt;
If you are interested in digging into the nitty gritty you can read about &lt;a href="https://developers.google.com/web/fundamentals/primers/service-workers" rel="noopener noreferrer"&gt;A Service Workers Lifecycle&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;ImportScript&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Inside of &lt;code&gt;service-worker.js&lt;/code&gt; we will &lt;code&gt;import&lt;/code&gt; the &lt;code&gt;workbox API&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nf"&gt;importScripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://storage.googleapis.com/workbox-cdn/releases/6.0.2/workbox-sw.js&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;/blockquote&gt;
&lt;h4&gt;
  
  
  Registering Routes
&lt;/h4&gt;

&lt;p&gt;A service worker can intercept network requests from a page. It may respond to the page with &lt;code&gt;cached content&lt;/code&gt; or &lt;code&gt;generated content&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;cite&gt;Screenshot from &lt;a href="https://developers.google.com/web/tools/workbox/modules/workbox-routing" rel="noopener noreferrer"&gt;Google Dev&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: (From Above)&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;method&lt;/code&gt; is &lt;code&gt;GET&lt;/code&gt; by default.&lt;br&gt;
To change this it must be specified.&lt;/p&gt;

&lt;p&gt;The order of route registration is important when multiple workers are available to handle a request.&lt;br&gt;
Whichever worker has been created &lt;code&gt;first&lt;/code&gt; will take priority in handling a given request.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;service-worker.js&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;We can now add the following code within &lt;code&gt;service-worker.js&lt;/code&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="p"&gt;...&lt;/span&gt;

    &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strategies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CacheFirst&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;//to search cache first&lt;/span&gt;
      &lt;span class="c1"&gt;//new workbox.strategies.NetworkFirst() //to search server first&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;That's it! The above code will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;RegisterRoute&lt;/code&gt; with &lt;code&gt;workbox&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Intercept all &lt;code&gt;'image'&lt;/code&gt; files at the page's &lt;code&gt;request&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here we choose our &lt;code&gt;strategies&lt;/code&gt;. Would we like to serve to our page from &lt;code&gt;CacheFirst&lt;/code&gt; or &lt;code&gt;NetworkFirst&lt;/code&gt;? This we will decide by whether the specific resource(s) we are interested in is &lt;code&gt;static&lt;/code&gt; or &lt;code&gt;dynamic&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If they are generally &lt;code&gt;static&lt;/code&gt; to the page our user lands on then we will want to serve them from &lt;code&gt;cache&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;However, if they are &lt;code&gt;dynamically generated&lt;/code&gt; by some sort of &lt;code&gt;back-end&lt;/code&gt; then we would want to largely get that file from the &lt;code&gt;network&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final &lt;code&gt;service-worker.js&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
    &lt;span class="nf"&gt;importScripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://storage.googleapis.com/workbox-cdn/releases/6.0.2/workbox-sw.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strategies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CacheFirst&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;//to search cache first&lt;/span&gt;
      &lt;span class="c1"&gt;//new workbox.strategies.NetworkFirst() //to search server first&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linking &lt;code&gt;service-worker.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Now that we have our service worker in place and intercepting requests for image files, we can link our script within &lt;code&gt;index.html&lt;/code&gt;&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;body&amp;gt;&lt;/span&gt;

      ...

      &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;serviceWorker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/service-worker.js&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its that simple to register our service worker!&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it all together
&lt;/h2&gt;

&lt;p&gt;We can finally take a look at the final code base for our PWA project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our File Structure:
&lt;/h3&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%2F7egcbtjwcwf6u89c5s25.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%2F7egcbtjwcwf6u89c5s25.png" alt="Progressive Web Application | File Structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;index.html&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;    &lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"theme-color"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"#000000"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-icon"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-icon-180.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"apple-mobile-web-app-capable"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2048-2732.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2732-2048.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1668-2388.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2388-1668.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1536-2048.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2048-1536.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1668-2224.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2224-1668.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1620-2160.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2160-1620.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1284-2778.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2778-1284.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1170-2532.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2532-1170.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1125-2436.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2436-1125.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1242-2688.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2688-1242.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-828-1792.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1792-828.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1242-2208.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-2208-1242.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-750-1334.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1334-750.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-640-1136.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-startup-image"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"icons/apple-splash-1136-640.jpg"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;TechSnack | Simple PWA&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"favicon"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"sortcut icon"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"favicon.ico"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"image/x-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"manifest"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"manifest.json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello World!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
          &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;serviceWorker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/service-worker.js&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;manifest.json&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack Simple PWA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TechSnack"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/?home=true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/manifest-icon-192.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maskable any"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"icons/manifest-icon-512.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maskable any"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"theme_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&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="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#FFFFFF"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fullscreen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"portrait"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;service-worker.js&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="nf"&gt;importScripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://storage.googleapis.com/workbox-cdn/releases/6.0.2/workbox-sw.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;workbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strategies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CacheFirst&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;//to search cache first&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Serving Our Page
&lt;/h2&gt;

&lt;p&gt;We can now view our page in the browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For &lt;code&gt;localhost&lt;/code&gt; run &lt;code&gt;npx serve&lt;/code&gt; in the &lt;code&gt;webroot&lt;/code&gt; directory.&lt;br&gt;
Then you can visit your securely served &lt;code&gt;remote ip&lt;/code&gt; or &lt;code&gt;domain&lt;/code&gt;&lt;br&gt;
Please keep in mind the browser support for your device&lt;/p&gt;
&lt;/blockquote&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%2Fqikvlp6v89pjuf2m7fu8.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%2Fqikvlp6v89pjuf2m7fu8.png" alt="Progressive Web App In Browser Window"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is a new icon in our address bar!&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%2Fxcdhvcm35vzjsv21dixl.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%2Fxcdhvcm35vzjsv21dixl.png" alt="Progressive Web App | Install User Action Icon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The browser requires a &lt;code&gt;user action&lt;/code&gt; to install the PWA&lt;br&gt;
The User can click this icon to see the &lt;code&gt;prompt&lt;/code&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%2Fh2xzzmc5c26z8hon8wfl.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%2Fh2xzzmc5c26z8hon8wfl.png" alt="Progressive Web App | Install User Action Prompt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can click on the icon installed on the device's homepage&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%2F29weqkudnzkfiiqzl9u9.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%2F29weqkudnzkfiiqzl9u9.png" alt="PWA Application Running in Program Browser Window "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Summarization of PWA Development
&lt;/h2&gt;

&lt;p&gt;As you can see it is super easy to create a web application that can mimic the same functions as a native app. In future articles we will delve into each feature that we will now have access to with this powerful piece of technology.&lt;/p&gt;

&lt;h3&gt;
  
  
  Help TechSnack Write Concise Content:
&lt;/h3&gt;

&lt;p&gt;Leave us a comment with your thoughts on the article below. Whether you liked or disliked the article, all feedback will help me to know how to better create content that meets your needs, goals and aspirations.&lt;/p&gt;

&lt;p&gt;Sharing the article on your social platforms would also be a great help!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/RomesbergJames" rel="noopener noreferrer"&gt;Follow TechSnack on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the conversation at &lt;a href="https://www.reddit.com/r/TechSnack/" rel="noopener noreferrer"&gt;r/TechSnack&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>pwa</category>
    </item>
    <item>
      <title>Pure CSS Flex Box Responsive Design - No Media Queries</title>
      <dc:creator>TechSnack - Technology Tutorials</dc:creator>
      <pubDate>Thu, 12 Aug 2021 20:57:01 +0000</pubDate>
      <link>https://dev.to/techsnack/pure-css-flex-box-responsive-design-no-media-queries-p7o</link>
      <guid>https://dev.to/techsnack/pure-css-flex-box-responsive-design-no-media-queries-p7o</guid>
      <description>&lt;h2&gt;
  
  
  Responsive Design Doesn't Have To Be Hard
&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/romesbergjames/embed/mdmaxGv?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  With Flex Box we can easily make our webpage act as a responsive container without media queries!
&lt;/h3&gt;

&lt;p&gt;To start with we are going to quickly create a file with the following HTML inside of it&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"viewport flex-parent flex-col"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"nav flex-parent space-around"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"box-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"box-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"box-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;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&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content flex-parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"sidebar-left"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"main-area"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"sidebar-right"&lt;/span&gt;&lt;span class="nt"&gt;&amp;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&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer flex-parent space-evenly"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"box-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"box-5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&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;"box-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;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;p&gt;...and this is it for the HTML. That's our entire page!&lt;/p&gt;

&lt;h2&gt;
  
  
  Now the CSS
&lt;/h2&gt;

&lt;p&gt;At this point the page is blank. We will fix that by styling it right now. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;*&lt;/code&gt; CSS RESET
&lt;/h3&gt;

&lt;p&gt;The first thing we will do is a basic reset to all of the elements in the document. This will set everything to border-box sizing and remove all margins and padding.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&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;padding&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="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;.viewport&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We can now create the &lt;code&gt;viewport&lt;/code&gt; class. We want this element to take up all available space within the device's screen.&lt;br&gt;
Just to emphasize where the viewport is we will also give it a large black border (this is not necessary when you have inner content or other elements to display)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.viewport&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;min-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="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&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;Next we can make our &lt;code&gt;viewport&lt;/code&gt; class responsive with the following class. &lt;code&gt;.viewport&lt;/code&gt; is now a Flex Box container!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.flex-parent&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&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 default Flex Box containers display vertically but we would like our &lt;code&gt;viewport flex-parent&lt;/code&gt; element to display horizontally. We can achieve this with the following flex property.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.flex-col&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  That's it for the flex box container.
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Now we can begin creating the flex children.
&lt;/h2&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;.nav&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The first child element will be &lt;code&gt;.nav&lt;/code&gt; This is our general header area. Let's make the width &lt;code&gt;100%&lt;/code&gt; of the container's width and the height &lt;code&gt;20vh&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.nav&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="nb"&gt;dashed&lt;/span&gt; &lt;span class="no"&gt;blue&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;Since we want to place elements inside of &lt;code&gt;.nav&lt;/code&gt; we will give it the class &lt;code&gt;.flex-parent&lt;/code&gt; and we will also demonstrate a key aspect of Flex Box here.&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;justify-content&lt;/code&gt; flex property
&lt;/h3&gt;

&lt;p&gt;Empty space is crucial. If you have ever attempted to position something with pure CSS without the use of Flex Box or CSS Grids then you know how difficult this is to get right. Luckily, Flex Box has a property called &lt;code&gt;justify-content&lt;/code&gt; that can do this for us in various ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;.space-around&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We are going use the following code to place the white space around each element.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.space-around&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-around&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;h3&gt;
  
  
  &lt;code&gt;.space-evenly&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;and while we are here we will make another class for later except using &lt;code&gt;space-evenly&lt;/code&gt; which works similarly to &lt;code&gt;space-around&lt;/code&gt; with one major difference. With &lt;code&gt;space-evenly&lt;/code&gt; the white on the left of the furthest and the right of the furthest right elements will also be part of the spacing distribution!&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.space-evenly&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-evenly&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;The &lt;code&gt;justify-content&lt;/code&gt; property deals with our &lt;code&gt;main axis&lt;/code&gt;. Which in this case is the &lt;code&gt;x axis&lt;/code&gt; or &lt;code&gt;horizontal axis&lt;/code&gt;. this would act differently if this had a class of &lt;code&gt;.flex-col&lt;/code&gt;. Go ahead and try it out!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;.nav&lt;/code&gt; inner elements
&lt;/h2&gt;

&lt;p&gt;Now we can go worry about the elements within &lt;code&gt;.nav&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I want to be able to easily change the value of one element without affecting another. For this we will create a different class for each element. This is not entirely necessary but will save stress down the road.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

    &lt;span class="nc"&gt;.box-1&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20vw&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="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.box-2&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20vw&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="no"&gt;purple&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nc"&gt;.box-3&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20vw&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="no"&gt;red&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;Take a look! The content does not overflow from the page and everything inside of &lt;code&gt;.nav&lt;/code&gt; scales with the screen size!&lt;/p&gt;

&lt;h2&gt;
  
  
  We can now style the rest of our elements!
&lt;/h2&gt;

&lt;p&gt;First we will place &lt;code&gt;.content&lt;/code&gt; and &lt;code&gt;.footer&lt;/code&gt; onto the page&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;.content&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.content&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;100%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-height&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;80vh&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;border&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;5px&amp;lt;/span&amp;gt; &amp;lt;span class="nb"&amp;gt;dashed&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;orange&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;code&gt;.footer&lt;/code&gt;&lt;br&gt;
&lt;/h3&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.footer&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;100%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-height&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;20vh&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;border&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;5px&amp;lt;/span&amp;gt; &amp;lt;span class="nb"&amp;gt;solid&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;cyan&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;code&gt;.content&lt;/code&gt; inner elements&lt;br&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;.sidebar-left&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.sidebar-left&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;20%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;teal&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;code&gt;.main-area&lt;/code&gt;&lt;br&gt;
&lt;/h3&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.main-area&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;60%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;green&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;code&gt;.sidebar-right&lt;/code&gt;&lt;br&gt;
&lt;/h3&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.sidebar-right&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;20%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;blue&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;code&gt;.footer&lt;/code&gt; inner elements&lt;br&gt;
&lt;/h2&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span class="nc"&amp;gt;.box-4&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;15%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;pink&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;

&amp;lt;span class="nc"&amp;gt;.box-5&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;30%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;maroon&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;

&amp;lt;span class="nc"&amp;gt;.box-6&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;{&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;min-width&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="m"&amp;gt;20%&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
    &amp;lt;span class="nl"&amp;gt;background&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class="no"&amp;gt;black&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  The Results&lt;br&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Desktop
&lt;/h3&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%2F1xo15ap1e3d43gua9eox.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%2F1xo15ap1e3d43gua9eox.png" alt="Desktop View - Navbar and Content Area"&gt;&lt;/a&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%2F6dylthwd7f1y8lc63f9b.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%2F6dylthwd7f1y8lc63f9b.png" alt="Desktop View - Content Area and Footer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tablet
&lt;/h3&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%2Fqa9f670j1079j0q9mq4w.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%2Fqa9f670j1079j0q9mq4w.png" alt="Tablet View - Navbar and Content Area"&gt;&lt;/a&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%2Fzs14hyp07hg2h5orpi2a.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%2Fzs14hyp07hg2h5orpi2a.png" alt="Tablet View - Content Area and footer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile
&lt;/h3&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%2F5e9gxcvb60klvy1bbkb8.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%2F5e9gxcvb60klvy1bbkb8.png" alt="Mobile View - Navbar and Content Area"&gt;&lt;/a&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%2Fwrhvzjjiox7wu1em7310.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%2Fwrhvzjjiox7wu1em7310.png" alt="Mobile View - Content Area and Foote"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;If you made it this far thank you! I hope you have a better understanding of what Flex Box is and how it can better help us make responsive designs easily without stressing too much.&lt;/p&gt;

&lt;p&gt;This was a bonus article today. Stay tuned for an Intro to Version Control later!&lt;/p&gt;

&lt;h3&gt;
  
  
  Help TechSnack Write Concise Content:
&lt;/h3&gt;

&lt;p&gt;Leave us a comment with your thoughts on the article below. Whether you liked or disliked the article, all feedback will help me to know how to better create content that meets your needs, goals and aspirations.&lt;/p&gt;

&lt;p&gt;Sharing the article on your social platforms would also be a great help!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/RomesbergJames" rel="noopener noreferrer"&gt;Follow TechSnack on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the conversation at &lt;a href="https://www.reddit.com/r/TechSnack/" rel="noopener noreferrer"&gt;r/TechSnack&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
      <category>100daysofcode</category>
    </item>
  </channel>
</rss>
