CSS Complete Guide

Notes based on Udemy Course CSS - The Complete Guide 2020 (incl. Flexbox, Grid, & Sass)

1. Getting Started

1.1 What is CSS

1.2 CSS History, Present and Future

1.3 Course Outline

2. Diving into the Basics of CSS

2.1 Introduction

2.2 Adding CSS to our Project with Inline Styles

<section style=style="background: #ff1b68;">
    <h1>Get the freedom you deserve!</h1>
</section>

2.3 Understanding the <style> Tag and Creating a .css file

<head>
    <style>
        section {
            background: #ff1b68;
        }
    </style>
</head>
section {
    background: #ff1b68;
}
<head>
    <link rel="stylesheet" href="main.css">
<head>

2.4 Applying Additional Styles and Importing Google Fonts

h1 {
    color: white;
    font-family: sans-serif;
}
h1 {
  color: white;
  font-family: 'Anton', sans-serif;
}

2.5 Theory Time - Selectors

Selector html css
Elements (Set equal style for these elements) <h1>Our Header</h1> h1 { color: red; }
Classes (Set equal style for the elements within the same class) <h1 class="blog-post">Our Header</h1> .blog-post { color: red; }
Universal (rarely use) <h1>Our Header</h1> * { color: red; }
IDs (Set style to one specific element) <h1 id="main-title">Our Header</h1> #main-title { color: red; }
Attributes (Set equal styles to all elements with attributes(s)) <button disabled>Click</button> [disabled] { color: red; }
<section id="product-overview">
    <h1>Get the freedom you deserve!</h1>
</section>
<section id="plans">
    <h1 class="section-title">Choose Your Plan</h1>
</section>
#product-overview {
  background: #ff1b68;
}

h1 {
  color: white;
  font-family: 'Anton', sans-serif;
}

.section-title {
  color: #2ddf5c;
}

Understanding the "Cascading" Style and Specificity

Cascading Specificity
Multiple rules can apply to the same element Resolve conflicts arising from multiple Rules
- Inline Styles
- #ID selectors
- .class, :pseudo-class and [attribute] selectors
- <Tag> and ::pseudo-element selectors

Understanding Inheritance

body {
  font-family: 'Montserrat', sans-serif;
}

Adding Combinators

Theory Time - Combinators

Summarizing Properties and Selectors

Selectors Properties Values
div background-color red
.blog-post width 30%
#main-title color #fa923f
[disabled] margin 10px
* display block
Pre-defined Options Colors Length, Sizes & Numbers Functions
display: block; background: red; height: 100px; background: url(...);
overflow: auto; color: #fa923f width:20%; transform: scale(...);
- color: #ccc; order: 1; -

3. Diving Deeper into CSS

Introduction

Introducing the CSS Box Model

Understanding the Box Model

#product-overview {
  background: #ff1b68;
  /* below added */
  padding: 20px;
  border: 5px black solid; /* shorthand */
  margin: 20px;
}

Understanding Margin Collapsing and Removing Default Margins

body {
  font-family: 'Montserrat', sans-serif;
  /* below added */
  margin: 0;
}

Theory Time - Working with Shorthand Properties

shorthand

Applying Shorthands in Practice

#product-overview {
  background: #ff1b68;
  padding: 20px;
  /* border-style: solid;
  border-color: black;
  border-width: 5px; */
  border: 5px black solid;
  margin: 20px;
}

Diving into the Height and Width Properties

#product-overview {
  background: #ff1b68;
  width: 100%;
}
#product-overview {
  background: #ff1b68;
  width: 700px;
  height: 100%;
}

Understanding Box Sizing

#product-overview {
  background: #ff1b68;
  width: 100%;
  height: 528px;
  padding: 10px;
  border: 5px solid black;
  margin: 10px;
}
#product-overview {
  /* added: */
  box-sizing: border-box;
}
* {
  box-sizing: border-box;
}

Adding the Header to our Project

<header class="main-header">
    <div>
        <a href="index.html">
            uHost
        </a>
    </div>
    <nav>
        <ul>
            <li>
                <a href="packages/index.html">Packages</a>
            </li>
            <li>
                <a href="customers/index.html">Customers</a>
            </li>
            <li>
                <a href="start-hosting/index.html">Start Hosting</a>
            </li>
        </ul>
    </nav>
</header>
.main-header {
  width: 100%;
  background-color: #2ddf5c;
  padding: 8px 16px;
}

Understanding the Display Property

<nav class="main-nav">
    <ul class="main-nav__items">
        <li class="main-nav__item">
.main-nav__item {
  display: inline-block;
}

Applying the Display Property and Styling our Navigation Bar

.main-header > div {
  display: inline-block;
}

.main-nav {
  display: inline-block;
  text-align: right;
  width: calc(100% - 49px);
}

.main-nav__items {
  margin: 0;
  padding: 0;
  list-style: none;
}

Understanding an Unexpected inline-block Behavior

Working with text-decoration and vertical-align

.main-header > div {
  display: inline-block;
  vertical-align: middle; /* added */
}

.main-header__brand { /* added */
  color: #0e4f1f;
  text-decoration: none;
  font-weight: bold;
  font-size: 22px;
}

.main-nav {
  display: inline-block;
  text-align: right;
  width: calc(100% - 74px); /* was 54px */
  vertical-align: middle; /* added */
}

Styling Anchor Tags

.main-nav__item {
  display: inline-block;
  margin: 0 16px;
}

.main-nav__item a {
  text-decoration: none;
  color: #0e4f1f;
}

Adding Pseudo Classes

.main-nav__item a:hover {
  color: white;
}

.main-nav__item a:active {
  color: white;
}

Theory Time- Pseudo Classes and Pseudo Elements

.main-nav__item a::after {
  content: " (Link)";
  color: red;
}

p::first-letter {
  color: red;
  font-size: 20px;
}

Grouping Rules

.main-nav__item a:hover, .main-nav__item a:active {
    color: white;
}

Working with font-weight and border

.main-nav__item a {
  text-decoration: none;
  color: #0e4f1f;
  font-weight: bold;
  padding: 3px 0;
}

.main-nav__item a:hover, .main-nav__item a:active {
  color: white;
  border-bottom: 5px solid white;
}

Adding and Styling a CTA-Button

<li class="main-nav__item main-nav__item--cta">
.main-nav__item--cta a {
  color: white;
  background: #ff1b68;
  padding: 8px 16px;
  border-radius: 8px;
}

.main-nav__item--cta a:hover,
.main-nav__item--cta a:active {
  color: #ff1b68;
  background: white;
  border: none;
}

Adding a Background Image to our Project

#product-overview {
  background: url("freedom.jpg");
  width: 100%;
  height: 528px;
  padding: 10px;
}

Properties Worth to Remember

properties

4. More on Selectors and CSS Features

Introduction (4)

Using Multiple CSS Classes and Combined Selectors

Classes or IDs

CSS Class Selectors Class ID Selectors
.some-class{ ... } #some-id {...}
<div class="some-class"> <div id="some-id">
Re-usable Only used once per page
Allow you to "mark" and name things for styling purposes only Also got non-CSS meaning (e.g. on-page link)
Most-used selector type Use if available anyways

(Not) using !important

div {
  color: red !important;
  /*
    overwrites specifity and all other selectors
  */
}

Do NOT use, bad practice

Selecting the Opposite with :not()

Excludes selectors

:not()

CSS and Browser Support

5. Practicing the Basics

Adding Style to our Plans

Add class to each article plan <article class="plan">

Add CSS

.section-title {
  color: #2ddf5c;
  text-align: center; /* added */
}
/* ... */
.plan {
  background: #d5ffdc;
  text-align: center;
  padding: 16px;
  margin: 8px;
  display: inline-block;
  width: 30%;
  vertical-align: middle;
}

Add article class and modify title

<article class="plan plan--hightlighted">

<h1 class="plan__annotation">RECOMMENDED</h1>

Modify main.css, introducting new box-shadow and rgb()/rbga() color function

.plan--hightlighted {
  background: #19b84c;
  color: white;
  box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.5);
}

Styling the Badge with border-radius

Can use border-radius to round the corners

.plan__annotation {
  background: white;
  color: #19b84c;
  padding: 8px;
  box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.5);
  border-radius: 8px;
}

Styling our List

Get rid of margin and padding from all ul

<ul class="plan__features">

.plan__features {
  list-style: none;
  margin: 0;
  padding: 0;
}

Adjust individual list items

<li class="plan__feature">

.plan__feature {
  margin: 8px 0;
}

Working on the Title and the Price of our Packages

New Classes

<h1 class="plan__title">FREE</h1>

<h2 class="plan__price">$0/month</h2>

/* main.css */
.plan__title {
  color: #0e4f1f;
}

.plan__price {
  color: #858585;
}

.plan--hightlighted .plan__title {
  color: white;
}

.plan--hightlighted .plan__price {
  color: #0e4f1f;
}

Improving our Action Button

Add class

<button class="button">CHOOSE PLAN</button>

Styling, using inherit for font

.button {
  background: #0e4f1f;
  color: white;
  font: inherit;
  border: 1.5px solid #0e4f1f;
  padding: 8px;
  border-radius: 8px;
  font-weight: bold;
  cursor: pointer;
}

.button:hover,
.button:active {
  background: white;
  color: #0e4f1f;
}

Understanding Outlines

Comparable to border but is not part of box model, can use on focus active pseudo property

.button:focus {
  outline: none;
}

Presenting the Core Features to the User

Add new given HTML section

Styling the Headline of the Core Features Section

Reuse section-title class, and add id to section

<section id="key-features">

<h1 class="section-title">Many Good Reasons to Stick Around</h1>

Styling

#key-features {
  background: #ff1b68;
  margin-top: 80px;
  padding: 16px;
}

#key-features .section-title {
  color: white;
  margin: 32px;
}

Preparing the Content of the Key Feature Area

Add classes

<ul class="key-feature__list">

<li class="key-feature">

<p class="key-feature__description">Lightning Fast CDN</p>

<div class="key-feature__image"></div>

Styling

.key-feature__list {
  list-style: none;
  margin: 0;
  padding: 0;
  text-align: center;
}

.key-feature {
  display: inline-block;
  width: 30%;
  vertical-align: top;
}

.key-feature__image {
  background: #ffcede;
  width: 128px;
  height: 128px;
  border: 2px solid #424242;
  border-radius: 50%;
  margin: auto;
}

.key-feature__description{
  text-align: center;
  font-weight: bold;
  color: white;
  font-size: 20px;
}

Add given new html code, assign classes

<footer class="main-footer">

<ul class="main-footer__links">

<li class="main-footer__link">

Styling

.main-footer {
  background: black;
  padding: 32px;
  margin-top: 48px;
}

.main-footer__links {
  list-style: none;
  margin: 0;
  padding: 0;
  text-align: center;
}

.main-footer__link {
  display: inline-block;
  margin: 0 16px;
}

.main-footer__link a {
  color: white;
  text-decoration: none;
}
.main-footer__link a:hover,
.main-footer__link a:active {
  color: #ccc;
}

Adding Packages Page

Reuse everything but what's in <main>

./packages/index.html

./packages/packages.css

Separate out CSS files

./shared.css

Add classes

<section class="package">

Styling

main {
  padding-top: 32px;
}

.package {
  width: 80%;
  margin: 16px 0;
  border: 4px solid #0e4f1f;
  border-left: none;
}

.package a {
  text-decoration: none;
  color: inherit;
  display: block;
  padding: 32px;
}

Styling our Package Boxes

Add classes

<h1 class="package__title">

<h2 class="package__subtitle">

<p class="package__info">

Also add individual IDs for each plan:

<section class="package" id="plus">

<section class="package" id="free">

<section class="package" id="premium">

Styling

.package:hover,
.package:active {
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
  border-color: #ff5454;
}

#plus {
  background: rgba(213, 255, 220, 0.95);
}

#free {
  background: rgba(234, 252, 237, 0.95);
}

#premium {
  background: rgba(14, 79, 31, 0.95);
}

#premium .package__title {
  color: white;
}

#premium .package__subtitle {
  color: #bbb;
}

Adding "float" to our Package

Overwrite default positioning and tell browser to push element to left or right of page. Not great for moving block style elements.

Add properties

#free {
  background: rgba(234, 252, 237, 0.95);
  float: right;
  border-right: none;
  border-left: 4px solid #0e4f1f;
  text-align: right;
}

Need clearfix to fix float.

<div class="clearfix"></div>

.clearfix {
  clear: both;
}

Fixing the Hover Effect

Specificity border rule overrides, because of ID selector

Simple fix with redundant code

#free:hover,
#free:active {
    border-left-color: #ff5454;
}

An alternative fix, only on very very rare occasions, using !important

.package:hover,
.package:active {
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
  border-color: #ff5454 !important;
}

NOT RECOMMENDED!

Adding Final Touches

On main page, add class

<div class="plan__list">

Styling

.plan__list {
  width: 80%;
  margin: auto;
  text-align: center;
}

6. Positioning Elements with CSS

6. Introduction

Positioning - How to change the position of Elements

  1. Understanding the position Property
  2. Fixed Navigation Bars with fixed
  3. Positioning Elements with z-index
  4. Using absolute and relative - Stand Alone and Combined
  5. "Sticky" Positioning
  6. The "Stacking Context"

Why Positioning will Improve our Website

Understanding Positioning - The Theory

position property applied automatically with static default value

Other values include absolute, relative, fixed, sticky(new)

Changing the Position

Top, bottom, left, right options.

Refer to initial position in Document Flow

Options to Positioning Context

Working with the fixed Value

top: 100px;

position: fixed;

.parent .child-1 {
  position: fixed;
  width: 400px;
  top: 100px;
}
.parent .child-1 {
  position: fixed;
  width: 100%;
  top: 0;
  left: 0;
  margin: 0;
  box-sizing: border-box;
}

Creating a Fixed Navigation Bar

.main-header {
  width: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background-color: #2ddf5c;
  padding: 8px 16px;
}

Using position to Add a Background Image

Add div for background: <div class="background"></div> (in between header and beginning of body)

For image, add property background

.background {
  background: url('../images/plans-background.jpg');
  width: 100%;
  height: 100%;
  position: fixed;
}

Understanding the Z-Index

.background {
  /* ... */
  z-index: -1;
}

Adding a Badge to our Package

Add badge on 'Plus' package

<h2 class="package__badge">RECOMMENDED</h2>

Styling:

.package__badge {
  position: fixed;
  top: 0;
  left: 0;
  margin: 20px;
}
.package {
  /* ... */
  position: relative;
}

Styling and Positioning our Badge with absolute and relative

Adjust package badge styling

.package__badge {
  position: absolute;
  top: 0;
  right: 0;
  margin: 20px;
  font-size: 12px;
  color: white;
  background-color: #ff5454;
  padding: 8px;
}

Also on .main-header: z-index: 1;, to keep package from going over navbar

Diving Deeper into Relative Positioning

Working with overflow and Relative Positioning

Introducing sticky Positioning

Using demo code

Add position: sticky; to .parent .country

Behaves like fixed, but then has a limit

Understanding the Stacking Context

Using demo code

Fixed elements, taken out of document flow, with default z-index

Stacking context comes into play when dealing with the children.

Image will never go below its parent, will never go above elements higher than the parent

Only effects elements inside the parent

Stacking context depends on z-index of the parent

7. Understanding Background Images and Images

7. Introduction

  1. Understanding the background Property
  2. Images and Background Images
  3. Gradients
  4. Filters

Understanding background-size

Working with background-position

The background Shorthand - Theory

Applying background Origin, Clip and Attachment

Using the background Shorthand on our Project

#product-overview {
  background: url('freedom.jpg') left 10% bottom 20% / cover no-repeat
    border-box;
  width: 100%;
  height: 528px;
  padding: 10px;
  margin-top: 43px;
  position: relative;
}

border-box at end applies to origin and clip, can give two separate values

Styling Images

<a href="index.html" class="main-header__brand">
  <img
    src="./images/uhost-icon.png"
    alt="uHost - Your favorite hosting company"
  />
</a>
.main-header__brand {
  color: #0e4f1f;
  text-decoration: none;
  font-weight: bold;
  font-size: 22px;
  height: 22px;
  /* width: 20px; */
  display: inline-block;
}

.main-header__brand img {
  height: 100%;
  /* width: 100%; */
}

Adding the Customers Page to our Website

Add given code and fix links

Working on the Image Layout

.testimonial__image-container {
  width: 65%;
  display: inline-block;
  vertical-align: middle;
  box-shadow: 3px 3px 3px 3px rgba(0,0,0,0.3);
}

.testimonial__image {
  width: 100%;
  vertical-align: top;
}

.testimonial__info {
  text-align: right;
  padding: 14px;
  display: inline-block;
  vertical-align: middle;
  width: 30%;
}

Understanding Linear Gradients

Applying Radial Gradients

Stacking Multiple Backgrounds

#product-overview {
  background: linear-gradient(to top, rgba(80, 68, 18, 0.6) 10%, transparent), url('./images/freedom.jpg') left 10% bottom 20% / cover no-repeat
    border-box, #ff1b68;
    /* ... */
}

Understanding Filters

.background {
  background: url('../images/plans-background.jpg') center/cover;
  filter: grayscale(40%);
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: -1;
}

Adding and Styling SVGs - The Basics

8. Sizes and Units

8. Introduction

Where Units Matter

Units -
pixels px
percentages %
root em rem
em em
viewport height vh
viewport width vw

An Overview of Available Sizes and Units

Absolute Lengths Viewport Lengths Font-Relative Lengths
Mostly ignore user settings Adjust to current viewport Adjust to default font size
px vh rem
cm* vw em
mm* vmin ...
... vmax -
- % %

Rules to Remember: Fixed Positioning & %

Rules to Remember: Absolute Positioning & %

Rules to Remember: Relative / Staic Positioning & %

Fixing the Height 100% Issue

<div class="backdrop"></div>

.backdrop {
  position: fixed; /* demo with absolute */
  display: none; /* hide for now */
  top: 0;
  left: 0;
  z-index: 100;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.5)
}

Also fixes the margin stacking

Defining the Font Size in the Root Element

html {
  font-size: 75%;
}

Using min-width/min-height and max-width/max-height

.testimonial__image-container {
  max-width: 580px;
  /* ... */
}

Working with rem and em

/* customers.css */
.testimonial {
  font-size: 1.2em;
  /* ... */
}

.testimonial__name {
  font-size: 2em;
  /* ... */
}

.testimonial__subtitle {
  font-size: 1.1em;
  /* ... */
}

Adding rem to Additional Properties

.testimonial {
  font-size: 1.2rem;
  /* ... */
}

.testimonial:first-of-type {
  margin-top: 6rem;
}

.testimonial__info {
  padding: 0.9rem;
  /* ... */
}

.testimonial__name {
  margin: 0.2rem;
  /* ... */
}

.testimonial__text {
  margin: 0.2rem;
}

Finishing rem

Modifying packages.css

main {
  padding-top: 2rem;
}

.package {
  margin: 1rem 0;
  /* ... */
}

.package a {
  padding: 2rem;
  /* ... */
}

.package__badge {
  margin: 1.2rem;
  padding: 0.5rem;
  font-size: 0.8rem;
  /* ... */
}

.package__info {
  padding: 1rem;
  font-size: 1.2rem;
  /* ... */
}

Understanding the Viewport Units vw and vh

.backdrop {
  width: 100vw;
  height: 100vh;
  /* ... */
}
#product-overview {
  /* changed bottom to 70% below */
  background: linear-gradient(to top, rgba(80, 68, 18, 0.6) 10%, transparent),
    url('images/freedom.jpg') left 10% bottom 70% / cover no-repeat border-box,
    #ff1b68;
  /* ... */
  width: 100vw;
  height: 33vh;
  /* ... */
}

Windows, Viewport Units and Scrollbars

vw in Windows does not include scrollbars, can use width: 100%; and other solutions

Choosing the Right Unit

Property "Recommended" Unit
font-size (root element) %, -
font-size rem (em => Children only)
padding border margin rem px rem
width height % vw % vh
top bottom % %
left right % %

Using auto to Center Elements

Cleaning Up our Code

.background {
  /* ... */
  width: 100vw;
  height: 100vh;
}

Understanding Property Notations

11. Adding and Styling Forms

Advanced Attribute Selectors

Advanced Attribute Selectors

13. Adding FlexBox to our Project

13. Introduction

  1. The Flex-Container
  2. Main Axis vs. Cross Axis
  3. The Flex Items

How we Could Improve our Project

Understanding Flexbox

Creating a Flex Container

Using flex-direction and flex-wrap

Understanding the Importance of Main Axis and Cross Axis

Main Axis vs Cross Axis

Working with align-items and justify-content

Justify Content defines poisition of flex elements along main axis

Align Items defines poisition of flex elements along cross axis

And What About align-content

Improving Navigation Bar with Flexbox

Turn main header into flex-container and improve

.main-header {
  /*  */
  display: flex;
  align-items: center;
  justify-content: space-between;
}
/* can now remove .main-header > div {...} */
/* ... */
.main-header__brand {
  /* can remove two below: */
  display: inline-block;
  vertical-align: middle;
}
/* need to change image height now */
.main-header__brand img {
  height: 2.5rem;
  vertical-align: middle;
}
/* ... */
.main-nav__items {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
}

.main-nav__item {
  margin: 0 1rem;
}
/* ... */
@media (min-width: 40rem) {
  .toggle-button {
    display: none;
  }

  .main-nav {
    /* display: inline-block;
    text-align: right;
    width: calc(100% - 44px);
    vertical-align: middle; */
    display: flex;
  }
}

Working on the Mobile Navigation Bar

.mobile-nav__items {
  /* ... */
  /* text-align: center; */
  display: flex;
  flex-flow: column;
  justify-content: center;
  align-items: center;
}
.main-footer__links {
  /*  */
  /* text-align: center; */
  display: flex;
  flex-direction: column;
  align-items: center;
}

.main-footer__link {
  /* display: block; */
  margin: 0.5rem 0;
}
/* ... */
@media (min-width: 40rem) {
  .main-footer__link {
    /* display: inline-block; */
    margin: 0 1rem;
  }

  .main-footer__links {
    flex-direction: row;
    justify-content: center;
  }
}

Improving Plans and Features

@media (min-width: 40rem) {
  .plan__list {
    width: 100%;
    /* text-align: center; */
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .plan {
    /* display: inline-block; */
    /* vertical-align: middle; */
    width: 30%;
    min-width: 13rem;
    max-width: 25rem;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    height: 28rem;
  }

  .plan--highlighted {
    box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.5);
    height: 30rem;
    z-index: 50;
  }
}
@media (min-width: 40rem) {
  .key-feature {
    /* display: inline-block; */
    /* vertical-align: top; */
    width: 30%;
    max-width: 25rem;
  }

  .key-feature__list {
    display: flex;
    justify-content: center;
  }
}

Adding Flexbox to Customers Page

@media (min-width: 40rem) {
  .testimonial {
    margin: 3rem auto;
    max-width: 1500px;
    display: flex;
    align-items: center;
    justify-content: space-around;
  }

  .testimonial__image-container {
    /* display: inline-block; */
    /* vertical-align: middle; */
    width: 66%;
  }

  .testimonial__info {
    /* display: inline-block; */
    /* vertical-align: middle; */
    width: 30%;
  }
}

Using the order Property for a Flex Item

.item-4 {
  /*  */
  order: 1;
}

Working with align-self

Understanding flex-grow

Applying flex-shrink

Comparing flex-basis vs width and height

14. Using the CSS Grid

What is the CSS Grid

CSS Grid

Turning a Container into a Grid

.container {
  margin: 20px;
  display: grid;
}

Defining Columns and Rows

Positioning Child Elements in a Grid

Using element-sizing, repeat and minmax

Advanced Element Positioning

Working with Named Lines

.container {
  /* ... */
  grid-template-rows: [row-1-start] 5rem [row-1-end row-2-start] minmax(10px, 200px) [row-2-end row-3-start] 100px [row-3-end];
}
/* ... */
.el3 {
  /* ... */
  grid-row-start: row-1-start;
  grid-row-end: row-2-end;
}

Understanding Column and Row Shorthands

.el3 {
  /* ... */
  /* grid-column-start: 2;
  grid-column-end: span 3;
  grid-row-start: row-1-start;
  grid-row-end: row-2-end; */
  grid-area: row-1-start / 2 / row-2-end / span 3;
}

Working with Gaps

Obsolete according to editor?

Adding Named Template Areas

.container {
  /* ... */
  grid-template-areas:
    'header header header header'
    'side side main main'
    'footer footer footer footer';
}

15. Transforming Elements with CSS Transforms

16. Transistions and Animations in CSS

17. Writing Future-Proof CSS Code

18. Introducing Sass

19. Course Roundup