Learn CSS for beginners in these 11 easy steps!
Tags: webdev, frontend, css, tailwindcss
Published: 2023-10-27 16:49:33

Hello and welcome!! 🤩🤩

Today, we will get into what it is really about 🤣🤣 **THE ALMIGHTY CSS**

CSS is...


![funny CSS meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtnqpphwud27w1gyn1j6.jpg)

*CSS is about to become the bane of your existence as a web developer.*

***CSS (Cascading Style Sheets) is the code that styles web content. Like HTML, CSS is not a programming language. It's not a markup language either. CSS is a style sheet language. CSS is what you use to selectively style HTML elements.***

CSS, when added to HTML, is what gives all the color and style to a website. If you recall from our [first HTML lesson](https://dumebi.hashnode.dev/learn-frontend-web-development-in-12-days-1), we had an example of what a website looks like with just pure HTML, that is, without any styling.

Let us get right into it!!! 🥳🥳🥳

## Table of Contents
&nbsp;1. [Different styles of writing CSS](#different-styles-of-writing-css)
&nbsp;2. [CSS Syntax](#css-syntax)
&nbsp;3. [CSS selectors](#css-selectors)
&nbsp;4. [CSS Box Model](#css-box-model)
&nbsp;5. [CSS Units](#css-units)
&nbsp;6. [Some common CSS properties and their uses](#some-common-css-properties-and-their-uses)
&nbsp;7. [CSS Layout](#css-layout)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.1. [CSS Position property](#css-position-property)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.2. [CSS Flex box](#css-flex-box)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.3. [CSS Grid](#css-grid)
&nbsp;8. [Media Queries](#media-queries)
&nbsp;9. [Transitions and Animations](#transitions-and-animations)
&nbsp;10. [CSS Blend Modes](#css-blend-modes)
&nbsp;11. [CSS Variables](#css-variables)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.4. [Tailwind CSS](#tailwind-css)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.5. [Bootstrap](#bootstrap)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.6. [Foundation CSS](#foundation-css)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.7. [Null JS](#null-js)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11.8. [References](#references)

***NB: Remember, in our [article](https://dumebi.hashnode.dev/learn-frontend-web-development-in-12days-setting-up-development-environment), we discussed how to add a CSS file to our HTML document using the `<link>` element. 

For those using a local IDE, for you to follow along with this lesson, you have to add the link to your Javascript file to your HTML document using the `<link>` element contained in our `<head>` element.***

## What are the different styles of writing CSS?

There are three types of CSS, or three methods of including our CSS in the HTML document

* Inline CSS
    
* Internal or Embedded CSS
    
* External CSS
    
![ways to write cs](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1f0zp2x9ct1snpdcits.png)

###Internal CSS
This features a `<style>` tag in the HTML document's `<head>` section. This CSS style is a good approach to styling individual pages.

We can use the internal CSS by embedding it in our HTML `<head>` element, like so

```xml
<head>
<!-- Insert boilerplate code -->
<style type="text/css">
body {  
    background-color: black;  
}  
h1 {  
    color: white;  
    padding: 50px;  
}  
</style>
</head>
```

Inside here, we see that our CSS commands are written directly in our HTML. Don't worry about trying to understand the CSS for now. We will get into it shortly.

###External CSS
In external CSS, we link the HTML to the external `.css` file, just as had learned in our [Setting up the development environment](https://dumebi.hashnode.dev/learn-frontend-web-development-in-12days-setting-up-development-environment) article. This is a more efficient method for styling a website. By editing the `.css` file, we can change the whole site at once.

After creating the CSS file, we link it to the HTML document.

```css
.xleftcol {  
   float: right;  
   width: 35%;  
   background:#608800;  
}  
.xmiddlecol {  
   float: right;  
   width: 35%;  
   background:#eff3df;  
}
```

This is what a standard external CSS document looks like.

###In-line CSS

Inline CSS is used to style a specific HTML element. Add a style attribute to each HTML tag without using the *selectors*. Managing a website may be difficult if we use only inline CSS. However, inline CSS in HTML is useful in some situations. In the following example, we have used the inline CSS in `<p>` and `<h1>` tag.

```xml
<!DOCTYPE html>  
<html> 
<!-- Insert boilerplate code --> 
<body style="background-color:white;">  
<h1 style="color:Red;padding:20px;">CSS Tutorials</h1>  
<p style="color:blue;">It will be useful here.</p>  
</body>  
</html>
```

## CSS Syntax: how to write your CSS code

CSS code, despite where it appears, whether as a stand-alone document or written in the HTML file, has a general syntax.

In CSS, we have the selector, the property being worked on, and the style value assigned to that selector. 
Basically, selectors are representations of our HTML in our CSS code. CSS code is separated by semi-colons `;` . In the image below, there are two CSS inputs separated by a semicolon. The `color` and `font-size` properties.

![CSS syntax](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/joevc6xd787ud1m5t49c.png)

###Is CSS code written in block letters?
***CSS code is written with small letters, and compound words are hyphenated. Example:*** `font-size`***.***

## What are CSS selectors?

CSS selectors are used to select the HTML element you want to style. Selectors are part of the CSS rule set. CSS selectors select HTML elements according to their id, class, type, attribute, etc.

##Different types of selectors in CSS

1. CSS Element Selector
    
2. CSS Id Selector
    
3. CSS Class Selector
    
4. CSS Universal Selector
    
5. CSS Group Selector
    
###CSS Element selector 
The CSS element selector selects the HTML element by its name.

{% codepen https://codepen.io/dumebii/pen/dygroje %}

### CSS Id selector 
The CSS id selector selects a specific HTML element with its `id` attribute. An id is always unique within the page so it is chosen to select a single, unique element. It is written with the hash character (#), followed by the `id` attribute of the element.

{% codepen https://codepen.io/dumebii/pen/xxyBGmP %}

### CSS Class Selector 
The CSS class selector selects HTML elements with a specific `class` attribute. It is used with a period character `.` (full stop symbol) followed by the class name.

{% codepen https://codepen.io/dumebii/pen/XWxGbGg %}

There are other forms of selectors, that you can read up on [Here](https://www.javatpoint.com/css-selector).

## What is the CSS Box Model

In CSS, the term "box model" is used when talking about design and layout. The CSS box model is essentially a box that wraps around every HTML element. It consists of: `margins`, `borders`, `padding`, and the actual content. The image below illustrates the box model:


![CSS box model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ncsej13f7nix5e6xo56e.png)

## Different parts of the CSS box model

####Content 
The content of the box, where text and images appear
    
#### Padding in CSS
Clears an area around the content. The `padding` is transparent. The padding property can be modified using the, `padding-left`, `padding-right`, `padding-top`, and `padding-bottom` *sub-properties.*
    
#### Border in CSS
A border that goes around the padding and content. The `border` is transparent. The padding property can be modified using the, `border-left`, `border-right`, `border-top`, and `border-bottom` *sub-properties.*
    
####Margin in CSS 
Clears an area outside the border. The margin is transparent. The `margin`is transparent. The padding property can be modified using the, `margin-left`, `margin-right`, `margin-top`, and `margin-bottom` *sub-properties.*
    

{% codepen https://codepen.io/dumebii/pen/vYVPOwv %}

## What are the CSS Units?

CSS has several different units for expressing a length.

Many CSS properties take "length" values, such as `width`, `margin`, `padding`, `font-size`, etc. **A length** is a number followed by a length unit, such as `10px`, `2em`, etc.

***Note: A whitespace cannot appear between the number and the unit. However, if the value is,*** `0`***, the unit can be omitted. For some CSS properties, negative lengths are allowed.***

Read, and understand more about CSS units [here](https://www.w3schools.com/css/css_units.asp).

## Some common CSS properties and their uses

{% codepen https://codepen.io/dumebii/pen/bGmZVVV %}

The CSS properties in the example above do not even begin to scratch the surface of all the CSS properties or sub-properties available for use.

CSS is all about styling, and with styling, there is so much you can do. This article does not cover all the possibilities available with CSS, but it will give you a great guide to figuring things out independently.

## CSS Layout

### What is Stacking context in CSS?
is a three-dimensional conceptualization of HTML elements along an imaginary z-axis relative to the user, who is assumed to be facing the viewport or the webpage. HTML elements occupy this space in priority order based on their attributes.*

## CSS Position property

The CSS `position` property specifies the type of positioning method used for an element. There are five different position values: `static`, `relative`, `fixed`, `absolute,` and `sticky.`

### Static position in CSS 
HTML elements are positioned static by default. `static` *position elements are not affected by the* `top`*,* `bottom`*,* `left`*, and* `right` *CSS properties.* An element with `position: static;` is not positioned in any special way; it is always positioned according to the normal flow of the page.

###Position Relative in CSS 
An element with `position: relative;` is positioned relative to its normal position. Setting the `top`, `right`, `bottom`, and `left` properties of a relatively-positioned element will cause it to be adjusted away from its normal position.

{% codepen https://codepen.io/dumebii/pen/WNaqYbY %}

Notice in the codepen above how we have been able to move the position of the green container.

Fixed position in CSS 
An element with `position: fixed;` is positioned relative to the viewport, which means it always stays in the same place even if the page is scrolled. The top, right, bottom, and left properties are used to position the element. *A fixed element does not leave a gap in the page where it would normally have been located.*

{% codepen https://codepen.io/dumebii/pen/Rwezqaj %}

In the example above, we notice that the `h2` element is shown on our screen even when we scroll down past it.

###Absolute position in CSS
An element with `position: absolute;` is positioned relative to the nearest positioned ancestor (instead of positioned relative to the viewport, like fixed). However, if an `absolute` positioned element has no positioned ancestors, it uses the document body, and moves along with page scrolling.

***Note:*** `absolute` *positioned elements are removed from the normal flow and can overlap elements.*

{% codepen https://codepen.io/dumebii/pen/vYVqQrj %}

In the example above, we see that the second container's position is being modified based on the position of the element preceding it.

###Sticky position in CSS 
An element with `position: sticky;` is positioned based on the user's scroll position. A sticky element toggles between `relative` and `fixed`, depending on the scroll position. It is positioned relative until a given offset position is met in the viewport - then it "sticks" in place (like `position:fixed`).

***Note:*** *Internet Explorer does not support sticky positioning. Safari requires a* `-webkit-` *prefix (see example below). You must also specify at least one of* `top`*,* `right`*,* `bottom` *or* `left` *for sticky positioning to work.*

{% codepen https://codepen.io/dumebii/pen/Rwezqde %}

In the example above, we see that the green container has maintained a fixed position, regardless of our scrolling through the page.

## What is the CSS Flex box

Flexbox is a powerful layout model that simplifies the creation of flexible and responsive layouts. It allows you to align and distribute elements within a container, making it easier to build complex designs. With properties like `flex-direction`, `justify-content`, and `align-items`, you can achieve versatile and dynamic layouts.

![css flexbox](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b4f11emiyoqshqqtpywh.png)

{% codepen https://codepen.io/dumebii/pen/VwEJqLG %}

We can see how, in the example above, we were able to position our paragraphs next to each other, with ample space between them with just two lines of CSS. This is the power of the CSS flexbox. There is a lot more that can be done with the CSS flexbox.

## What is the CSS Grid?
CSS Grid provides a two-dimensional layout system that enables precise control over rows and columns. It allows you to create complex grid structures and define the placement and sizing of elements. With features like grid templates, grid areas, and grid alignment, you can design sophisticated and visually appealing layouts.

![css grid](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/prezaiav07wl0jrb6963.png)

## Media Queries in CSS

Responsive web design is crucial in today's mobile-driven world. Media queries allow you to create responsive layouts that adapt to different screen sizes. By defining different CSS rules based on media query breakpoints, you can adjust the design, font sizes, and layouts to provide optimal user experiences across various devices. In my article about whether a developer should go with [Mobile first or Desktop first](https://dumebi.hashnode.dev/mobile-first-or-desktop-first-development) website design, I talked a bit more about what responsive design is.

```css
/* Example of a media query for responsive design */
@media screen and (max-width: 768px) {
  /* CSS rules for smaller screens */
  /* Adjust the layout, font sizes, etc. */
}
```

In the code block above, there is a sample syntax for writing a media query for a device whose maximum width is 768px. After defining your media breakpoint, you write your CSS code in between the curly braces as you would normal CSS. The properties you specify here will only take effect when the device width is at the specified value.

## Transitions and Animations in CSS

With CSS, there are lots of cool and flashy stylings we can add to our website to make it more visually appealing. A cool way we can do this is by using CSS transitions and animations. You can go the extra mile by learning how to personally create these animations and transitions and even coming up with a few of your own. However, there are these packages called **CSS transition libraries,** which are other people's CSS transition or animation effects already written and ready for use. Here are a few:

* [Animista](http://animista.net/)
    
* [Animate.css](https://daneden.github.io/animate.css/)
    
* [Tachyons-animate](https://github.com/anater/tachyons-animate)
    
* [Infinite](http://tilomitra.github.io/infinite/)
    

There are a lot more transition and animation libraries available. You can even create your own! 😏😏

## CSS Blend Modes

CSS blend modes offer creative possibilities by controlling how elements blend with the background or other elements. By applying blend modes to elements, you can create stunning overlays, image effects, and blending compositions. Some common blend mode values include `multiply`, `screen`, `overlay`, and `soft-light`.

{% codepen https://codepen.io/dumebii/pen/QWZXzov %}

In the codepen above, we can see the effect the different blend modes are having on the containers. Each container has a background color of red on a black body.

## CSS Variables

CSS variables, also known as custom properties, introduce the concept of reusable values throughout your CSS codebase. By defining variables, you can easily change and update common values across your stylesheets, providing consistency and flexibility. CSS variables also allow you to create dynamic themes and styles by modifying variable values with JavaScript.

```css
/* Example of defining and using a CSS variable */
:root {
  --primary-color: #007bff;
}

.my-element {
  color: var(--primary-color);
}
```

To round up this article, we will be looking at various CSS frameworks that are available for you to use to fasttrack your development experience.


In our [Beginner CSS](https://dumebi.hashnode.dev/learn-frontend-web-development-in-12-days-beginner-css) and [Advanced CSS](https://dumebi.hashnode.dev/learn-frontend-web-development-in-12-days-advanced-css) classes, we have learned the fundamentals of *vanilla* CSS and all that we need to style our website.

##CSS frameworks to accelerate your development journey!

***CSS frameworks are a bunch of relevant CSS code written by someone else or compiled by a team of people and made ready to use for the sole purpose of making styling a website faster, easier, and more straightforward.***

There are many CSS frameworks available for web developers and designers to choose from, depending on need and convenience. I'd list a few. You can learn about a lot more that are relevant and in use in 2023 at [CSS Frameworks 2023](https://github.com/Dumebii/awesome-css-frameworks).

1. **Bootstrap**: is the most popular HTML, CSS, and JavaScript framework for developing responsive, mobile-first projects on the web.
    
2. **Tailwind CSS**: a utility-first CSS framework for rapid UI development.
    
3. **Foundation CSS**: is the most advanced responsive front-end framework in the world.
    
4. **Null Js**: is a free and open-source framework built only with HTML, CSS, and pure JavaScript, with no dependencies.
    
5. **Material UI**: this is a lightweight CSS framework that follows Google's Material Design guidelines.
    
6. **98.css**: CSS library for building interfaces that look like Windows 98.
    
7. **TuiCss**: Library to create MS-DOS interfaces.
    

For this tutorial, we will use [Code Pen](http://codepen.io). To enable any of the CSS frameworks, go to the `settings` button on the CSS editor on your pen, search for the framework you want to use, and then enable it.

## What is Tailwind CSS?
*A utility-first CSS framework packed with classes like* `flex`*,* `pt-4`*,* `text-center` *and* `rotate-90` *that can be composed to build any design, directly in your markup.* 
When installing Tailwind, you install, as said, a compilation of CSS code that has previously been written, to make the building of various style points easy. 
Tailwind takes effect on your project by using certain class names that have already been pre-programmed into the compiled CSS code that you downloaded upon installation.
Information on Tailwind Css can be found on their [website](https://tailwindcss.com/). When on a local IDE, tailwind is installed using the `Node Package manager, npm.`

{% codepen https://codepen.io/dumebii/pen/gOQOydQ %}

See how fascinating this is! Without writing a single line of CSS, we have been able to style our website, although very poorly styled 🤣🤣🤣 This is the power and flexibility a CSS framework offers! To use Tailwind to style your website, you will need to have a good working knowledge of CSS, as most of the class names you will be modifying are vanilla CSS properties, although some have been shortened for readability. A full list of the things possible with Tailwind can be found on their [documentation page](https://tailwindcss.com/docs/installation). Of course, there are a lot more things you can do with Tailwind as regards styling your website. The above example was just to give a sneak peek into what is possible.

***Note: Tailwind can be used in conjunction with normal vanilla CSS to achieve the exact styling you want.***

##What is Bootstrap CSS?
Bootstrap is a powerful, feature-packed front-end toolkit. Build anything—from prototype to production—in minutes. Bootstrap is unlike Tailwind in a lot of ways, one of the most prominent being that Bootstrap comes *pre-styled*. Much like Tailwind, Bootstrap also uses class names. However, with Bootstrap, you aren't just typing in vanilla CSS properties, you are copying their components directly.

Information on Bootstrap can be found on their [website](https://getbootstrap.com/). In our local IDEs, we access Bootstrap using a `CDN`, `Content Delivery Network.`

```xml
<nav class="navbar navbar-expand-lg bg-body-tertiary">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            Dropdown
          </a>
          <ul class="dropdown-menu">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><hr class="dropdown-divider"></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
          </ul>
        </li>
        <li class="nav-item">
          <a class="nav-link disabled">Disabled</a>
        </li>
      </ul>
      <form class="d-flex" role="search">
        <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success" type="submit">Search</button>
      </form>
    </div>
  </div>
</nav>
```


![bootstrap example](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yhysr3wx8ioos30e2ir.png)

We can see from the example above, how we were able to create a standard navigation bar skeleton. This was possible with Bootstrap's *pre-styled* navbar component. There are loads more components that you can use on Bootstrap (as seen on their [website](http://getbootstrap.com)) to quickly build a responsive and styled website. Reading through the [Bootstrap documentation](https://getbootstrap.com/docs/5.3/getting-started/introduction/), you can see how to further customize these components to suit your needs.

##What is a Content Delivery Network (CDN)?
A content delivery network (CDN) is a geographically distributed group of servers that caches content close to end users. A CDN allows for the quick transfer of assets needed for loading Internet content, including HTML pages, JavaScript files, stylesheets, images, and videos.

## Foundation CSS
However, very similar to Bootstrap, Foundation makes use of *pre-styled* components. Foundation for Sites was built to be the most advanced responsive front-end framework in the world.

Information on Foundation can be found on their [website](https://get.foundation/sites/docs/index.html). Like Tailwind, Foundation is installed using the `node package manager` , `npm`.

{% codepen https://codepen.io/dumebii/pen/NWEPqQp %}

In the codepen above, we see an example of a *pre-styled* progress bar. See how with just HTML, and the class names corresponding to the compiled CSS by Foundation, we have been able to build four different progress bars, with different colors. Of course, the filling of the progress bars will be moderated using Javascript. In our next class, we will be starting on Javascript!! 🥳🥳🥳

##What is Null JS?

Information about Null Js can be found on their [website.](https://null-js.com/)

Null JS is a free and open-source framework built only with HTML, CSS, and pure JavaScript, with no dependencies. It has a lot of pre-built components, and it allows developers to easily build small to medium websites. It is responsive, simple design, RTL-ready, easy to use, and well-documented.

```xml
    <form method="get" action="/">

        <div class="null-margin-bottom-20">
            <label class="null-color-main null-font-weight-bold null-display-block null-margin-bottom-10" for="firstName">
                First Name :
            </label>
            <input class="null-form-input" id="firstName" type="text"     name="firstName" required/>
            <span  class="null-form-error">First name is required</span>
        </div><!--End null-margin-bottom-20-->


        <div class="null-margin-bottom-20">
            <label class="null-color-main null-font-weight-bold null-display-block null-margin-bottom-10" for="lastName">
                Last Name :
            </label>
            <input class="null-form-input" id="lastName" type="text"     name="lastName" required/>
            <span  class="null-form-error">Last name is required</span>
        </div><!--End null-margin-bottom-20-->


        <div class="null-margin-bottom-20">
            <label class="null-color-main null-font-weight-bold null-display-block null-margin-bottom-10" for="email">
                Email :
            </label>
            <input class="null-form-input" id="email" type="text"     name="email" required/>
            <span  class="null-form-error">Email name is required</span>
        </div><!--End null-margin-bottom-20-->

        <div class="null-margin-bottom-20">
            <label class="null-color-main null-font-weight-bold null-display-block null-margin-bottom-10" for="number">
                Number :
            </label>
            <input class="null-form-input" id="number" type="number"    name="number" required/>
            <span  class="null-form-error">Number name is required</span>
        </div><!--End null-margin-bottom-20-->

        <div class="null-margin-bottom-20">
            <label class="null-color-main null-font-weight-bold null-display-block null-margin-bottom-10" for="password">
                Password :
            </label>
            <input class="null-form-input" id="password" type="password"     name="password" required/>
            <span  class="null-form-error">Password name is required</span>
        </div><!--End null-margin-bottom-20-->

    </form>
```


![null js](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3dhtz7kp5xyxhonx4lia.png)

Above is a snippet of what we can do with Null Js. In the above snippet, we built a functional form page, using the pre-styled component from Null Js. As you read through the [documentation](https://null-js.com/getting-started/installation), you will come across other components that you can use to efficiently and effectively style your website.

Hi, guys! We have come to the end of our lessons on CSS. 

### References

[CSS Box Model](https://www.w3schools.com/css/css_boxmodel.asp)

[What is CSS](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics)

[CSS selectors](https://www.javatpoint.com/css-selector)

[Types of CSS](https://www.javatpoint.com/types-of-css)

[CSS Syntax](https://www.javatpoint.com/css-syntax)

[CSS Box Model](https://www.csssolid.com/css-box-model.html)

[Transitions and Animations](https://css-tricks.com/css-animation-libraries/)

[CSS Positions](https://www.w3schools.com/css/css_positioning.asp)

[Flex box image](https://marina-ferreira.github.io/tutorials/css/flexbox/)

[HTML stacking](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index/Stacking_context)

[CSS Grid image](https://learn.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/css/grid)

[My trusty chatGPT 🥳🥳](http://chat.openai.com)

[What is a CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/)

[Awesome CSS frameworks](https://github.com/troxler/awesome-css-frameworks)