Styling with Style

Flexbox

Text

Layout History

Tables

Floats

Let's Talk About Flex

Flex Container

.flex-container {
  display: flex
}

OR 

.flex-container {
  display: inline-flex
}

Main Axis vs Cross Axis

.flex-container {
  flex-direction: row || column; 
}

Flex Direction

Flex Container Properties

.flex-container {
  flex-wrap: nowrap || wrap || wrap-reverse;
}

Flex Wrap

Flex Container Properties

.flex-container {
  flex-flow: row wrap; /* direction row, wrap items */
}

Flex Flow

Flex Container Properties

.flex-container {
  justify-content: flex-start || flex-end || center || 
     space-between || space-around;
}

Justify Content

Flex Container Properties

.flex-container {
  align-items: flex-start || flex-end || center ||
     stretch || baseline;
}

Align Items

Flex Container Properties

.flex-container {
  align-content: flex-start || flex-end || center ||
     stretch;
}

Align Content

Flex Container Properties

.flex-item {
    order: 1;
}

Order

Flex Item Properties

.flex-item {
    flex-grow: 0; /* default is 0 */
    
    flex-shrink: 1; /* default is 1 */
}

Grow and Shrink

Flex Item Properties

.flex-item {
    flex-basis: 150px; /* Can use any size suffix, 
      note that %'s don't work in iOS */
}

Flex Basis

Flex Item Properties

Flex Shorthand

.flex-item { 
    flex: 0 1 auto; /* shortand: flex-grow flex-shrink
      flex-basis */
}

Flex Item Properties

.flex-item {
    align-self: auto || flex-start || flex-end 
      || center || baseline || stretch;
}

Align-self

Component Layout

When To Use Flexbox?

Entering the Grid

Mind Opening Concept

Grid Basics

Grid Container Properties

display: grid

grid-template-columns

grid-temaplate-rows

grid-template-areas

grid-column-gap

grid-row-gap

grid-template-gap

grid-gap

.grid-container {
    display: grid
}
.grid-container {
    display: grid
    grid-template-columns: 150px 150px 150px 150px 150px
    grid-template-rows: repeat(3, 150px);
}

.grid-container {
    display: grid
    grid-template-columns: repeat(5, 150px);
    grid-template-rows: repeat(3, 150px);
    grid-gap: 10px;
}

Building a Grid Container

Grid Items Properties

grid-column-start

grid-column-end

grid-row-start

grid-row-end

grid-area

span

 

.item-c {
  grid-column-start: 5;
  grid-column-end: 6;
  grid-row-start: 1;
  grid-row-end: 2;
  background-color: orange;
}

.item-a {
  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 1;
  grid-row-end: 4;
  background-color: green;
}

.item-b {
  grid-column-start: 3;
  grid-column-end: 5;
  grid-row-start: 2;
  grid-row-end: 4;
  background-color: blue;
}

Placing Grid Items

.item-c {
  grid-column: 5 / 6;
  grid-row: 1 / 2;
  background-color: orange;
}

.item-a {
  grid-column: 1 / 2;
  grid-row: 1 / span 3;
  background-color: green;
}

.item-b {
  grid-column: 3 / 5; 
  grid-row: 2 / span 2;
  background-color: blue;
}

Placing Grid Items

.item-c {
  grid-area: 1 / 5 / 2 / 6; 
  background-color: orange;
}

.item-a {
  grid-area: 1 / 1 / 4 / 2; 
  background-color: green;
}

.item-b {
  grid-area: 2 / 3 / 4 / 5; 
  background-color: blue;
}

/* <row-start> / <column-start> / <row-end> / <column-end> */
/* counter-clockwise starting at the top */

Placing Grid Items

Grid Template Areas

.item-a {
  grid-area: header;
}

.item-b {
  grid-area: main;
}

.item-c {
  grid-area: aside;
}

.item-d {
  grid-area: footer;
}

.grid-container {
  grid-template-columns: repeat(4, 150px);
  grid-template-rows: repeat(4, 120px);
  grid-template-areas:
    "header header header header"
    "main main main aside"
    "main main main aside"
    "footer footer footer footer";
}

The Power of Grid

.items {
  color: white;
  background: darkslategray;
  padding: 15px;
}
.boat img {
  width: 250px;
}
.logo img {
  width: 120px;
}
.item-1 {
  grid-area: one;
  background: blue;
}
.item-2 {
  grid-area: two;
}
.item-3 {
  grid-area: three;
}
.item-4 {
  grid-area: four;
  padding: 0;
}
.item-5 {
  grid-area: five;
  background: red;
  padding-top: 25px;
  text-align: center;
  font-size: 20px
}
.item-6 {
  grid-area: six;
}
.item-7 {
  grid-area: seven;
}
.item-8 {
  grid-area: eight;
  padding: 0px;
  background: none;
}
.grid-container {
  display: grid;
  grid-template-columns: repeat(7, 120px);
  grid-template-rows: repeat(7, 80px);
  grid-gap: 10px;
  grid-template-areas:
  ". one . . . . ."
  "eight one six six six six ."
  "seven one six six six six ."
  "seven four four five five five five"
  "seven four four two two three ."
  "seven four four two two three ."
  ". four four . . three .";
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Grid Crazy</title>
    <link rel="stylesheet" href="./main.css">
  </head>
  <body>
    <div class="grid-container">
      <div class="item-1 items">1</div>
      <div class="item-4 items img-1"><img src="./img.png"></div>
      <div class="item-5 items">This is where item five resides</div>
      <div class="item-6 items">6</div>
      <div class="item-7 items">7</div>
      <div class="item-8 items img-2"><img src="./logo.png"></div>
      <div class="item-2 items">2</div> <!-- line 16 -->
      <div class="item-3 items">3</div> <!-- line 17 -->
    </div>
  </body>
</html>

Responsive Design

fr unit

auto

max-content

min-content

auto-fill

minmax()

.grid-container {
    display: grid;
    width: 750px;
    grid-template-columns: 150px 1fr 2fr;
}

/* a column with min width of 200px, max of 250px, and two columns of 1fr */
            grid-template-columns: minmax(200px, 250px) 1fr 1fr;

Responsive By Nature

.container{
  grid-template-columns: 40px 50px auto 50px 40px;
  grid-template-rows: 25% 100px auto;
}
.grid-container {
    display: grid;
    grid-template-columns: repeat(9, 1fr);
    grid-template-rows: repeat(3, 150px) 2fr
}
grid-template-columns: minmax(max-content, 300px) 1fr 150px;
body {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(25ch, 1fr));
}

From 1 to -1

.item-a {
    grid-column: 1 / -1;
    grid-row: 1;
}

Media Queries

Change how many columns or rows

Change where the items are placed

Media Queries

@media all and (min-width: 53.125em) {
    .new-item {
        grid-column: 1 / 7;
        grid-row: 1 / 2;
    }
}

.new-item
    grid-column: 1 / -1;
    grid-row: 1;
}

Media Queries

@media all and (min-width: 75em) {
    .new-item {
        grid-column: 1 / 4;
        grid-row: 1 / 2;
    }
}
.new-item
    grid-column: 1 / -1;
    grid-row: 1;
}

Can I Use...

Feature Queries

@supports not (display: grid) {
  div {
    display: flex;
  }
}

Fallbacks & Overides

Flexbox and Grid

Resources

Rachel Andrew

"Queen of Grid"

CSS Grid Garden

Mozilla's Grid Waffle

Flexbox Links

CSS Grid Links

Flexbox Links

CSS Grid Links

Made with Slides.com