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
Responsive Web Applications
Search
snookca
November 30, 2017
Technology
1.7k
0
Share
Responsive Web Applications
As presented at dotCSS in Paris, France
snookca
November 30, 2017
More Decks by snookca
See All by snookca
Responsive Web Applications
snookca
4
1k
Responsive Web Applications
snookca
0
200
Responsive Web Applications with Container Queries
snookca
3
720
Responsive Web Applications
snookca
0
130
The Future is In Pieces
snookca
1
190
Becoming a Deep Generalist
snookca
1
530
Your CSS is a Mess from ShropGeek's Revolution Conf
snookca
4
210
Your CSS is a Mess from SmartWeb
snookca
0
260
How to Write a Book
snookca
4
440
Other Decks in Technology
See All in Technology
Embeddings : Symfony AI en pratique
lyrixx
0
460
OpenClaw初心者向けセミナー / OpenClaw Beginner Seminar
cmhiranofumio
0
310
Goビルドを理解し、 CI/CDの高速化に挑む
satoshin
0
120
AIを活用したアクセシビリティ改善フロー
degudegu2510
1
140
JSTQB Expert Levelシラバス「テストマネジメント」日本語版のご紹介
ymty
0
120
AIにより大幅に強化された AWS Transform Customを触ってみる
0air
0
310
Babylon.js を使って試した色々な内容 / Various things I tried using Babylon.js / Babylon.js 勉強会 vol.5
you
PRO
0
230
Microsoft Fabricで考える非構造データのAI活用
ryomaru0825
0
650
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
1
600
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
第26回FA設備技術勉強会 - Claude/Claude_codeでデータ分析 -
happysamurai294
0
380
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
140
The Limits of Empathy - UXLibs8
cassininazir
1
280
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Google's AI Overviews - The New Search
badams
0
960
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.7k
The browser strikes back
jonoalderson
0
880
Paper Plane (Part 1)
katiecoart
PRO
0
6.4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
460
How to make the Groovebox
asonas
2
2.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
Responsive Web Applications with Container Queries
Why We Need Container Queries
None
None
None
None
None
None
None
• No orders • One order • Less than one
page of orders • Multiple pages of orders • Has Info Notifications • Tab overflow • Has Warning Notifications • Has limited access to features • Has different apps installed
And now consider all of those things for multiple viewports
None
None
With media queries, you have to know the interplay of
all objects in all scenarios
Implementing Container Queries
With container queries, you only have to know the interplay
within a single object
No container queries!
Declare in: CSS, HTML, or JavaScript
https://github.com/ResponsiveImagesCG/cq-demos .element:media( min-width:500px ) {} https://github.com/tysonmatanich/elementQuery .element[min-width~="500px"] { background-color: #eee;
}
http://elementqueries.com/ @element ".element" and (min-width: 500px) { .element {
background: gold; } }
https://github.com/tysonmatanich/elementQuery .element[min-width~="400px"] { }
To parse CSS, either need to be on same domain
or set up CORS
https://github.com/Snugug/eq.js data-eq-pts="small: 400, medium: 600, large: 900"
At HTML level, requires consistency of implementation across app
We chose JavaScript and built our own
elements = [ { "module": ".flex--2x1", "className":"responsiveClass", "minWidth": 768, "maxWidth":
1024 } ]
Why is this so f**kin’ hard?
.element:media( min-width:500px ) { width: 400px; }
None
.element { width: 50%; } .element:media( min-width:500px ) { color:
blue; }
The Future
ResizeObserver
Houdini
What’s Houdini: • Layout API • Custom Paint API •
Parser API • Properties and Values • Animation Workout • Typed OM • Font Metrics API
None
In Chrome: • Layout API • Custom Paint API •
Parser API • Properties and Values • Animation Worklet • Typed OM • Font Metrics API
None
<div class="two-columns"> <div class="col1"> … </div> <div class="col2"> … </div>
</div>
.two-columns { display: flex; flex-wrap: wrap; } .col1, .col2 {
flex-grow: 1; } .col1 { flex-basis: 66%; min-width: 360px; } .col2 { flex-basis: 33%; }
None
<div class="media-body"> <div class="media-content"> </div> <div class="media-actions"> <a href="…"> Button
</a> </div> </div>
.media-body { display: flex; flex-wrap: wrap; }
.media-content { flex-grow: 1; flex-basis: 400px; margin-right: 20px; }
.media-actions { align-self: center; margin: 20px 0; }
None
<div class="box"> <div class="box-image"> <img src="…" height="150" > </div> <div
class="box-content">...</div> </div>
.box { display: flex; flex-wrap: wrap; }
.box-image { flex-grow: 1; flex-shrink: 0; flex-basis: 150px; } .box-image
> img { width: 100%; object-fit: cover; }
.box-content { margin: 10px; flex-shrink: 1; flex-grow: 1; flex-basis: 60%;
}
<div class="items"> <div class="box">…</div> <div class="box">…</div> <div class="box">…</div> </div>
.items { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); }
Thank you. http:/ /snook.ca/ @snookca