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
Utility-first な CSS-in-JS 〜Tailwind CSS と Chakr...
Search
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
More Decks by Mitsuki Ogasahara
See All by Mitsuki Ogasahara
後任はAIです ~情シスをAIに任せて、会社を休んでみた話~ / Out of Office: AI in Charge
yamitzky
1
66
ひとり情シスなCTOがLLMと始めるオペレーション最適化 / CTO's LLM-Powered Ops
yamitzky
0
880
コスト管理から向き合う技術的負債 / Accounting for Technical Debt Through Cost Management
yamitzky
0
100
今から始める型安全 Python / Start Python Type Hints
yamitzky
13
4.9k
技術が好きで好きで好きでたまらないエンジニアが「取締役」になって思う、マネジメントキャリアパス / My Manager's Path
yamitzky
2
1.2k
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.2k
サーバーレスを活用して少数精鋭で開発するニュースアプリ #devsumi
yamitzky
4
3.1k
ここが辛いよサーバーレス だが私は乗り越えた #builderscon
yamitzky
14
8k
Other Decks in Technology
See All in Technology
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
300
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
200
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
300
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
470
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
300
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
250
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
420
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
200
AWS Summit 2026で見えたSIerにとっての Amazon Quickの位置づけ
maf_0521
0
130
テスト設計の本質を改めて考えてみる~生成AIを活用する時代だからこそ、作ったテストの説明性を高めよう~
yamasaki696
1
210
NDIAS CTF 2026 問題解説会資料
bata_24
0
140
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
530
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
220
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
590
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
エンジニアに許された特別な時間の終わり
watany
107
250k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Building Adaptive Systems
keathley
44
3.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
4 Signs Your Business is Dying
shpigford
187
22k
Transcript
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໊ΛఆٛͤͣɺϨεϙϯγϒγϯϓϧʹ࣮ݱ → ੜ࢈ੑߴ͘ίʔυ͕ॻ͚Δ