SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
Flexbox 
Zoe Mickley Gillenwater @zomigiFrontier Conf
November 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-column
exclusions
shapes
regions
flexbox
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 97% coverage worldwide
We support IE 8 and 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
calc()
When none of those will cut it,
go unit-free with flexbox.
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
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 and stretch
Not possible with floats, inline-block
Not possible with table-cell
Progressive enhancement
Non-flexbox Flexbox enhanced
RWD content-driven layout change
Narrow: 1 column Wide: 2 columns
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 */
Switching between columns and rows
flex-direction: column
or
flex-direction: row
flex-wrap: wrap
(or the shorthand
flex-flow: row wrap)
@media min-width...
flex-direction: row
1 column when narrow Multiple rows when wide
Same, no change needed
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;
}
< 100% = 1 row, 2 columns
> 100% = wrap to 2 rows
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.
full width
full height
equally spaced
Full-width nav bar with equal spacing
Non-flexbox
fallback version
Flexbox version
http://codepen.io/zomigi/pen/vKjbbY/
Full-width nav bar with equal spacing
.menu-list {
display: flex;
justify-content: space-between;
margin: 0;
padding: 0;
list-style: none;
text-align: center; /* fallback */
}
.menu-list-item {
display: inline-block; /* fallback */
padding: 0 .5em; /* fallback */
}
Equally spaces items
across main axis
(width in this case)
Full-height menu with equal spacing
Full-height menu with equal spacing
.menu-list {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.menu-list-item {
height: 100%;
display: flex;
align-items: center;
}
.menu-list {
display: flex;
flex-direction: column;
}
.menu-list-item {
flex: 1 0 auto;
display: flex;
align-items: center;
}
justify-content version flex version
Full-height menu with equal spacing
.menu-list {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.menu-list-item {
height: 100%;
display: flex;
align-items: center;
}
.menu-list {
display: flex;
flex-direction: column;
}
.menu-list-item {
flex: 1 0 auto;
display: flex;
align-items: center;
}
justify-content version flex version
Flexbox can also enhance
visual ordering.
order
integer to specify flow order of flex items
0
 0
 0
default source order 0
 0
1
0
 0
re-ordered 0
 0
0
 0
-1
re-ordered 0
 0
2
1
0
re-ordered 1
0
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
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
http://caniuse.com/#feat=flexbox
I recommend you skip the ‘09 syntax
¨  Slower to render than current syntax*
¨  Doesn’t support wrapping
¨  Small market share
¨  Its browsers can get same fallback you give
to non-supporting browsers
* http://updates.html5rocks.com/2013/10/Flexbox-layout-isn-t-slow
Let tools add browser variants for you
Which variants do you want? Best tool to handle that
All the things! Autoprefixer
Bourbon (Sass)
Only the standard syntax,
with and without prefixes
Compass (Sass)
Some other combination
(such as everything except 2009)
Sass or LESS mixins, such as
https://github.com/mastastealth/
sass-flex-mixin
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
¨  Avoid 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 decide flex–shrink and flex-grow
Tips for setting flex-basis values
¨  Acts like min-width when wrapping on
¨  Acts like max-width when flex-shrink
on and flex-grow off
¨  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)
¨  Yes, always
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
justify-content • align-items
align-self • align-content
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
¨  If using Modernizr: 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
Fixing browsers’ flexbox bugs
¨  Read explanations and workarounds by
Philip Walton:
https://github.com/philipwalton/flexbugs
¨  Let PostCSS fix some for you:
https://github.com/luisrudge/postcss-flexbugs-fixes
Summing up the process
1.  Decide which browser versions of flexbox to use
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
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 (Breaking Development 2013)
Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)
Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)Stephen Hay
 
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: 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
 
The Future of CSS Layout
The Future of CSS LayoutThe Future of CSS Layout
The Future of CSS LayoutZoe Gillenwater
 
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
 

Was ist angesagt? (12)

Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)Enhancing Responsiveness with Flexbox (RWD Summit)
Enhancing Responsiveness with Flexbox (RWD Summit)
 
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 (Breaking Development 2013)
Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)
Flexbox: One Giant Leap for Web Layout (Breaking Development 2013)
 
CSS3 Layout
CSS3 LayoutCSS3 Layout
CSS3 Layout
 
Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)Responsive Flexbox Inspiration (Responsive Day Out)
Responsive Flexbox Inspiration (Responsive Day Out)
 
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
 
Understanding flexbox
Understanding flexboxUnderstanding flexbox
Understanding flexbox
 
Layout with flexbox
Layout with flexboxLayout with flexbox
Layout with flexbox
 
The Future of CSS Layout
The Future of CSS LayoutThe Future of CSS Layout
The Future of CSS 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)
 

Ähnlich wie Using Flexbox Today (Frontier Conf 2016)

Flexbox Will Shock You!
Flexbox Will Shock You!Flexbox Will Shock You!
Flexbox Will Shock You!Scott Vandehey
 
Putting Flexbox into Practice
Putting Flexbox into PracticePutting Flexbox into Practice
Putting Flexbox into PracticeZoe Gillenwater
 
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
 
Enhancing Responsiveness With Flexbox (CSS Day)
Enhancing Responsiveness With Flexbox (CSS Day)Enhancing Responsiveness With Flexbox (CSS Day)
Enhancing Responsiveness With Flexbox (CSS Day)Zoe Gillenwater
 
Show & tell - Flex in flux
Show & tell - Flex in fluxShow & tell - Flex in flux
Show & tell - Flex in fluxDan Dineen
 
The New CSS Layout - dotCSS
The New CSS Layout - dotCSSThe New CSS Layout - dotCSS
The New CSS Layout - dotCSSRachel Andrew
 
CSS Flexbox (flexible box layout)
CSS Flexbox (flexible box layout)CSS Flexbox (flexible box layout)
CSS Flexbox (flexible box layout)Woodridge Software
 
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
 
Flexbox every developers dream
Flexbox every developers dreamFlexbox every developers dream
Flexbox every developers dream2019gracesmith
 
CSS3 Flexbox & Responsive Design
CSS3 Flexbox & Responsive DesignCSS3 Flexbox & Responsive Design
CSS3 Flexbox & Responsive DesignArash Milani
 
The New CSS Layout - Dutch PHP Conference
The New CSS Layout - Dutch PHP ConferenceThe New CSS Layout - Dutch PHP Conference
The New CSS Layout - Dutch PHP ConferenceRachel 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
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSSBoris Paillard
 
Flexbox and Grid Layout
Flexbox and Grid LayoutFlexbox and Grid Layout
Flexbox and Grid LayoutRachel Andrew
 
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
 
CSS3 Flex Layout
CSS3 Flex LayoutCSS3 Flex Layout
CSS3 Flex LayoutNeha Sharma
 

Ähnlich wie Using Flexbox Today (Frontier Conf 2016) (20)

Flexbox Will Shock You!
Flexbox Will Shock You!Flexbox Will Shock You!
Flexbox Will Shock You!
 
Putting Flexbox into Practice
Putting Flexbox into PracticePutting Flexbox into Practice
Putting Flexbox into Practice
 
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?
 
Enhancing Responsiveness With Flexbox (CSS Day)
Enhancing Responsiveness With Flexbox (CSS Day)Enhancing Responsiveness With Flexbox (CSS Day)
Enhancing Responsiveness With Flexbox (CSS Day)
 
Show & tell - Flex in flux
Show & tell - Flex in fluxShow & tell - Flex in flux
Show & tell - Flex in flux
 
The New CSS Layout - dotCSS
The New CSS Layout - dotCSSThe New CSS Layout - dotCSS
The New CSS Layout - dotCSS
 
CSS Flexbox (flexible box layout)
CSS Flexbox (flexible box layout)CSS Flexbox (flexible box layout)
CSS Flexbox (flexible box layout)
 
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
 
Flexbox every developers dream
Flexbox every developers dreamFlexbox every developers dream
Flexbox every developers dream
 
CSS3 Flexbox & Responsive Design
CSS3 Flexbox & Responsive DesignCSS3 Flexbox & Responsive Design
CSS3 Flexbox & Responsive Design
 
The New CSS Layout - Dutch PHP Conference
The New CSS Layout - Dutch PHP ConferenceThe New CSS Layout - Dutch PHP Conference
The New CSS Layout - Dutch PHP Conference
 
flexbox report
flexbox reportflexbox report
flexbox report
 
Flex Web Development.pdf
Flex Web Development.pdfFlex Web Development.pdf
Flex Web Development.pdf
 
CSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS LayoutCSS Conf Budapest - New CSS Layout
CSS Conf Budapest - New CSS Layout
 
Building Layouts with CSS
Building Layouts with CSSBuilding Layouts with CSS
Building Layouts with CSS
 
Flexbox and Grid Layout
Flexbox and Grid LayoutFlexbox and Grid Layout
Flexbox and Grid Layout
 
World of Flexbox
World of Flexbox World of Flexbox
World of Flexbox
 
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)
 
CSS3 Flex Layout
CSS3 Flex LayoutCSS3 Flex Layout
CSS3 Flex Layout
 

Mehr von 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
 
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
 
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
 
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
 

Mehr von Zoe Gillenwater (13)

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)
 
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)
 
Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)Just One (CSS Dev Conference keynote)
Just One (CSS Dev Conference keynote)
 
Building Responsive Layouts
Building Responsive LayoutsBuilding Responsive Layouts
Building Responsive Layouts
 
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
 

Kürzlich hochgeladen

Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Roomdivyansh0kumar0
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...APNIC
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night StandHot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Standkumarajju5765
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsstephieert
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Servicegwenoracqe6
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...Diya Sharma
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Sheetaleventcompany
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Roomdivyansh0kumar0
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Callshivangimorya083
 

Kürzlich hochgeladen (20)

Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night StandHot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girls
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 

Using Flexbox Today (Frontier Conf 2016)

  • 1. Flexbox Zoe Mickley Gillenwater @zomigiFrontier Conf November 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 97% coverage worldwide We support IE 8 and 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. When none of those will cut it, go unit-free with flexbox.
  • 24. Content-driven sizing on Booking.com Last year’s sidebar searchbox design, with fixed-width select fields
  • 25. Content-driven sizing on Booking.com Non-flexbox Flexbox enhanced
  • 26. 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
  • 27. 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
  • 28. Mixed-unit layout is easier with calc(), but not even it can do: calc(100% - 23px - the width of the day field in Greek)
  • 29. 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?
  • 30. Taking advantage of variable space Problem: the gap is not always big enough to hold a sentence of text
  • 31. Taking advantage of variable space Solution: use flexbox to place text beside price when space allows; otherwise, it can wrap below price and stretch Not possible with floats, inline-block Not possible with table-cell
  • 33. RWD content-driven layout change Narrow: 1 column Wide: 2 columns
  • 34. 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 */
  • 35. Switching between columns and rows flex-direction: column or flex-direction: row flex-wrap: wrap (or the shorthand flex-flow: row wrap) @media min-width... flex-direction: row 1 column when narrow Multiple rows when wide Same, no change needed
  • 36. 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; } < 100% = 1 row, 2 columns > 100% = wrap to 2 rows
  • 37. Stretching to fill unknown width/height flex: 1 1 auto align-content: space-between
  • 38. Improved wrapping in RWD layout With float or text-align With flex or justify-content
  • 39. Flexbox is great for spacing and aligning stuff, especially shifting content in RWD.
  • 41. Full-width nav bar with equal spacing Non-flexbox fallback version Flexbox version http://codepen.io/zomigi/pen/vKjbbY/
  • 42. Full-width nav bar with equal spacing .menu-list { display: flex; justify-content: space-between; margin: 0; padding: 0; list-style: none; text-align: center; /* fallback */ } .menu-list-item { display: inline-block; /* fallback */ padding: 0 .5em; /* fallback */ } Equally spaces items across main axis (width in this case)
  • 43. Full-height menu with equal spacing
  • 44. Full-height menu with equal spacing .menu-list { display: flex; flex-direction: column; justify-content: space-between; } .menu-list-item { height: 100%; display: flex; align-items: center; } .menu-list { display: flex; flex-direction: column; } .menu-list-item { flex: 1 0 auto; display: flex; align-items: center; } justify-content version flex version
  • 45. Full-height menu with equal spacing .menu-list { display: flex; flex-direction: column; justify-content: space-between; } .menu-list-item { height: 100%; display: flex; align-items: center; } .menu-list { display: flex; flex-direction: column; } .menu-list-item { flex: 1 0 auto; display: flex; align-items: center; } justify-content version flex version
  • 46. Flexbox can also enhance visual ordering.
  • 47. order integer to specify flow order of flex items 0 0 0 default source order 0 0 1 0 0 re-ordered 0 0 0 0 -1 re-ordered 0 0 2 1 0 re-ordered 1 0
  • 48. Reorder for good, not evil.
  • 49. Demo: moving a photo on mobile
  • 50. Demo: moving a photo on mobile Desktop: HTML order (no flexbox)Mobile: reordered
  • 51. 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%; }
  • 52. Turn off flexbox in desktop styles @media screen and (min-width:800px) { .recipe { display: block; /* turn off flexbox */ } .recipe figure { float: right; width: 55%; } }
  • 53. Demo: moving a photo on mobile Flexbox enhanced Non-flexbox
  • 54. These examples don’t look wrong or broken without flexbox. Flexbox just enhances their sizing and spacing to look better.
  • 55. Step-by-step process for adding flexbox to your UI components effectively HOW 3.
  • 57. Decide whether flexbox is the right tool for the job
  • 58. Decide which versions of flexbox to support standard, 2011/2012, and/or 2009 http://caniuse.com/#feat=flexbox
  • 59. I recommend you skip the ‘09 syntax ¨  Slower to render than current syntax* ¨  Doesn’t support wrapping ¨  Small market share ¨  Its browsers can get same fallback you give to non-supporting browsers * http://updates.html5rocks.com/2013/10/Flexbox-layout-isn-t-slow
  • 60. Let tools add browser variants for you Which variants do you want? Best tool to handle that All the things! Autoprefixer Bourbon (Sass) Only the standard syntax, with and without prefixes Compass (Sass) Some other combination (such as everything except 2009) Sass or LESS mixins, such as https://github.com/mastastealth/ sass-flex-mixin
  • 61. 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/
  • 62. 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
  • 63. Choose and add appropriate starter/fallback layout CSS
  • 64. 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
  • 65. 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.
  • 66. A real example of this process
  • 67. 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”
  • 68. Adding the starter CSS .iw_mini_review_score_wrapper { float: left; } .iw_mini_price_wrapper { float: right; }
  • 70. Decide whether entire component needs to be block or inline-block display:flex or inline-flex
  • 71. 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
  • 72. Decide flow of flex items
  • 73. 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
  • 74. 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
  • 75. Decide which items can grow to fill space, shrink to avoid overflow, or must stay at a certain size
  • 76. Tips for setting flex values ¨  Avoid 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 decide flex–shrink and flex-grow
  • 77. Tips for setting flex-basis values ¨  Acts like min-width when wrapping on ¨  Acts like max-width when flex-shrink on and flex-grow off ¨  Be careful with flex-basis:0 when wrapping ¨  Use flex-basis:auto whenever possible
  • 78. Setting flex-shrink ¨  Always have at least 1 item per line that can shrink (or wrap, or both) ¨  Yes, always
  • 79. Setting flex-grow ¨  Decide what to do with extra space ¤  Fill it up? (flex-grow: 1, 2, etc.) ¤  Leave it? (flex-grow: 0)
  • 80. 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)
  • 81. Decide how to align flex items justify-content • align-items align-self • align-content
  • 82. 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
  • 84. 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
  • 85. Test
  • 86. Testing your flexbox ¨  If using Modernizr: 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
  • 88. Fixing browsers’ flexbox bugs ¨  Read explanations and workarounds by Philip Walton: https://github.com/philipwalton/flexbugs ¨  Let PostCSS fix some for you: https://github.com/luisrudge/postcss-flexbugs-fixes
  • 89. Summing up the process 1.  Decide which browser versions of flexbox to use 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
  • 90. Flexbox is not for the future. You can use flexbox today.