DEV Community

Cover image for Master CSS Flexbox 2021 🔥- Build 5 Responsive Layouts🎖️|| CSS 2021
Joy Shaheb
Joy Shaheb

Posted on • Edited on • Originally published at freecodecamp.org

Master CSS Flexbox 2021 🔥- Build 5 Responsive Layouts🎖️|| CSS 2021

Here's a practical guide to learn CSS Flexbox in 2021 by Building 5 Responsive Layouts. Let's Go Guys🥇

Check The Figma Design Here

Table of Contents --

More layout Designs here

Youtube

Flex-Box Architecture

Flex Box Architecture

Flex-Box Chart

Flex Box Chart

Here's the complete flexbox cheat sheet

Setup

Open CodePen / any code editor and place these 👇

SCSS

// defining border color, gap, padding in variables 

$gap : 4vh;
$padding : 4vh;
$color : #48CAE4;

// Defining Break-Points

$bp : (
  mobile : 480px,
  tablet : 768px,
  desktop : 1440px,
);

//Defining our Conditional Media query Mixins.
//To save Time & Coffee.

@mixin query($display){
  @each $key, $value in $bp{

    //  defining max-width
    @if ($display == $key){
      @media (max-width: $value){@content;}
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Again.........

//Changing The Default Settings..

*{
  margin:0px;
  padding: 0px;
  box-sizing: border-box;
  body{
    width: 100%;
    min-height: 100vh;
    font-family: sans-serif;
    font-size: 45px;
  }
}
Enter fullscreen mode Exit fullscreen mode

FLOW

Level-1

Level-1

HTML

<!-- container class holds 3 children
block-1, block-2, block-3 -->

<div class="container">

<!--block-1 has 3 children, box-1,box-2,box-3 -->

  <div class="block-1">
    <div class="box-1">A</div>
    <div class="box-2">B</div>
    <div class="box-3">C</div>
  </div>

<!--similar to block-1, values are changed -->

  <div class="block-2">
    <div class="box-4">D</div>
    <div class="box-5">E</div>
    <div class="box-6">F</div>
  </div>

<!--similar to block-1, values are changed -->

  <div class="block-3">
    <div class="box-7">G</div>
    <div class="box-8">H</div>
    <div class="box-9">I</div>
  </div>
</div>
Enter fullscreen mode Exit fullscreen mode

SCSS

// Style rules for container class

.container{
  display: flex;

//to lay .block-* classes in a column
  flex-direction: column;

//Setting gap between the .block-* classes
  gap: $gap;
// to set some padding & border inside
  padding: $padding;
  border: 1vh solid $color;
}

// To select all the .block-* classes

[class ^="block-"]{
//To lay the boxes in a row.
  display: flex;
  flex-direction: row;

//Removing border(1vh+1vh), gap, & padding from the height
// And then equally distributing spaces between the 
// .block-* classes by dividing it by 3
  height: (100vh-2vh -$gap*2-$padding*2) / 3;

// putting gap between .box-* classes
  gap: $gap;

// Style rules for mobile display
  @include query (mobile){
    flex-direction: column;
// you can pick any value you wish.
    height: 500px;
  }

}

// To select all the .box-* classes

[class ^="box-"]{

// To set the text at center of every box
  display: flex;
  justify-content: center;
  align-items: center;

// To divide spaces among the boxes
// try flex-gap:1; you can see the difference.
// flex-grow: 1; // 1+1+1 =3 => 1/3 X 100% => 33.33% each

  flex-basis: (100%)/3; // 33.33% each
  border : 2px solid black;
  border-radius: 10px;
  background-color: #c1c1c1;
}
Enter fullscreen mode Exit fullscreen mode

Level-2

Level-2

HTML

<div class="container">
  <div class="item-1">Home</div>
  <div class="item-2">About</div>
  <div class="item-3">Services</div>
  <div class="item-4">Contact</div>
</div>

Enter fullscreen mode Exit fullscreen mode

SCSS

.container{
// Change the Font-size 
  font-size: 35px;
  display: flex;

//To set orientation of the items
  flex-direction: row;

// To distribute available space
  justify-content: space-evenly;
  padding: $padding;
  border : 1vh solid $color;

// style rules starts from Tablet Screens
  @include query(tablet){
//Changing orientation of the items
    flex-direction: column;
    align-items: center;

//Setting gap for items Vertically
    gap: $gap 
  }
}
Enter fullscreen mode Exit fullscreen mode

Level-3

Level-3

HTML

<div class="container">
  <div class="block-1">Left</div>
  <div class="block-2">Right</div>
</div>
Enter fullscreen mode Exit fullscreen mode

SCSS

.container{
  display: flex;
  flex-direction: row;
  gap: $gap;
  padding: $padding;

// Style Rules for Mobile Display
  @include query(mobile){
    flex-direction: column;
  }
}


//Selecting & styling 2 classes altogether
[class ^="block-"]{

//To put the left, right text at center
  display: flex;
  justify-content: center;
  align-items: center;

  border : 4px solid $color;
//Setting height of each block
  height: 100vh -$padding*2;

// Style Rules for Mobile Display
  @include query(mobile){
    height: 50vh -$padding*2;
  }
}
Enter fullscreen mode Exit fullscreen mode
// Style Rules Left Block
.block-1{
//will occupy 20% of the Available width
  flex-grow: 2;
}

// Style Rules Right Block
.block-2{
//will occupy 80% of the Available width
  flex-grow: 8;
}
Enter fullscreen mode Exit fullscreen mode

Level-4

Level-4

HTML

<div class="container">
  <div class="block-1">
    <div class="box-1">A</div>
  </div>
  <div class="block-2">
    <div class="box-2">B</div>
    <div class="box-3">E</div>
  </div>
    <div class="block-3">
    <div class="box-4">C</div>
    <div class="box-5">D</div>
  </div>
</div>
</div>
Enter fullscreen mode Exit fullscreen mode

SCSS

// Style rules for .container
.container {
  display: flex;
  flex-direction: column;
  padding: $padding;
  gap: $gap;
}

// Style rules for all .block-*
[class ^="block-"]{
  display: flex;
  flex-direction: row;
  gap: $gap;
// Removing Padding, Gap & divide by 3
  height: (100vh -$gap*2 -$padding*2)/3;

// Style Rules for Mobile Version  
  @include query(mobile){
    flex-direction: column;
  }
}

// Style rules for all .box-*
[class ^="box-"]{
// To place the letter at center
  display: flex;
  justify-content: center;
  align-items: center;

// Border, Border-radius & background-color
  border : 1vh solid $color;
  border-radius: 10px;
  background-color: #c1c1c1;
}


//A
.box-1{
  flex-basis: 100%;
}

//B & D
.box-2, .box-5{
  flex-basis: 70%;
}
//E  & C
.box-3,.box-4{
  flex-basis: 30%
}

// Style Rules for Mobile Version 

@include query(mobile){
  .block-2{
    height: (100vh*2)/3; // 66.66vh
  }
  .block-3{
    flex-direction: row;
  }
//   Selecting B, E, C, D
  .box-2,.box-3,.box-4,.box-5{
    flex-basis: 50%;
  }
}
Enter fullscreen mode Exit fullscreen mode

Are You winning Son? Let's Turn Up the heat 🥵

Level-5

Level-5

HTML

<div class="container">
  <div class="block-1">
    <div class="box-1">A</div>
  </div>
  <div class="block-2">
    <div class="box-2">B</div>
    <div class="box-3">C</div>
    <div class="box-4">D</div>
  </div>
  <div class="block-3">
    <div class="box-5">E</div>
  </div>
</div>
Enter fullscreen mode Exit fullscreen mode

SCSS

// Style rules for .container
.container{
  display: flex;
  flex-direction: column;
  gap: $gap;
  padding: $padding;
}

// Style rules of all .block-*
[class ^="block-"]{
  display: flex;
  flex-direction: row;
  gap: $gap;
}

// Style rules of all .box-*
[class ^="box-"]{
  display: flex;
  justify-content: center;
  align-items: center;
  border : 1vh solid $color;
  border-radius: 10px;
}

// Defining A & E Together
.box-1,.box-5{
  flex-basis: 100%;
  height: 20vh;
}

// Defining C here
.box-3{
  flex-basis: 60%;
//   Removing Gap & padding
  height: 60vh -$gap*2-$padding*2;
}

// Defining B & D Together
.box-2,.box-4{
  flex-basis: 20%;
}

// Media query for mobile Screen

@include query(mobile){
  .block-2{
    flex-direction: column;
    height: 60vh;
  }
// Hiding our B block
  .box-2{
    display: none;
  }
// Increasing Height of C  
  .box-3{
    flex-basis: 80%;
  }
}
Enter fullscreen mode Exit fullscreen mode

Credits

Credits

Read More

Conclusion

Here's Your Medal For reading till the end ❤️

Suggestions & Criticisms Are Highly Appreciated ❤️

Alt Text

Alt Text

Top comments (3)

Collapse
 
simbiosis profile image
SIMBIOSIS

You know? Before reading your post I had really hard time to understand flex box anatomy and behavior.
Very useful and welcomed!

Collapse
 
andrewbaisden profile image
Andrew Baisden

Awesome well done many will find this useful.

Collapse
 
anesunapsta profile image
Anesu Napsta

nice, but where is the complete cheat sheet ?