Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Let's Learn CSS Grid - FEDC
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tim Smith
April 27, 2018
Design
180
0
Share
Let's Learn CSS Grid - FEDC
Tim Smith
April 27, 2018
More Decks by Tim Smith
See All by Tim Smith
Let’s Learn CSS Grid - EE Conf
ttimsmith
1
230
Let's Learn CSS Grid - BeerCityCode
ttimsmith
2
210
Let's Learn CSS Grid
ttimsmith
1
340
Become a Better Designer with Side Projects - Blend Conf
ttimsmith
6
670
Become a Better Designer with Side Projects
ttimsmith
5
870
Work to Live, Don't Live to Work
ttimsmith
0
370
Other Decks in Design
See All in Design
Rethinking IFUs: What Board Game Rulebooks Contribute to IFU Usability
deadlinepoet
0
290
保育現場にAIを 〜人と技術に橋を架けるデザインで考えてきたこと〜 uiuxcamp2026-hoiku-ai-design
hiro93n
1
270
Mandalyn_DT5001_FinalAssignment.pdf
lynteo
0
230
公開スライド)熊本市様-電子申請中級編
garyuten
0
1.3k
エンジニアがAI活用してスライドデザインできる世界が来たよ!
kaikou
1
160
AI時代に必要な アイデアの形
uxman
0
190
社長の宿題への回答 「新卒×AI」が生み出す価値
saki822
2
150
The Art of Caring
klemens
0
340
Tendências de UX Research 2026
videlvequio
0
120
Design dependencies
teba_eleven
0
120
つくり方を変えていく | change-how-we-build
mottox2
2
1.3k
速く作れるかではなく、速く学べるか ― 学習ループを回すパイロットの途中報告
nagata03
0
450
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
18k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Code Review Best Practice
trishagee
74
20k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Building Applications with DynamoDB
mza
96
7.1k
Crafting Experiences
bethany
1
160
Side Projects
sachag
455
43k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
140
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
410
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
Transcript
LET’S LEARN CSSGRID
Hi there! I’m Tim Smith
None
YouTube Channel youtube.com/smithtimmytim
Thank You
Agenda
Agenda 1. Problems we’ve had with layout
Agenda 1. Problems we’ve had with layout 2. What is
CSS Grid and how does it solve these problems?
Agenda 1. Problems we’ve had with layout 2. What is
CSS Grid and how does it solve these problems? 3. Why do I need to learn this?
Agenda 1. Problems we’ve had with layout 2. What is
CSS Grid and how does it solve these problems? 3. Why do I need to learn this? 4. Resources
A History of Layout Issues
Floats
Floats Suck
CSS Frameworks
CSS Frameworks <div class="small-12 medium-6 large-8"></div>
Separation of Concerns
Floats Aren’t Bad
They’re Not for Complex Layouts
Why?
None
Flexbox
Flexbox is Flexible
Main Column and Sidebar Layout <aside>Aside</aside> <main>Main Content</main>
Main Column and Sidebar Layout <aside>Aside</aside> <main>Main Content</main> And our
CSS.
Main Column and Sidebar Layout <aside>Aside</aside> <main>Main Content</main> And our
CSS. body { display: flex; } aside { background-color: #333; flex: 1 1 30%; } main { background-color: #333; flex: 1 1 70%; }
The two columns are completely flexible.
Flexbox Card Layout <ul class="boxes"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li>
</ul>
Flexbox Card Layout <ul class="boxes"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li>
</ul> And now our CSS.
Flexbox Card Layout <ul class="boxes"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li>
</ul> And now our CSS. .boxes { display: flex; flex-wrap: wrap; } .boxes li { flex: 1 1 30%; background: #333; margin: 0 .5rem 1rem; }
This is not what I want!
Math
You Need Stuff Like This li:nth-child(2n+2) { margin-right: 0; }
You Need Stuff Like This li:nth-child(2n+2) { margin-right: 0; }
Oh wait! What about bigger screens?
You Need Stuff Like This li:nth-child(2n+2) { margin-right: 0; }
Oh wait! What about bigger screens? @media screen and (min-width: 40em) { li:nth-child(2n+2) { margin-right: 1.5rem; } li:nth-child(3n+3) { margin-right: 0; } }
None
Flexbox Is Awesome
Vertical Align!
We’re Using Flexbox Wrong
CSS Grid to the Rescue
CSS Grid is Not a Float Killer
CSS Grid is Not a Flexbox Killer
You Don’t Need a Framework
CSS Grid Is the Framework
CSS Grid is Friendly
Great Use of Flexbox
Great Use of Floats
CSS Grid What Is It Good For?
“My super simple theory at the moment — if you
are putting widths on flex items, you are doing it wrong. Use Grid. (Let’s see if that holds.) —Jen Simmons
CSS Grid Basics
display: grid;
grid-template-columns
fr
grid-gap
Let’s See It in Action
Holy Grail Layout
Set Up <header>Header</header> <aside>Aside</aside> <main>Main Content</main> <footer>Footer</footer>
Set Up <header>Header</header> <aside>Aside</aside> <main>Main Content</main> <footer>Footer</footer> body { display:
grid; grid-template-columns: 2fr 3fr; grid-gap: 2rem; }
Let’s Place Our Items header { grid-column: 1 / span
2; } aside { grid-column-end: span 1; grid-row: 2; } main { grid-column: 2 / span 1; grid-row: 2; } footer { grid-column: 1 / span 2; grid-row: 3; }
Grid Lines
Rewrite with Grid Areas body { display: grid; grid-template-columns: 2fr
3fr; grid-gap: 2rem; grid-template-areas: "header header" "aside main" "footer footer"; } header { grid-area: header; } aside { grid-area: aside; } main { grid-area: main; } footer { grid-area: footer; }
None
What If? body { grid-template-areas: ". header" "aside main" ".
footer"; }
None
None
Easily Responsive body { display: grid; grid-gap: 2rem; grid-template-areas: "header"
"main" "aside" "footer"; } @media and screen (min-width: 40em) { body { grid-template-columns: 2fr 3fr; grid-template-areas: "header header" "aside main" "footer footer"; } }
None
Card Layout
Setup <ul class="boxes"> <li>Box 1</li> <li>Box 2</li> <li>Box 3</li> <li>Box
4</li> <li>Box 5</li> <li>Box 6</li> </ul>
Setup <ul class="boxes"> <li>Box 1</li> <li>Box 2</li> <li>Box 3</li> <li>Box
4</li> <li>Box 5</li> <li>Box 6</li> </ul> Now let’s get these puppies on a Grid.
Setup <ul class="boxes"> <li>Box 1</li> <li>Box 2</li> <li>Box 3</li> <li>Box
4</li> <li>Box 5</li> <li>Box 6</li> </ul> Now let’s get these puppies on a Grid. .boxes { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); grid-gap: 1rem; }
Whoa! Hold Up.
Let’s Dissect This .boxes { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px,
1fr)); grid-gap: 1rem; }
None
Mind. Blown.
Special Portfolio-Inspired Layout
Setup <ul class="portfolio"> <li>Item One</li> <li>Item Two</li> <li>Item Three</li> <li>Item
Four</li> <li>Item Five</li> </ul>
Setup <ul class="portfolio"> <li>Item One</li> <li>Item Two</li> <li>Item Three</li> <li>Item
Four</li> <li>Item Five</li> </ul> And setup our Grid container.
Setup <ul class="portfolio"> <li>Item One</li> <li>Item Two</li> <li>Item Three</li> <li>Item
Four</li> <li>Item Five</li> </ul> And setup our Grid container. .portfolio { display: grid; grid-auto-rows: minmax(100px, auto); grid-gap: 2px; grid-template-columns: repeat(6, 1fr); }
grid-auto-rows
Let’s Place Our Items .portfolio li:nth-child(1) { grid-column: 1 /
-1; } .portfolio li:nth-child(2) { grid-column: 1 / span 2; grid-row-end: span 3; } .portfolio li:nth-child(3) { grid-column: 3 / span 4; grid-row-end: span 2; } .portfolio li:nth-child(4), .portfolio li:nth-child(5) { grid-column: span 2; }
None
Holy Jack City, Batman
The Power of CSS Grid
None
The Time is Now
Simpler Code
New Amazing Layouts
I Delayed Learning Flexbox and Regret It
Feature Queries
Like This @supports (display:grid) { /* Grid CSS in here
*/ } @supports not (display:grid) { /* Fallback CSS here */ }
None
Browsers Ignore CSS They Don’t Understand
What Did We Learn?
1 CSS Grid Is Awesome
2 CSS Grid Is Friendly
3 Use CSS Grid Today
Only the Beginning
Rachel Andrew gridbyexample.com
Jen Simmons labs.jensimmons.com
Mozilla Developer Network developer.mozilla.org
Read The Spec w3.org/TR/css-grid-1/
Thanks! ttimsmith.com · @smithtimmytim