The Power of CSS Flexbox

Preview:

Citation preview

The Power of CSS FlexboxGaurav Gupta

@FrshBakedPixels #edui_flexbox

Slides tiny.cc/flexboxslides

@FrshBakedPixels #edui_flexbox

About me

IT Analyst

Division of Learning Innovation and Student Success

Virginia Commonwealth University

@FrshBakedPixels

#edui_flexbox

Evolution of layout methods

@FrshBakedPixels #edui_flexbox

Table Div + Float Grid ResponsiveWeb Design

Flexbox

float:left float: right

Table Div + Float Grid ResponsiveWeb Design

Flexbox

Table Div + Float Grid ResponsiveWeb Design

Flexbox

12 columns

4 columns

6 columns 6 columns

4 columns 4 columns

Table Div + Float Grid ResponsiveWeb Design

Flexbox

Media Queries

12 3

@media(max-width:600px){/*CSSforsmallscreens*/}

Table Div + Float Grid ResponsiveWeb Design

Flexbox

1

2

3

@media(max-width:600px){/*CSSforsmallscreens*/}

Table Div + Float Grid ResponsiveWeb Design

Flexbox

Media Queries

The CSS3 Flexible Box, or flexbox, is a layout mode providing for the arrangement of elements on a page such that the elements behave predictably when the page layout must accommodate different screen sizes and different display devices.

- Mozilla Developer Network

“Table Div + Float Grid Responsive

Web DesignFlexbox

Basics

@FrshBakedPixels #edui_flexbox

Demo code tiny.cc/flexboxdemo

@FrshBakedPixels #edui_flexbox

<divclass="parent"><divclass="childbox1">1</div><divclass="childbox2">2</div><divclass="childbox3">3</div><divclass="childbox4">4</div><divclass="childbox5">5</div></div>

12345

1 2 3 4 5

.parent{display:flex}

1 2 3 4 5

Main Axis

Cros

s Ax

is

1 2 3 4 5

Main Axis

Cros

s Ax

is

.parent{display:flex;flex-direction:row;/*default*/}

12345

.parent{display:flex;flex-direction:column;}

12345

.parent{display:flex;flex-direction:row-reverse;}

12345

.parent{display:flex;flex-direction:column-reverse;}

Wrapping items

@FrshBakedPixels #edui_flexbox

1 2 3 4 5

1 2 3 4 5 6 7 8 9 0

1 2 3 4 5 6 78 9 0

.parent{display:flex;flex-wrap:wrap;}

1 2 3 4 5 6 78 9 0

.parent{display:flex;flex-wrap:wrap-reverse;}

1234567

890

.parent{display:flex;flex-direction:column;flex-wrap:wrap;}

Aligning items

@FrshBakedPixels #edui_flexbox

justify-content aligns items along main axis

align-content aligns rows of items along cross axis

align-items aligns items in a single row along cross axis

justify-content aligns items along main axis

align-content aligns rows of items along cross axis

align-items aligns items in a single row along cross axis

1 2 3 4 5

.parent{display:flex;justify-content:flex-start;/*default*/}

1 2 3 4 5

.parent{display:flex;justify-content:flex-end;}

1 2 3 4 5

.parent{display:flex;justify-content:center;}

1 2 3 4 5

.parent{display:flex;justify-content:space-between;}

1 2 3 4 5

.parent{display:flex;justify-content:space-around;}

justify-content aligns items along main axis

align-content aligns rows of items along cross axis

align-items aligns items in a single row along cross axis

1 2 34 5 67 8 9

.parent{display:flex;flex-wrap:wrap;align-content:flex-start;}

1 2 34 5 67 8 9

.parent{display:flex;flex-wrap:wrap;align-content:flex-end;}

1 2 34 5 67 8 9

.parent{display:flex;flex-wrap:wrap;align-content:center;}

1 2 3

4 5 6

7 8 9

.parent{display:flex;flex-wrap:wrap;align-content:space-between;}

1 2 3

4 5 6

7 8 9

.parent{display:flex;flex-wrap:wrap;align-content:space-around;}

1 2 3

4 5 6

7 8 9

.parent{display:flex;flex-wrap:wrap;align-content:stretch;/*default*/}

justify-content aligns items along main axis

align-content aligns rows of items along cross axis

align-items aligns items in a single row along cross axis

.parent{display:flex;align-items:flex-start;}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget est sit amet, euismod maximus arcu

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

.parent{display:flex;align-items:flex-end;}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget est sit amet, euismod maximus arcu

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

.parent{display:flex;align-items:center;}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget est sit amet, euismod maximus arcu

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

.parent{display:flex;align-items:baseline;}

.parent{display:flex;align-items:stretch;/*default*/}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget est sit amet, euismod maximus arcu

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

.parent{display:flex;align-items:stretch;}.box3{align-self:flex-end;/*overrideindividualchild*/}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sit amet diam feugiat

ullamcorper nunc vel, sodales mi. Aliquam tempor enim at arcu finibus, et consectetur mi blandit. Vestibulum semper commodo tempor. Ut venenatis euismod

Proin ex lectus, pellentesque eget est sit amet, euismod maximus arcu

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras eu elementum dui. In feugiat feugiat turpis.

Changing item order

@FrshBakedPixels #edui_flexbox

1 2 3 4 5

.child{order:0}/*default*/

1 2 345

.box3{order:1}

.box5{order:-1}

1 2 345

.box3{order:1}

.box5{order:-1}

order:-10001

“Flexing” items

@FrshBakedPixels #edui_flexbox

.child{flex:11200px;}

.child{flex:11200px;}

flex-basisflex-grow

flex-shrink

flex is applied to child elements

flex-basis baseline width auto

flex-grow proportion of extra width an item will get if extra space available

0

flex-shrink proportion of width it will give up if needed

1

.child{flex:01auto}/*default*/

.child{flex:10auto}

flex-grow flex-shrink

.child{flex:1010%}

.child{flex:1020%}

.child{flex:1025%}

.child{flex:1025%}

.child{flex:1125%}

.child{flex:10auto}

.box1{flex:100auto}

.child{flex:10auto}

.box1{flex:100auto}

.box2{flex:100auto}

Real world examples

@FrshBakedPixels #edui_flexbox

Example 1: Vertical align

@FrshBakedPixels #edui_flexbox

Look Ma, I'm vertically aligned!

Look Ma, I'm vertically aligned!

.parent{display:flex;align-items:center;justify-content:center;}

Look Ma, I'm vertically aligned! So am I!

.parent{display:flex;align-items:center;justify-content:center;}

Look Ma, I'm vertically aligned!

So am I!

.parent{display:flex;align-items:center;justify-content:center;flex-direction:column;}

Example 2: Equal height columns

@FrshBakedPixels #edui_flexbox

Columns with grid layout

Columns with flexbox

.row{display:flex;flex-wrap:wrap;}.card-link{flex:10250px;display:flex;flex-direction:column;}.button{margin-top:auto;}

Example 3: Grid vs. Flexbox

@FrshBakedPixels #edui_flexbox

col-4 col-4 col-4

col-3 col-3 col-3 col-3

? ? ? ??

Web app navigation

.parent{display:flex;}.child{flex:1010%;}

.parent{display:flex;}.child{flex:1010%;}

the CSS code stays the same for 3, 4 or 5 items

Example 4: Reordering content

@FrshBakedPixels #edui_flexbox

@media(max-width:1000px)and(orientation:landscape){.Breadcrumbs{order:1;}nav{order:2;}footer{order:3;}}

Example 5: Alignment Shifting Wrapping

@FrshBakedPixels #edui_flexbox

Source: https://css-tricks.com/useful-flexbox-technique-alignment-shifting-wrapping/ ≫

.flex-title{display:flex;align-items:flex-end;flex-wrap:wrap;}

.flex-title.title-main{flex-grow:1;}

Browser support

@FrshBakedPixels #edui_flexbox

Source: http://caniuse.com/#search=flexbox

.parent{display:flex;align-items:center;}.child{flex:01auto;}

.parent{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;}.child{-webkit-box-flex:0;-webkit-flex:01auto;-ms-flex:01auto;flex:01auto;}

Browser prefixes

Supporting older browsers

Use fallbacks .parent{display:table;display:flex;}.child{display:table-cell;width:20%;flex:1020%;}

Use Modernizr .no-flexbox.parent{display:table;}.flexbox.parent{display:flex;}

Resources• Flexbox cheat sheet

https://css-tricks.com/snippets/css/a-guide-to-flexbox

• Using Flexbox: Mixing Old and New for the Best Browser Support https://css-tricks.com/using-flexbox/

• Video: Enhancing Responsiveness with Flexboxhttps://vimeo.com/124796320

• Autoprefixerhttps://github.com/postcss/autoprefixer

• Modernizrhttp://modernizr.com/

Recommended