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
Houdini Breakout Session
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Surma
November 12, 2016
Technology
680
4
Share
Houdini Breakout Session
Chrome Dev Summit 2016
Surma
November 12, 2016
More Decks by Surma
See All by Surma
Know thy buzzwords: HTTP/2
surma
1
570
Houdini – Demystifying CSS
surma
3
340
Progressive Web Apps – Mobile has natively come to the Web
surma
5
310
The Glorious Era of HTTP/2
surma
1
110
Instant Loading
surma
4
1.3k
HTTP/2 101
surma
5
520
What if there isn’t?
surma
0
110
What if there isn’t?
surma
2
210
The Web is a Contender
surma
0
160
Other Decks in Technology
See All in Technology
AndroidアプリとCopilot Studioの統合
nakasho
0
110
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
1.2k
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
4
1.8k
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
1
210
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
120
レビューしきれない?それは「全て人力でのレビュー」だからではないでしょうか
amixedcolor
0
330
20260428_Product Management Summit_Loglass_JoeHirose
loglassjoe
2
1.9k
Practical TypeProf: Lessons from Analyzing Optcarrot
mame
0
370
AzureのIaC管理からログ調査まで、随所に役立つSkillsとCustom-Instructions / Boosting IaC and Log Analysis with Skills
aeonpeople
0
240
Choose your own adventure in agentic design patterns
glaforge
0
140
みんなの「データ活用」を支えるストレージ担当から持ち込むAWS活用/コミュニティー設計TIPS 10選~「作れる」より、「続けられる」設計へ~
yoshiki0705
0
250
「責任あるAIエージェント」こそ自社で開発しよう!
minorun365
9
2.1k
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
370
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
260
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
220
Music & Morning Musume
bryan
47
7.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
GitHub's CSS Performance
jonrohan
1032
470k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
520
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Transcript
Houdini
Houdini
Typed Object Model
Typed Object Model $('#element').styleMap .set('opacity', new CSSNumberValue(0.5)); $('#element').styleMap .set('height', new
CSSSimpleLength(50, 'px'));
Typed Object Model $('#element').styleMap .set('height', new CSSSimpleLength(50, 'px')); $('#element').styleMap .get('height').value;
// 50 $('#element').styleMap .get('height').type; // ‘px’
Typed Object Model $('#element').styleMap .set('height', new CSSCalcLength('50vh - 20px')); $('#element').styleMap.get('height').vh;
// 50 $('#element').styleMap.get('height').px; // -20
Typed Object Model $('#element').styleMap .set("height", new CSSCalcLength({ vh: 50, px:
-20, }));
Typed Object Model const h = new CSSSimpleLength(50, 'vh') .subtract(new
CSSSimpleLength(20, ‘px')); $('#element').styleMap.set('height', h);
Typed Object Model const h = new CSSSimpleLength(50, 'vh') .subtract(new
CSSSimpleLength(20, ‘px')); $('#element').styleMap.set('height', h); // h == calc(50vh - 20px);
None
Houdini
Houdini X AnimationWorklet
Animation Worklet
None
None
bit.ly/best-effort-scroll position: static;
bit.ly/best-effort-scroll position: static; position: fixed; + JS transform
Animation Worklet <style> :root { animator-root: parallax; } .bg {
animator: parallax; } </style> <div class='bg' style='--parallax-rate: 0.2'></div> <div class='bg' style='--parallax-rate: 0.5'></div> Experimental
Animation Worklet registerAnimator('parallax', class ParallaxAnimator { static inputProperties = ['transform',
'--parallax-rate']; static outputProperties = ['transform']; static rootInputScroll = true; animate(root, children) { const scrollTop = root.scrollOffsets.top; children.forEach(background => parallaxMath(elem, background.styleMap.get('--parallax-rate'))); } }); Experimental
None
Houdini
Paint Worklet
Paint Worklet <div id="myElement"></div> <style> #myElement { --image: url('#someUrlWhichIsLoading'); background-image:
paint(image-with-placeholder); } </style> Experimental
Paint Worklet <script> document.registerProperty({ name: '--image', syntax: '<image>' }); window.paintWorklet.import('paintworklet.js');
</script> Experimental
Paint Worklet registerPaint('image-with-placeholder', class { static get inputProperties() { return
['--image']; } paint(ctx, geom, properties) { // ... } }); Experimental
Paint Worklet paint(ctx, geom, properties) { const img = properties.get('--image');
switch (img.state) { case 'ready': ctx.drawImage(img, 0, 0, geom.width, geom.height); break; case 'pending': drawMountains(ctx); break; case 'invalid': default: drawSadFace(ctx); } } Experimental
None
bit.ly/houdini-updates
None