SlideShare a Scribd company logo
1 of 117
Download to read offline
Flexbox
Zoe Mickley Gillenwater @zomigiFrontend United
May 2016
TODAY
USING
I work for
Psst…you can too: www.workingatbooking.com
My portfolio site from 2000
My portfolio site from 2000
tables
positioning
floats
inline-block
table-cell
flexbox
grid multi-columnexclusions
shapes
regionsflexbox
when
what
flexbox
how
Deciding when to use and not use flexbox
WHEN 1.
What browsers do I need to
support?
Don’t ask yourself this—it’s irrelevant here
(IMO)
Flexbox has 94% coverage worldwide
We support IE 7-9 at Booking, but still use flexbox as
progressive enhancement.
Do I want to create a layout in
1 dimension (row OR column)
or 2 dimensions?
Hat-tip to Rachel Andrew:
https://rachelandrew.co.uk/archives/2016/03/30/should-i-use-grid-or-flexbox/
Flexbox is not a grid
 Not meant for or great at whole page layout
 Flex items only care about space in their
own row/column
 They don’t care about lining up in the other
dimension
Demo by Rachel Andrew: http://codepen.io/rachelandrew/pen/YqqdXL
Flexbox is best for:
 UI components
 Simple whole page layouts (not grid-based)
 Enhancing a complex layout’s alignment,
spacing, etc. (not controlling placement)
Do I need my content to dictate
sizing and placement,
or do I need to control these?
Content determines
boxes’ size and
placement
(Mega-useful when
content is unknown and
variable, or readability is
a top priority.)
Structure determines
content’s size and
placement
(P.S. Flexbox can do this
too, if you want. It’s just
the reverse that doesn’t
work so well.)
Flexbox Grids
Does flexbox offer me anything
I can’t already get
from an existing layout method?
New things flexbox offers
 Content-driven, unit-less sizes
 Content-driven, media-query-less layout changes
 Mixed-unit layouts
 Equal-height columns
 Vertical centering and other alignments
 Spacing out or stretching items to fill unknown width/height
 Combining content wrapping and block wrapping
 Pinning items without overlaps
 Visual order different than HTML/reading order
Components flexbox can enhance and
UI/UX problems it can help you solve
WHAT 2.
content-driven, unit-less sizes
How big do I make this thing?
%
em/rem
vw/vh
Relative units of measurement
are your best guess at the
ideal, but they’re still a guess.
Flexbox gets us closer to the
ideal, because it lets us design
without units.
Example: a responsive form
from http://jobs.theguardian.com/
My copy of that form
Same floats, same percentage widths
The trouble with explicit sizing
Since the select and button are sized by a
percentage, not sized automatically by their
content, this can happen:
Box too small for its content Box too big for its content
Use the flex property instead
Tells browser starting size (including content
size) and whether item can grow or shrink
width: 33.333%
flex: auto
Fill up remaining space
width: 16.666%
flex: none
Size to content exactly
Form fields are a pain in the butt
The fields and button don’t all match each
other exactly in height
Fix alignment with flexbox
Turn each field wrapper into flex container so
field inside will stretch to match height of line:
.flexbox .jobs-form_field-wrapper {
display: flex;
align-items: stretch; /* default */
width: auto;
}
Fields misaligned without flexbox Fields match height due to align-items
Smarter sizing
Non-flexbox
Flexbox enhanced
Content-driven sizing on Booking.com
Last year’s sidebar searchbox design, with
fixed-width select fields
Content-driven sizing on Booking.com
Non-flexbox Flexbox enhanced
Content-driven sizing on Booking.com
.sb-dates {
display: flex;
}
.sb-dates__icon {
flex: 0 0 23px;
}
.sb-dates__select-day {
flex: 1 0 auto;
margin: 0 6px;
}
.sb-dates__select-month {
flex: 1 1 auto;
}
flex container
main axis
flex items
Defining the flex property
flex-grow
how much flex
item will grow
relative to
other items if
extra space is
available
(proportion
of extra space
that it gets)
flex-shrink
how much item
will shrink
relative to others
if there is not
enough space
(proportion of
overflow that
gets shaved off)
flex-basis
the initial
starting size
before free
space is
distributed
(any standard
width/height
value, including
auto)
Translating the flex property
.sb-dates {
display: flex;
}
.sb-dates__icon {
flex: 0 0 23px;
}
.sb-dates__select-day {
flex: 1 0 auto;
margin: 0 6px;
}
.sb-dates__select-month {
flex: 1 1 auto;
}
Start out 23px wide, and don’t grow
or shrink further
Start out sized to your content, then
grow with 1 share of any extra space
available, but don’t ever shrink
Start out sized to your content, then
grow with 1 share of extra space, but
if there’s an overflow shrink
Mixed-unit layout is easier with
calc(), but not even it can do:
calc(100% - 23px - the width of
the day field in Greek)
Taking advantage of variable space
Task: add a
message about
low availability
of the room
price shown:
“We have only X
left on our site!”
How about right here
in this lovely big gap?
Taking advantage of variable space
Problem: the gap
is not always big
enough to hold a
sentence of text
Taking advantage of variable space
Solution: use
flexbox to place
text beside price
when space
allows; otherwise,
it can wrap below
price
Progressive enhancement
Non-flexbox Flexbox enhanced
Content-driven layout change
2 columns 3 columns
RWD content-driven layout change
Narrow: 1 column Wide: 2 columns
RWD content-driven layout change
.article-header {
display: flex;
flex-flow: row wrap;
margin-left: -20px;
}
.article-header-image {
flex: 1 1 320px;
padding-left: 20px;
}
When 320px + 20em can fit together, layout shifts
to 1 row/2 columns
.article-header-text {
flex: 1 1 20em;
padding-left: 20px;
}
Layout change without media query
1. Let the blocks wrap and stack when needed:
.article-header {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
/* default */
Layout change without media query
2. Size the blocks to control their wrapping
point:
.article-header-image {
flex: 1 1 320px;
padding-left: 20px;
}
.article-header-text {
flex: 1 1 20em;
padding-left: 20px;
}
In other words…
Not enough space for
320px + 20em, so text
block wraps. Each block
then stretches wider than
320px/20em to fill its line.
320px + 20em is less than 100%, so both can fit together
on single line. Each then stretch equally as needed to
fill 100% of the space.
Stretching to fill unknown width/height
flex: 1 1 auto
align-content:
space-between
Improved wrapping in RWD layout
With float or text-align With flex or justify-content
Flexbox is great for spacing
and aligning stuff, especially
shifting content in RWD.
Demo: full-width nav bar
 All links on same line
 First link flush left, last link flush right
 Equal spaces between all links
Trying display:table-cell
 All links on same line
 First link flush left, last link flush right
 Equal spaces between all links
Spacing with table-layout:fixed
Starter centered nav bar, no flexbox
.list-nav {
margin: 0;
padding: 0;
list-style: none;
text-align: center;
}
.list-nav-item {
display: inline-block;
padding: 0 .5em;
}
from www.smoresday.us
Enhanced to full-width with flexbox
.list-nav {
display: flex;
justify-content: space-between;
margin: 0;
padding: 0;
list-style: none;
text-align: center; /* fallback */
}
.list-nav-item {
display: inline-block; /* fallback */
padding: 0 .5em; /* fallback */
}
Combine with inline-block
Non-flexbox
fallback version
Flexbox version
This works vertically too.
Demo: full-height stacked icons
.wrapper
.icons
.content
Demo: full-height stacked icons
1. Turn children .icons and .content into
side-by-side, equal-height flex items
.wrapper {
display: flex;
align-items: stretch; /* default */
}
Only children become flex items
So these 2 children are the flex items
This is the flex container
These 3 grandchildren aren’t flex items (yet)
Demo: full-height stacked icons
2. Turn .icons into flex container with
vertically stacked children (the 3 icons):
.icons {
display: flex;
flex-direction: column; /* main axis */
}
Demo: full-height stacked icons
3. Equally space the 3 icons along the vertical
main axis:
.icons {
display: flex;
flex-direction: column;
justify-content: space-between;
}
Demo: full-height stacked icons
Fallback alignment options
Top-aligned (float) Centered (table-cell)
Flexbox can also enhance
visual ordering.
Improve the wide layout
Wide: too stretched out
A more responsive enhancement
order
integer to specify flow order of flex items
0 0 0default source order 0 0
10 0re-ordered 0 0
0 0-1re-ordered 0 0
210re-ordered 10
Use order property to move logo
1. Divide nav bar into order groups:
.list-nav-item_home, .list-nav-item_builder {
order: 0; /* default, and first here */ }
.logo {
order: 1; /* second */ }
.list-nav-item_party, .list-nav-item_tumblr {
order: 2; /* last */ }
Use order property to move logo
2. Split extra space on line to center logo:
.logo {
order: 1;
margin-left: auto;
margin-right: auto;
}
A more responsive nav bar
Order only works on siblings
To move logo to middle of list, it needs to be
part of list
<div class="logo"><img src="images/logo.png"></div>
<ul class="list-nav">
<li class="logo"><img src="images/logo.png"></li>
<li class="link-home"><a>home</a></li>
<li class="link-builder"><a>s'mores builder</a></li>
<li class="link-party"><a>throw a party</a></li>
<li class="link-tumblr"><a>tumblr</a></li>
</ul>
Reorder for good, not evil.
Demo: moving a photo on mobile
Demo: moving a photo on mobile
Desktop: HTML order (no flexbox)Mobile: reordered
Use flexbox order in mobile styles
.recipe {
display: flex;
flex-direction: column;
}
.recipe figure {
order: -1; /* before all items with default order: 0 */
}
.recipe figure img {
width: 100%;
}
Turn off flexbox in desktop styles
@media screen and (min-width:800px) {
.recipe {
display: block; /* turn off flexbox */
}
.recipe figure {
float: right;
width: 55%;
}
}
Demo: moving a photo on mobile
Flexbox enhanced Non-flexbox
Reordering on The Guardian
12 3
4 56
flex-direction: row-reverse
flex-direction: row-reverse
1
2
3
4
5
6
These examples don’t look wrong
or broken without flexbox.
Flexbox just enhances their sizing
and spacing to look better.
Step-by-step process for adding flexbox
to your UI components effectively
HOW 3.
Don’t freak out
Decide whether flexbox is the
right tool for the job
Decide which versions of
flexbox to support
standard, 2011/2012, and/or 2009
Browser support approaches to choose
 Use only the non-prefixed, standard syntax
 … plus browser-prefixed versions of
standard syntax
 … plus -ms- prefixed 2011/2012 syntax
 … plus -webkit- prefixed 2009 syntax
I recommend you skip the ‘09 syntax
 It’s slower to render than current syntax*
 Doesn’t support wrapping
 Its browsers have small market share
 If using flexbox for progressive
enhancement, its browsers can get same
fallback given to non-supporting browsers
* http://updates.html5rocks.com/2013/10/Flexbox-layout-isn-t-slow
Let tools add browser variants for you
 Autoprefixer: https://github.com/ai/autoprefixer
 Sass or LESS mixins can be customized to
add just the browser variants you want
 https://github.com/mastastealth/sass-flex-mixin
 https://gist.github.com/cimmanon/4461470
 https://github.com/thoughtbot/bourbon/blob/mast
er/app/assets/stylesheets/css3/_flex-box.scss
 https://github.com/annebosman/FlexboxLess
Add Modernizr as needed with flexbox
Flexbox and fallback styles can often co-
exist, but sometimes need to isolate them
http://zomigi.com/blog/using-modernizr-with-flexbox/
Or use @supports
.gallery-item {
display: inline-block;
}
@supports (flex-wrap: wrap) {
.gallery {
display: flex;
flex-wrap: wrap;
}
}
https://developer.mozilla.org/en-US/docs/Web/CSS/@supports
But IE 10-11, which do
support flexbox but
don’t support
@supports, won’t get
these styles
Choose and add appropriate
starter/fallback layout CSS
Things to consider
Do I need content blocks to wrap? not table-cell
Do I want to prevent blocks from wrapping? floats, inline-block, but
table-cell best
Do I need content-driven sizes? floats, but table-cell or
inline-block best
Do I need vertical alignment? inline-block, table-cell
Do I need horizontal alignment? floats, table-cell, inline-
block only with preset
sizes
Pick your starter layout CSS
 Floats
 table-cell
 inline-block
 Absolute positioning
Flexbox will override: Flexbox will not override:
Just use whatever you normally would;
flexbox plays nicely with most of them.
A real example of this process
Split left-right layout
Task: lay out review score
and price, on opposite
sides of same line
Needs:
 content-driven sizing
 horizontal alignment
 wrapping
score price or
“sold out”
Adding the starter CSS
.iw_mini_review_score_wrapper {
float: left;
}
.iw_mini_price_wrapper {
float: right;
}
Start adding flexbox!
Decide whether entire
component needs to be
block or inline-block
display:flex or inline-flex
Creating the block flex container
.iw_mini_details_wrapper {
display: flex;
}
.iw_mini_review_score_wrapper {
float: left;
}
.iw_mini_price_wrapper {
float: right;
}
Flex container sits
on a new row below,
like a block element
Decide flow of flex items
Things to consider
Lay out horizontally or vertically? flex-direction:row or
column
Allow boxes to wrap? flex-wrap:wrap,
wrap-reverse or nowrap
Order different than source? order values;
flex-direction:
row-reverse or
column-reverse
Allowing wrapping
.iw_mini_details_wrapper {
display: flex;
flex-wrap: wrap;
}
.iw_mini_review_score_wrapper {
float: left;
}
.iw_mini_price_wrapper {
float: right;
}
Allows second block to
wrap down if needed
Decide which items can
grow to fill space,
shrink to avoid overflow,
or must stay at a certain size
Tips for setting flex values
 Write out full flex values, rather than
using single-digit and keyword values
 flex: 1 1 0% instead of flex: 1
 Hidden default values can lead to mistakes
 Avoids IE 10-11 bugs
 Think about it backwards: first decide
flex-basis, then -shrink, then -grow
Tips for setting flex-basis values
 Acts like min-width when wrapping on
 If flex-wrap off and flex-shrink on,
browser can go smaller than flex-basis
 Be careful with flex-basis:0 when
wrapping
 Use flex-basis:auto whenever possible
Setting flex-shrink
 Always have at least 1 item per line that
can shrink (or wrap, or both)
Setting flex-grow
 Decide what to do with extra space
 Fill it up? (flex-grow: 1, 2, etc.)
 Leave it? (flex-grow: 0)
Setting flex values
.iw_mini_details_wrapper {
display: flex;
flex-wrap: wrap;
}
.iw_mini_review_score_wrapper {
float: left;
flex: 0 1 auto;
}
.iw_mini_price_wrapper {
float: right;
flex: 0 1 auto;
}
Size to content, shrink
smaller if you have to,
don’t grow bigger
(default value)
Decide how to align flex items
Main axis alignment
(horizontal when row,
vertical when column)
Cross axis alignment
(vertical when row,
horizontal when column)
(P.S. Also responsible for
equal-height columns)
justify-content align-items
Controlling alignment
.iw_mini_details_wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: baseline;
}
.iw_mini_review_score_wrapper {
float: left;
}
.iw_mini_price_wrapper {
float: right;
}
Moves first item to left,
last item to right
Improved wrapping
Non-flexbox Flexbox enhanced
Flexbox with float fallback
.iw_mini_details_wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: baseline;
}
.iw_mini_review_score_wrapper {
float: left;
}
.iw_mini_price_wrapper {
float: right;
}
Flexbox properties on
container override
floating automatically
in supporting
browsers
Floating gets used by
old browsers
Test
Testing your flexbox
 Too Flexy bookmarklet for toggling
Modernizr flexbox classes:
http://chriswrightdesign.github.io/tooflexy/
 If reordering, check tabbing and screen
reading order to make sure it’s still logical
Fix bugs
https://github.com/philipwalton/flexbugs
Summing up the process
1. Decide whether to use flexbox and which browser
versions of it
2. Choose and add starter layout CSS
3. Choose and add flexbox CSS
1. Block or inline-block container
2. Flow
3. Flex to control sizing
4. Alignment
4. Test and fix bugs
Flexbox is not for the future.
You can use flexbox today.
Thanks!
Zoe Mickley Gillenwater
@zomigi
design@zomigi.com
zomigi.com

More Related Content

What's hot

Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)Zoe Gillenwater
 
Using Flexbox Today (Frontier Conf 2016)
Using Flexbox Today (Frontier Conf 2016)Using Flexbox Today (Frontier Conf 2016)
Using Flexbox Today (Frontier Conf 2016)Zoe Gillenwater
 
Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)Zoe Gillenwater
 
Flexbox and Grid Layout: How you will structure layouts tomorrow.
Flexbox and Grid Layout: How you will structure layouts tomorrow.Flexbox and Grid Layout: How you will structure layouts tomorrow.
Flexbox and Grid Layout: How you will structure layouts tomorrow.Diego Eis
 
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)Stephen Hay
 
Putting Flexbox into Practice (Fronteers)
Putting Flexbox into Practice (Fronteers)Putting Flexbox into Practice (Fronteers)
Putting Flexbox into Practice (Fronteers)Zoe Gillenwater
 
Ridiculously Easy Layouts with Flexbox
Ridiculously Easy Layouts with FlexboxRidiculously Easy Layouts with Flexbox
Ridiculously Easy Layouts with FlexboxEric Carlisle
 
Flexbox Will Shock You!
Flexbox Will Shock You!Flexbox Will Shock You!
Flexbox Will Shock You!Scott Vandehey
 

What's hot (10)

Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)
 
Using Flexbox Today (Frontier Conf 2016)
Using Flexbox Today (Frontier Conf 2016)Using Flexbox Today (Frontier Conf 2016)
Using Flexbox Today (Frontier Conf 2016)
 
Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)
 
The Power of CSS Flexbox
The Power of CSS FlexboxThe Power of CSS Flexbox
The Power of CSS Flexbox
 
Flexbox and Grid Layout: How you will structure layouts tomorrow.
Flexbox and Grid Layout: How you will structure layouts tomorrow.Flexbox and Grid Layout: How you will structure layouts tomorrow.
Flexbox and Grid Layout: How you will structure layouts tomorrow.
 
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)
Flexbox: One Giant Leap for Web Layout (GenerateConf 2013)
 
Putting Flexbox into Practice (Fronteers)
Putting Flexbox into Practice (Fronteers)Putting Flexbox into Practice (Fronteers)
Putting Flexbox into Practice (Fronteers)
 
Ridiculously Easy Layouts with Flexbox
Ridiculously Easy Layouts with FlexboxRidiculously Easy Layouts with Flexbox
Ridiculously Easy Layouts with Flexbox
 
Flexbox Will Shock You!
Flexbox Will Shock You!Flexbox Will Shock You!
Flexbox Will Shock You!
 
Fewd week3 slides
Fewd week3 slidesFewd week3 slides
Fewd week3 slides
 

Viewers also liked

6. таблицы и другие теги html
6. таблицы и другие теги html6. таблицы и другие теги html
6. таблицы и другие теги htmlSergei Dubrov
 
Getting Started With Php Frameworks @BCP5
Getting Started With Php Frameworks @BCP5Getting Started With Php Frameworks @BCP5
Getting Started With Php Frameworks @BCP5Amit Kumar Singh
 
Css part2
Css part2Css part2
Css part2ISsoft
 
Таблицы Html
Таблицы HtmlТаблицы Html
Таблицы HtmlVasya Petrov
 
CSS Lessons Learned the Hard Way (Generate Conf)
CSS Lessons Learned the Hard Way (Generate Conf)CSS Lessons Learned the Hard Way (Generate Conf)
CSS Lessons Learned the Hard Way (Generate Conf)Zoe Gillenwater
 
Joomla Request To Response
Joomla Request To ResponseJoomla Request To Response
Joomla Request To ResponseAmit Kumar Singh
 
решение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте baрешение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте baISsoft
 
Верстка_Лекция1
Верстка_Лекция1Верстка_Лекция1
Верстка_Лекция1itc73
 
Uwe usability evaluation
Uwe usability evaluationUwe usability evaluation
Uwe usability evaluationLon Barfield
 
Пингвины из калининграда
Пингвины из калининградаПингвины из калининграда
Пингвины из калининградаAndrew Yashenko
 
CSS Lessons Learned the Hard Way (ConvergeSE)
CSS Lessons Learned the Hard Way (ConvergeSE)CSS Lessons Learned the Hard Way (ConvergeSE)
CSS Lessons Learned the Hard Way (ConvergeSE)Zoe Gillenwater
 
Organisation and navigation
Organisation and navigationOrganisation and navigation
Organisation and navigationLon Barfield
 
Введение в веб-проектирование
Введение в веб-проектированиеВведение в веб-проектирование
Введение в веб-проектированиеMaryia Davidouskaia
 
FL Blog Con 2015: How To Find The Best WordPress Plugins For You
FL Blog Con 2015: How To Find The Best WordPress Plugins For YouFL Blog Con 2015: How To Find The Best WordPress Plugins For You
FL Blog Con 2015: How To Find The Best WordPress Plugins For YouAdam Soucie
 
WordPress as Rapid Prototyping Tool
WordPress as Rapid Prototyping ToolWordPress as Rapid Prototyping Tool
WordPress as Rapid Prototyping ToolAmit Kumar Singh
 
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Yandex
 
17. основы css (cascading style sheets)
17. основы css (cascading style sheets)17. основы css (cascading style sheets)
17. основы css (cascading style sheets)Sergei Dubrov
 

Viewers also liked (20)

6. таблицы и другие теги html
6. таблицы и другие теги html6. таблицы и другие теги html
6. таблицы и другие теги html
 
Getting Started With Php Frameworks @BCP5
Getting Started With Php Frameworks @BCP5Getting Started With Php Frameworks @BCP5
Getting Started With Php Frameworks @BCP5
 
Css part2
Css part2Css part2
Css part2
 
Таблицы Html
Таблицы HtmlТаблицы Html
Таблицы Html
 
CSS Lessons Learned the Hard Way (Generate Conf)
CSS Lessons Learned the Hard Way (Generate Conf)CSS Lessons Learned the Hard Way (Generate Conf)
CSS Lessons Learned the Hard Way (Generate Conf)
 
Joomla Request To Response
Joomla Request To ResponseJoomla Request To Response
Joomla Request To Response
 
Box Model
Box ModelBox Model
Box Model
 
решение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте baрешение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте ba
 
Верстка_Лекция1
Верстка_Лекция1Верстка_Лекция1
Верстка_Лекция1
 
Uwe usability evaluation
Uwe usability evaluationUwe usability evaluation
Uwe usability evaluation
 
Пингвины из калининграда
Пингвины из калининградаПингвины из калининграда
Пингвины из калининграда
 
Php Security
Php SecurityPhp Security
Php Security
 
CSS Lessons Learned the Hard Way (ConvergeSE)
CSS Lessons Learned the Hard Way (ConvergeSE)CSS Lessons Learned the Hard Way (ConvergeSE)
CSS Lessons Learned the Hard Way (ConvergeSE)
 
Organisation and navigation
Organisation and navigationOrganisation and navigation
Organisation and navigation
 
Введение в веб-проектирование
Введение в веб-проектированиеВведение в веб-проектирование
Введение в веб-проектирование
 
How Joomla Works
How Joomla WorksHow Joomla Works
How Joomla Works
 
FL Blog Con 2015: How To Find The Best WordPress Plugins For You
FL Blog Con 2015: How To Find The Best WordPress Plugins For YouFL Blog Con 2015: How To Find The Best WordPress Plugins For You
FL Blog Con 2015: How To Find The Best WordPress Plugins For You
 
WordPress as Rapid Prototyping Tool
WordPress as Rapid Prototyping ToolWordPress as Rapid Prototyping Tool
WordPress as Rapid Prototyping Tool
 
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
 
17. основы css (cascading style sheets)
17. основы css (cascading style sheets)17. основы css (cascading style sheets)
17. основы css (cascading style sheets)
 

Similar to Using Flexbox Today (Frontend United 2016)

Putting Flexbox into Practice
Putting Flexbox into PracticePutting Flexbox into Practice
Putting Flexbox into PracticeZoe Gillenwater
 
Flexbox every developers dream
Flexbox every developers dreamFlexbox every developers dream
Flexbox every developers dream2019gracesmith
 
Is Flexbox the Future of Layout?
Is Flexbox the Future of Layout?Is Flexbox the Future of Layout?
Is Flexbox the Future of Layout?jameswillweb
 
CSS Lessons Learned the Hard Way (Beyond Tellerand)
CSS Lessons Learned the Hard Way (Beyond Tellerand)CSS Lessons Learned the Hard Way (Beyond Tellerand)
CSS Lessons Learned the Hard Way (Beyond Tellerand)Zoe Gillenwater
 
CSS Lessons Learned The Hard Way – Zoe Gillenwater
CSS Lessons Learned The Hard Way – Zoe GillenwaterCSS Lessons Learned The Hard Way – Zoe Gillenwater
CSS Lessons Learned The Hard Way – Zoe Gillenwaterbeyond tellerrand
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSSBoris Paillard
 
Understanding the flex layout
Understanding the flex layoutUnderstanding the flex layout
Understanding the flex layoutBarak Drechsler
 
Show & tell - Flex in flux
Show & tell - Flex in fluxShow & tell - Flex in flux
Show & tell - Flex in fluxDan Dineen
 
Flex Web Development.pdf
Flex Web Development.pdfFlex Web Development.pdf
Flex Web Development.pdfSonia Simi
 
Create formsexcel
Create formsexcelCreate formsexcel
Create formsexcelRavi Gajul
 
Controls Use in Windows Presentation Foundation (WPF)
Controls Use in Windows Presentation Foundation (WPF)Controls Use in Windows Presentation Foundation (WPF)
Controls Use in Windows Presentation Foundation (WPF)iFour Technolab Pvt. Ltd.
 
The New CSS Layout - dotCSS
The New CSS Layout - dotCSSThe New CSS Layout - dotCSS
The New CSS Layout - dotCSSRachel Andrew
 
CSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS LayoutCSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS LayoutRachel Andrew
 
The Right Layout Tool for the Job
The Right Layout Tool for the JobThe Right Layout Tool for the Job
The Right Layout Tool for the JobRachel Andrew
 
But what about old browsers?
But what about old browsers?But what about old browsers?
But what about old browsers?Rachel Andrew
 
Understanding Flexbox Layout in React Native.pdf
Understanding Flexbox Layout in React Native.pdfUnderstanding Flexbox Layout in React Native.pdf
Understanding Flexbox Layout in React Native.pdfKaty Slemon
 
Grid and Flexbox - Smashing Conf SF
Grid and Flexbox - Smashing Conf SFGrid and Flexbox - Smashing Conf SF
Grid and Flexbox - Smashing Conf SFRachel Andrew
 
Render Conf: Start using CSS Grid Layout Today
Render Conf: Start using CSS Grid Layout TodayRender Conf: Start using CSS Grid Layout Today
Render Conf: Start using CSS Grid Layout TodayRachel Andrew
 

Similar to Using Flexbox Today (Frontend United 2016) (20)

Putting Flexbox into Practice
Putting Flexbox into PracticePutting Flexbox into Practice
Putting Flexbox into Practice
 
Flexbox every developers dream
Flexbox every developers dreamFlexbox every developers dream
Flexbox every developers dream
 
A complete guide to flexbox
A complete guide to flexboxA complete guide to flexbox
A complete guide to flexbox
 
Is Flexbox the Future of Layout?
Is Flexbox the Future of Layout?Is Flexbox the Future of Layout?
Is Flexbox the Future of Layout?
 
CSS Lessons Learned the Hard Way (Beyond Tellerand)
CSS Lessons Learned the Hard Way (Beyond Tellerand)CSS Lessons Learned the Hard Way (Beyond Tellerand)
CSS Lessons Learned the Hard Way (Beyond Tellerand)
 
CSS Lessons Learned The Hard Way – Zoe Gillenwater
CSS Lessons Learned The Hard Way – Zoe GillenwaterCSS Lessons Learned The Hard Way – Zoe Gillenwater
CSS Lessons Learned The Hard Way – Zoe Gillenwater
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSS
 
Understanding the flex layout
Understanding the flex layoutUnderstanding the flex layout
Understanding the flex layout
 
Show & tell - Flex in flux
Show & tell - Flex in fluxShow & tell - Flex in flux
Show & tell - Flex in flux
 
Flex Web Development.pdf
Flex Web Development.pdfFlex Web Development.pdf
Flex Web Development.pdf
 
Create formsexcel
Create formsexcelCreate formsexcel
Create formsexcel
 
Controls Use in Windows Presentation Foundation (WPF)
Controls Use in Windows Presentation Foundation (WPF)Controls Use in Windows Presentation Foundation (WPF)
Controls Use in Windows Presentation Foundation (WPF)
 
The New CSS Layout - dotCSS
The New CSS Layout - dotCSSThe New CSS Layout - dotCSS
The New CSS Layout - dotCSS
 
CSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS LayoutCSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS Layout
 
Layout with flexbox
Layout with flexboxLayout with flexbox
Layout with flexbox
 
The Right Layout Tool for the Job
The Right Layout Tool for the JobThe Right Layout Tool for the Job
The Right Layout Tool for the Job
 
But what about old browsers?
But what about old browsers?But what about old browsers?
But what about old browsers?
 
Understanding Flexbox Layout in React Native.pdf
Understanding Flexbox Layout in React Native.pdfUnderstanding Flexbox Layout in React Native.pdf
Understanding Flexbox Layout in React Native.pdf
 
Grid and Flexbox - Smashing Conf SF
Grid and Flexbox - Smashing Conf SFGrid and Flexbox - Smashing Conf SF
Grid and Flexbox - Smashing Conf SF
 
Render Conf: Start using CSS Grid Layout Today
Render Conf: Start using CSS Grid Layout TodayRender Conf: Start using CSS Grid Layout Today
Render Conf: Start using CSS Grid Layout Today
 

More from Zoe Gillenwater

Show vs. Tell in UX Design (Front in Amsterdam)
Show vs. Tell in UX Design (Front in Amsterdam)Show vs. Tell in UX Design (Front in Amsterdam)
Show vs. Tell in UX Design (Front in Amsterdam)Zoe Gillenwater
 
Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)Zoe Gillenwater
 
Building Responsive Layouts
Building Responsive LayoutsBuilding Responsive Layouts
Building Responsive LayoutsZoe Gillenwater
 
The Future of CSS Layout
The Future of CSS LayoutThe Future of CSS Layout
The Future of CSS LayoutZoe Gillenwater
 
Building Responsive Layouts
Building Responsive LayoutsBuilding Responsive Layouts
Building Responsive LayoutsZoe Gillenwater
 
CSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive DesignCSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive DesignZoe Gillenwater
 
CSS3: Using media queries to improve the web site experience
CSS3: Using media queries to improve the web site experienceCSS3: Using media queries to improve the web site experience
CSS3: Using media queries to improve the web site experienceZoe Gillenwater
 
Designing with CSS3 Effectively & Efficiently
Designing with CSS3 Effectively & EfficientlyDesigning with CSS3 Effectively & Efficiently
Designing with CSS3 Effectively & EfficientlyZoe Gillenwater
 
Effective and Efficient Design with CSS3
Effective and Efficient Design with CSS3Effective and Efficient Design with CSS3
Effective and Efficient Design with CSS3Zoe Gillenwater
 
Highly Maintainable, Efficient, and Optimized CSS
Highly Maintainable, Efficient, and Optimized CSSHighly Maintainable, Efficient, and Optimized CSS
Highly Maintainable, Efficient, and Optimized CSSZoe Gillenwater
 
Designing CSS Layouts for the Flexible Web
Designing CSS Layouts for the Flexible WebDesigning CSS Layouts for the Flexible Web
Designing CSS Layouts for the Flexible WebZoe Gillenwater
 

More from Zoe Gillenwater (14)

Show vs. Tell in UX Design (Front in Amsterdam)
Show vs. Tell in UX Design (Front in Amsterdam)Show vs. Tell in UX Design (Front in Amsterdam)
Show vs. Tell in UX Design (Front in Amsterdam)
 
Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)
 
CSS3 Layout
CSS3 LayoutCSS3 Layout
CSS3 Layout
 
Building Responsive Layouts
Building Responsive LayoutsBuilding Responsive Layouts
Building Responsive Layouts
 
The Future of CSS Layout
The Future of CSS LayoutThe Future of CSS Layout
The Future of CSS Layout
 
Building Responsive Layouts
Building Responsive LayoutsBuilding Responsive Layouts
Building Responsive Layouts
 
CSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive DesignCSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive Design
 
CSS3: Using media queries to improve the web site experience
CSS3: Using media queries to improve the web site experienceCSS3: Using media queries to improve the web site experience
CSS3: Using media queries to improve the web site experience
 
Web Accessibility
Web AccessibilityWeb Accessibility
Web Accessibility
 
Real-world CSS3
Real-world CSS3Real-world CSS3
Real-world CSS3
 
Designing with CSS3 Effectively & Efficiently
Designing with CSS3 Effectively & EfficientlyDesigning with CSS3 Effectively & Efficiently
Designing with CSS3 Effectively & Efficiently
 
Effective and Efficient Design with CSS3
Effective and Efficient Design with CSS3Effective and Efficient Design with CSS3
Effective and Efficient Design with CSS3
 
Highly Maintainable, Efficient, and Optimized CSS
Highly Maintainable, Efficient, and Optimized CSSHighly Maintainable, Efficient, and Optimized CSS
Highly Maintainable, Efficient, and Optimized CSS
 
Designing CSS Layouts for the Flexible Web
Designing CSS Layouts for the Flexible WebDesigning CSS Layouts for the Flexible Web
Designing CSS Layouts for the Flexible Web
 

Recently uploaded

『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书rnrncn29
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书rnrncn29
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxAndrieCagasanAkio
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxMario
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxmibuzondetrabajo
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书zdzoqco
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxNIMMANAGANTI RAMAKRISHNA
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119APNIC
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 

Recently uploaded (11)

『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
 
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptx
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptx
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptx
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
办理多伦多大学毕业证成绩单|购买加拿大UTSG文凭证书
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptx
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 

Using Flexbox Today (Frontend United 2016)

  • 1. Flexbox Zoe Mickley Gillenwater @zomigiFrontend United May 2016 TODAY USING
  • 2. I work for Psst…you can too: www.workingatbooking.com
  • 3. My portfolio site from 2000
  • 4. My portfolio site from 2000
  • 7. Deciding when to use and not use flexbox WHEN 1.
  • 8. What browsers do I need to support? Don’t ask yourself this—it’s irrelevant here (IMO)
  • 9. Flexbox has 94% coverage worldwide We support IE 7-9 at Booking, but still use flexbox as progressive enhancement.
  • 10. Do I want to create a layout in 1 dimension (row OR column) or 2 dimensions? Hat-tip to Rachel Andrew: https://rachelandrew.co.uk/archives/2016/03/30/should-i-use-grid-or-flexbox/
  • 11. Flexbox is not a grid  Not meant for or great at whole page layout  Flex items only care about space in their own row/column  They don’t care about lining up in the other dimension
  • 12. Demo by Rachel Andrew: http://codepen.io/rachelandrew/pen/YqqdXL
  • 13. Flexbox is best for:  UI components  Simple whole page layouts (not grid-based)  Enhancing a complex layout’s alignment, spacing, etc. (not controlling placement)
  • 14.
  • 15. Do I need my content to dictate sizing and placement, or do I need to control these?
  • 16. Content determines boxes’ size and placement (Mega-useful when content is unknown and variable, or readability is a top priority.) Structure determines content’s size and placement (P.S. Flexbox can do this too, if you want. It’s just the reverse that doesn’t work so well.) Flexbox Grids
  • 17. Does flexbox offer me anything I can’t already get from an existing layout method?
  • 18. New things flexbox offers  Content-driven, unit-less sizes  Content-driven, media-query-less layout changes  Mixed-unit layouts  Equal-height columns  Vertical centering and other alignments  Spacing out or stretching items to fill unknown width/height  Combining content wrapping and block wrapping  Pinning items without overlaps  Visual order different than HTML/reading order
  • 19. Components flexbox can enhance and UI/UX problems it can help you solve WHAT 2.
  • 21. How big do I make this thing?
  • 23. Relative units of measurement are your best guess at the ideal, but they’re still a guess.
  • 24. Flexbox gets us closer to the ideal, because it lets us design without units.
  • 25. Example: a responsive form from http://jobs.theguardian.com/
  • 26. My copy of that form Same floats, same percentage widths
  • 27. The trouble with explicit sizing Since the select and button are sized by a percentage, not sized automatically by their content, this can happen: Box too small for its content Box too big for its content
  • 28. Use the flex property instead Tells browser starting size (including content size) and whether item can grow or shrink width: 33.333% flex: auto Fill up remaining space width: 16.666% flex: none Size to content exactly
  • 29. Form fields are a pain in the butt The fields and button don’t all match each other exactly in height
  • 30. Fix alignment with flexbox Turn each field wrapper into flex container so field inside will stretch to match height of line: .flexbox .jobs-form_field-wrapper { display: flex; align-items: stretch; /* default */ width: auto; } Fields misaligned without flexbox Fields match height due to align-items
  • 32. Content-driven sizing on Booking.com Last year’s sidebar searchbox design, with fixed-width select fields
  • 33. Content-driven sizing on Booking.com Non-flexbox Flexbox enhanced
  • 34. Content-driven sizing on Booking.com .sb-dates { display: flex; } .sb-dates__icon { flex: 0 0 23px; } .sb-dates__select-day { flex: 1 0 auto; margin: 0 6px; } .sb-dates__select-month { flex: 1 1 auto; } flex container main axis flex items
  • 35. Defining the flex property flex-grow how much flex item will grow relative to other items if extra space is available (proportion of extra space that it gets) flex-shrink how much item will shrink relative to others if there is not enough space (proportion of overflow that gets shaved off) flex-basis the initial starting size before free space is distributed (any standard width/height value, including auto)
  • 36. Translating the flex property .sb-dates { display: flex; } .sb-dates__icon { flex: 0 0 23px; } .sb-dates__select-day { flex: 1 0 auto; margin: 0 6px; } .sb-dates__select-month { flex: 1 1 auto; } Start out 23px wide, and don’t grow or shrink further Start out sized to your content, then grow with 1 share of any extra space available, but don’t ever shrink Start out sized to your content, then grow with 1 share of extra space, but if there’s an overflow shrink
  • 37. Mixed-unit layout is easier with calc(), but not even it can do: calc(100% - 23px - the width of the day field in Greek)
  • 38. Taking advantage of variable space Task: add a message about low availability of the room price shown: “We have only X left on our site!” How about right here in this lovely big gap?
  • 39. Taking advantage of variable space Problem: the gap is not always big enough to hold a sentence of text
  • 40. Taking advantage of variable space Solution: use flexbox to place text beside price when space allows; otherwise, it can wrap below price
  • 42. Content-driven layout change 2 columns 3 columns
  • 43. RWD content-driven layout change Narrow: 1 column Wide: 2 columns
  • 44. RWD content-driven layout change .article-header { display: flex; flex-flow: row wrap; margin-left: -20px; } .article-header-image { flex: 1 1 320px; padding-left: 20px; } When 320px + 20em can fit together, layout shifts to 1 row/2 columns .article-header-text { flex: 1 1 20em; padding-left: 20px; }
  • 45. Layout change without media query 1. Let the blocks wrap and stack when needed: .article-header { display: flex; flex-direction: row; flex-wrap: wrap; } /* default */
  • 46. Layout change without media query 2. Size the blocks to control their wrapping point: .article-header-image { flex: 1 1 320px; padding-left: 20px; } .article-header-text { flex: 1 1 20em; padding-left: 20px; }
  • 47. In other words… Not enough space for 320px + 20em, so text block wraps. Each block then stretches wider than 320px/20em to fill its line. 320px + 20em is less than 100%, so both can fit together on single line. Each then stretch equally as needed to fill 100% of the space.
  • 48. Stretching to fill unknown width/height flex: 1 1 auto align-content: space-between
  • 49. Improved wrapping in RWD layout With float or text-align With flex or justify-content
  • 50. Flexbox is great for spacing and aligning stuff, especially shifting content in RWD.
  • 51. Demo: full-width nav bar  All links on same line  First link flush left, last link flush right  Equal spaces between all links
  • 52. Trying display:table-cell  All links on same line  First link flush left, last link flush right  Equal spaces between all links
  • 54. Starter centered nav bar, no flexbox .list-nav { margin: 0; padding: 0; list-style: none; text-align: center; } .list-nav-item { display: inline-block; padding: 0 .5em; } from www.smoresday.us
  • 55. Enhanced to full-width with flexbox .list-nav { display: flex; justify-content: space-between; margin: 0; padding: 0; list-style: none; text-align: center; /* fallback */ } .list-nav-item { display: inline-block; /* fallback */ padding: 0 .5em; /* fallback */ }
  • 58. Demo: full-height stacked icons .wrapper .icons .content
  • 59. Demo: full-height stacked icons 1. Turn children .icons and .content into side-by-side, equal-height flex items .wrapper { display: flex; align-items: stretch; /* default */ }
  • 60. Only children become flex items So these 2 children are the flex items This is the flex container These 3 grandchildren aren’t flex items (yet)
  • 61. Demo: full-height stacked icons 2. Turn .icons into flex container with vertically stacked children (the 3 icons): .icons { display: flex; flex-direction: column; /* main axis */ }
  • 62. Demo: full-height stacked icons 3. Equally space the 3 icons along the vertical main axis: .icons { display: flex; flex-direction: column; justify-content: space-between; }
  • 64. Fallback alignment options Top-aligned (float) Centered (table-cell)
  • 65. Flexbox can also enhance visual ordering.
  • 66. Improve the wide layout Wide: too stretched out A more responsive enhancement
  • 67. order integer to specify flow order of flex items 0 0 0default source order 0 0 10 0re-ordered 0 0 0 0-1re-ordered 0 0 210re-ordered 10
  • 68. Use order property to move logo 1. Divide nav bar into order groups: .list-nav-item_home, .list-nav-item_builder { order: 0; /* default, and first here */ } .logo { order: 1; /* second */ } .list-nav-item_party, .list-nav-item_tumblr { order: 2; /* last */ }
  • 69. Use order property to move logo 2. Split extra space on line to center logo: .logo { order: 1; margin-left: auto; margin-right: auto; }
  • 70. A more responsive nav bar
  • 71. Order only works on siblings To move logo to middle of list, it needs to be part of list <div class="logo"><img src="images/logo.png"></div> <ul class="list-nav"> <li class="logo"><img src="images/logo.png"></li> <li class="link-home"><a>home</a></li> <li class="link-builder"><a>s'mores builder</a></li> <li class="link-party"><a>throw a party</a></li> <li class="link-tumblr"><a>tumblr</a></li> </ul>
  • 72. Reorder for good, not evil.
  • 73. Demo: moving a photo on mobile
  • 74. Demo: moving a photo on mobile Desktop: HTML order (no flexbox)Mobile: reordered
  • 75. Use flexbox order in mobile styles .recipe { display: flex; flex-direction: column; } .recipe figure { order: -1; /* before all items with default order: 0 */ } .recipe figure img { width: 100%; }
  • 76. Turn off flexbox in desktop styles @media screen and (min-width:800px) { .recipe { display: block; /* turn off flexbox */ } .recipe figure { float: right; width: 55%; } }
  • 77. Demo: moving a photo on mobile Flexbox enhanced Non-flexbox
  • 78. Reordering on The Guardian 12 3 4 56 flex-direction: row-reverse flex-direction: row-reverse 1 2 3 4 5 6
  • 79. These examples don’t look wrong or broken without flexbox. Flexbox just enhances their sizing and spacing to look better.
  • 80. Step-by-step process for adding flexbox to your UI components effectively HOW 3.
  • 82. Decide whether flexbox is the right tool for the job
  • 83. Decide which versions of flexbox to support standard, 2011/2012, and/or 2009
  • 84. Browser support approaches to choose  Use only the non-prefixed, standard syntax  … plus browser-prefixed versions of standard syntax  … plus -ms- prefixed 2011/2012 syntax  … plus -webkit- prefixed 2009 syntax
  • 85. I recommend you skip the ‘09 syntax  It’s slower to render than current syntax*  Doesn’t support wrapping  Its browsers have small market share  If using flexbox for progressive enhancement, its browsers can get same fallback given to non-supporting browsers * http://updates.html5rocks.com/2013/10/Flexbox-layout-isn-t-slow
  • 86. Let tools add browser variants for you  Autoprefixer: https://github.com/ai/autoprefixer  Sass or LESS mixins can be customized to add just the browser variants you want  https://github.com/mastastealth/sass-flex-mixin  https://gist.github.com/cimmanon/4461470  https://github.com/thoughtbot/bourbon/blob/mast er/app/assets/stylesheets/css3/_flex-box.scss  https://github.com/annebosman/FlexboxLess
  • 87. Add Modernizr as needed with flexbox Flexbox and fallback styles can often co- exist, but sometimes need to isolate them http://zomigi.com/blog/using-modernizr-with-flexbox/
  • 88. Or use @supports .gallery-item { display: inline-block; } @supports (flex-wrap: wrap) { .gallery { display: flex; flex-wrap: wrap; } } https://developer.mozilla.org/en-US/docs/Web/CSS/@supports But IE 10-11, which do support flexbox but don’t support @supports, won’t get these styles
  • 89. Choose and add appropriate starter/fallback layout CSS
  • 90. Things to consider Do I need content blocks to wrap? not table-cell Do I want to prevent blocks from wrapping? floats, inline-block, but table-cell best Do I need content-driven sizes? floats, but table-cell or inline-block best Do I need vertical alignment? inline-block, table-cell Do I need horizontal alignment? floats, table-cell, inline- block only with preset sizes
  • 91. Pick your starter layout CSS  Floats  table-cell  inline-block  Absolute positioning Flexbox will override: Flexbox will not override: Just use whatever you normally would; flexbox plays nicely with most of them.
  • 92. A real example of this process
  • 93. Split left-right layout Task: lay out review score and price, on opposite sides of same line Needs:  content-driven sizing  horizontal alignment  wrapping score price or “sold out”
  • 94. Adding the starter CSS .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; }
  • 96. Decide whether entire component needs to be block or inline-block display:flex or inline-flex
  • 97. Creating the block flex container .iw_mini_details_wrapper { display: flex; } .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; } Flex container sits on a new row below, like a block element
  • 98. Decide flow of flex items
  • 99. Things to consider Lay out horizontally or vertically? flex-direction:row or column Allow boxes to wrap? flex-wrap:wrap, wrap-reverse or nowrap Order different than source? order values; flex-direction: row-reverse or column-reverse
  • 100. Allowing wrapping .iw_mini_details_wrapper { display: flex; flex-wrap: wrap; } .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; } Allows second block to wrap down if needed
  • 101. Decide which items can grow to fill space, shrink to avoid overflow, or must stay at a certain size
  • 102. Tips for setting flex values  Write out full flex values, rather than using single-digit and keyword values  flex: 1 1 0% instead of flex: 1  Hidden default values can lead to mistakes  Avoids IE 10-11 bugs  Think about it backwards: first decide flex-basis, then -shrink, then -grow
  • 103. Tips for setting flex-basis values  Acts like min-width when wrapping on  If flex-wrap off and flex-shrink on, browser can go smaller than flex-basis  Be careful with flex-basis:0 when wrapping  Use flex-basis:auto whenever possible
  • 104. Setting flex-shrink  Always have at least 1 item per line that can shrink (or wrap, or both)
  • 105. Setting flex-grow  Decide what to do with extra space  Fill it up? (flex-grow: 1, 2, etc.)  Leave it? (flex-grow: 0)
  • 106. Setting flex values .iw_mini_details_wrapper { display: flex; flex-wrap: wrap; } .iw_mini_review_score_wrapper { float: left; flex: 0 1 auto; } .iw_mini_price_wrapper { float: right; flex: 0 1 auto; } Size to content, shrink smaller if you have to, don’t grow bigger (default value)
  • 107. Decide how to align flex items
  • 108. Main axis alignment (horizontal when row, vertical when column) Cross axis alignment (vertical when row, horizontal when column) (P.S. Also responsible for equal-height columns) justify-content align-items
  • 109. Controlling alignment .iw_mini_details_wrapper { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; } .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; } Moves first item to left, last item to right
  • 111. Flexbox with float fallback .iw_mini_details_wrapper { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; } .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; } Flexbox properties on container override floating automatically in supporting browsers Floating gets used by old browsers
  • 112. Test
  • 113. Testing your flexbox  Too Flexy bookmarklet for toggling Modernizr flexbox classes: http://chriswrightdesign.github.io/tooflexy/  If reordering, check tabbing and screen reading order to make sure it’s still logical
  • 115. Summing up the process 1. Decide whether to use flexbox and which browser versions of it 2. Choose and add starter layout CSS 3. Choose and add flexbox CSS 1. Block or inline-block container 2. Flow 3. Flex to control sizing 4. Alignment 4. Test and fix bugs
  • 116. Flexbox is not for the future. You can use flexbox today.