Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Utility-first な CSS-in-JS 〜Tailwind CSS と Chakr...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Mitsuki Ogasahara
August 25, 2021
Technology
1.6k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Utility-first な CSS-in-JS 〜Tailwind CSS と Chakra UI を添えて〜 / Utility-First CSS-in-JS
Mitsuki Ogasahara
August 25, 2021
Transcript
28 slides
6UJMJUZ fi STUͳ$44JO+4 ʙ5BJMXJOE$44ͱ$IBLSB6*Λఴ͑ͯʙ +91SFTT5FDI5BML
ࣗݾհ w খּݪΈ͖ͭ!ZBNJU[LZ w औక$%0 w ೝఆεΫϥϜϚελʔ w ͖ͳͷ w
1ZUIPOɺ3FBDUɺΨύΦ
ࣗݾհ झຯͰαʔόʔϨεͳ$.4Λ։ൃ ˞$IBLSB6*Λར༻
ࣗݾհ ˞͍ͣΕDTTJOKTΛར༻͠ɺεϐʔσΟʔʹ։ൃ +9ͷ3FBDUϓϩδΣΫτ
ຊͷςʔϚ 6UJMJUZ fi STUͳ$44JO+4 ͷັྗΛଟ͘ͷਓʹͬͯ΄͍͠ʂ
ຊͷςʔϚ 6UJMJUZ fi STUͳ$44JO+4
3FBDUʷελΠϧγʔτ 3FBDUͷΞϓϦέʔγϣϯɺ Ͳ͏ͬͯελΠϧద༻͢Δ͔ʁ
ύλʔϯ1: ී௨ͷ CSS Λॻ͘ 3FBDU $44
ૉͷ CSS ͷ DMBTT໊άϩʔόϧͳఆٛ ˠ໊લিಥͷةݥੑ هࣄͷUJUMF ϥϯΩϯάͷUJUMF ʺ ͔ͤͬ͘ίϯϙʔωϯτࢤͰΘ͚ͯʜ
༨ஊɿBEM ͳͲͷΞϓϩʔν άϩʔόϧͳ໊લۭؒʹ໋໊نଇΛ࣋ͪࠐΉ BSUJDMF@@UJUMF SBOLJOH@@UJUMF ʺ
ύλʔϯCSS Modules $44 3FBDU DTTΛίϯϙʔωϯτ͝ͱʹ3FBDU͔ΒJNQPSU
CSS Modulesͷग़ྗ݁ՌͷΠϝʔδ $44 )5.- DMBTT໊ࣗಈͰϋογϡԽ͞Εɺিಥ͠ͳ͍ <div> <div class="css-16qf5wg">هࣄͷλΠτϧ</div> </div>
ɾྑ͘ѱ͘$44 ɾελΠϧఆٛDMBTT໊͕ܕ҆શͰͳ͍ ɾ+454ͷมΛຒΊࠐΊͳ͍ $443FBDU5ZQF4DSJQUͰͳ͍ʂ CSS Modules ํࣜͷ ˞ճආࡦҰ෦͋Δ ˠ$44Λ+454্Ͱఆ͍ٛͨ͠
ύλʔϯ3: CSS-in-JS • 1ϑΝΠϧͰఆٛՄೳ • styled.λά໊Ͱఆٛ • มຒΊࠐΈՄೳ // Article.tsx
import styled from '@emotion/styled' import theme from '...' const Title = styled.div({ fontWeight: 'bold', fontSize: 14, color: theme.colors.primary, }) export const Article: React.FC = () => ( <div> <Title>هࣄͷλΠτϧ</Title> {/* ... */} </div> )
$44JO+4ͷग़ྗ݁ՌͷΠϝʔδ $44 )5.- $44.PEVMFTಉ༷ɺDMBTT໊ࣗಈͰϋογϡԽ มຒΊࠐ·ΕΔ <style> .css-16qf5wg { font-weight: bold;
font-size: 14px; color: #123456; } </style> <div> <div class="css-16qf5wg">هࣄͷλΠτϧ</div> </div>
̍ɽάϩʔόϧͳ$44Λॻ͘ ̎ɽ$44.PEVMFTͰJNQPSU͢Δ ̏ɽ$44JO+4 3FBDUΞϓϦέʔγϣϯΛελΠϧ͢Δํ๏ ̏ͭհ ͜͜·Ͱͷ·ͱΊ
ຊͷςʔϚ 6UJMJUZ fi STUͳ$44JO+4
CSS ͋Δ͋Δ )5.- $44 <div class="title-wrapper"> <div class="title">هࣄͷλΠτϧ</div> <div class="timestamp">12:23</div>
</div> .title { font-weight: bold; font-size: 14px; } .title-wrapper { display: flex; } ͪΐͬͱσβΠϯௐ͢ΔͨΊͷXSBQQFSരʂ
CSS ͷ ̍ɽDMBTT໊͕άϩʔόϧมͰিಥ͍͢͠ DMBTT໊Λߟ͑Δͷ͕ຊ࣭తͰͳ͍ɺ͕͔͔࣌ؒΔ ˠDMBTT໊ม໊ߟ͑ͣʹελΠϦϯά͠Α͏ʂ
Tailwind CSS ʹΑΔελΠϦϯά ࣗલͰͷDMBTT໊ఆٛɺ$44ͳͲॻ͔ͣελΠϦϯά ˞ެࣜαΠτΑΓ
ຊͷςʔϚ 6UJMJUZ fi STUͳ$44JO+4
Utility ͱ… $44Λॻ͔ͣʹελΠϧ͕ద༻Ͱ͖Δɺ $44ΑΓศརͳDMBTT໊ϓϩύςΟ .md:flex .text-gray-500 1$αΠζͷͱ͖ͷΈ fl FY Ϩεϙϯγϒ
จࣈ৭ΛʮHSBZʯʹ ςʔϚΧϥʔ .shadow-md ΄Ͳ΄ͲαΠζͷӨ
ຊͷςʔϚ 6UJMJUZ fi STUͳ$44JO+4
Utility- fi rst ͳϝϦοτ ɾDMBTT໊Λ͍͍ͪͪఆٛ͠ͳͯ͘ྑ͍ ɾϨεϙϯγϒ͕؆୯ʹ࣮ݱͰ͖Δ $44JO+4ͷϝϦοτ ɾ5ZQF4DSJQUͷΈʹΔͷͰܕ҆શͰɺิ͕ޮ͘ ɾมͷຒΊࠐΈͳͲɺ+BWB4DSJQU͕ຒΊࠐΊΔ Utility-
fi rst ͳ CSS-in-JS ͷϝϦοτ ʮ྆ํʯͷϝϦοτ͕ڗडͰ͖Δʂ ʴ
Chakra UI ͷྫ // Article.tsx import { Box } from
'@chakra-ui/react' export const Article = (props) => ( <Box {...props}> <Box fontWeight="bold" fontSize={['md', 'lg']} color="gray.300" > هࣄͷλΠτϧ </Box> </Box> ) • ελΠϧΛίϯϙʔωϯτͷpropͰఆٛՄೳ • prop໊৭໊ͳͲܕ҆શͰิ͕ޮ͘ • ৭αΠζͷςʔϚΛద༻Մೳ • Ϩεϙϯγϒ؆୯ʹఆٛ ※ ʹ props Λશ෦͢ͱɺࣗલίϯϙʔωϯτ Utility ͑ͯΦεεϝ
ิ 6UJMJUZGSJFOEMZͳ$44JO+4ϥΠϒϥϦ IUUQTUFDIKYQSFTTOFUFOUSZVUJMJUZ fi STUDTTJOKT ˒L ˒L ˒L // Article.tsx
import { x } from ‘@styled/emotion' export const Article = (props) => ( <x.div {...props}> <x.div fontWeight=“bold" fontSize={{ _: 'md', md: 'lg' }} color=“gray-100" > هࣄͷλΠτϧ </x.div> </x.div> ) // Article.tsx import { Box } from '@chakra-ui/react' export const Article = (props) => ( <Box {...props}> <Box fontWeight="bold" fontSize={['md', 'lg']} color="gray.300" > هࣄͷλΠτϧ </Box> </Box> ) *&࣮࣭ରԠ🙆 *&Ұ෦ରԠ🙆 *&ඇରԠ❌ 6UJMJUZͷΈ 6*ϥΠϒϥϦ 6UJMJUZ 6*ϥΠϒϥϦ 6UJMJUZ // Article.tsx import { Box } from '@material-ui/core' export const Article = (props) => ( <Box {...props}> <Box fontWeight="bold" fontSize={{ xs: 'md', md: 'lg' }} color="text.primary" > هࣄͷλΠτϧ </Box> </Box> )
༨ஊɿଞͷએݴత UI ϑϨʔϜϫʔΫ @override Widget build(BuildContext context) { return Center(
child: Text( 'Click me!', style: TextStyle( fontSize: 60.0, fontWeight: FontWeight.bold, ), ), ); } 6UJMJUZ fi STUͳ$44JO+4ͱಉ͡Α͏ͳॻ͖ํ
·ͱΊ 6UJMJUZ fi STUͳ$44JO+4 Utility- fi rst ͳϝϦοτ ʴ CSS-in-JS
ͷϝϦοτ ɾ5ZQF4DSJQUͷΈʹΔͷͰܕ҆શͰɺิ͕ޮ͘ ɾมͷຒΊࠐΈͳͲɺ+BWB4DSJQU͕ຒΊࠐΊΔ ɾDMBTT໊ΛఆٛͤͣɺϨεϙϯγϒγϯϓϧʹ࣮ݱ → ੜ࢈ੑߴ͘ίʔυ͕ॻ͚Δ
More Decks by Mitsuki Ogasahara
See All by Mitsuki Ogasahara
後任はAIです ~情シスをAIに任せて、会社を休んでみた話~ / Out of Office: AI in Charge
yamitzky
1
100
ひとり情シスなCTOがLLMと始めるオペレーション最適化 / CTO's LLM-Powered Ops
yamitzky
0
1k
コスト管理から向き合う技術的負債 / Accounting for Technical Debt Through Cost Management
yamitzky
0
130
今から始める型安全 Python / Start Python Type Hints
yamitzky
13
5k
技術が好きで好きで好きでたまらないエンジニアが「取締役」になって思う、マネジメントキャリアパス / My Manager's Path
yamitzky
3
1.3k
Python 3.9 時代の型安全な Pythonの極め方 / Mastering Type Safety in Python 3.9 Era
yamitzky
35
32k
なぜサーバーレスとDockerなのか 〜 インフラ運用を最小化するサービス開発 〜 / Why We Choose Serverless AND Docker
yamitzky
0
4.3k
サーバーレスを活用して少数精鋭で開発するニュースアプリ #devsumi
yamitzky
4
3.2k
ここが辛いよサーバーレス だが私は乗り越えた #builderscon
yamitzky
14
8.2k
Other Decks in Technology
See All in Technology
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
200
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
140
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
190
Kiro アップデート 2026 年 11 月号 (11 月 8 日時点) | 目指せ Kiro マスター アップデート編
inariku
PRO
2
110
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
0
230
BALLAS Technology Deck
ballas_inc
0
570
GCASアップデート(202607-202610)
techniczna
1
320
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
160
マネジメントされる側の仕事は「文句」を言うこと
riyaamemiya
2
200
並列度を下げたら速くなった — go build の重複コンパイルを実測で見る
tomoaki25
2
1.2k
小さなエージェントから始めてみよう!実践コンテキストエンジニアリング
iwamot
PRO
0
110
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
320
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
330
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
470
Fireside Chat
paigeccino
43
4.1k
SEO for Brand Visibility & Recognition
aleyda
0
4.9k
How to build a perfect <img>
jonoalderson
1
6.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
570
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
520
Between Models and Reality
mayunak
4
570
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
300
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k