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
76
ひとり情シスなCTOがLLMと始めるオペレーション最適化 / CTO's LLM-Powered Ops
yamitzky
0
930
コスト管理から向き合う技術的負債 / Accounting for Technical Debt Through Cost Management
yamitzky
0
110
今から始める型安全 Python / Start Python Type Hints
yamitzky
13
4.9k
技術が好きで好きで好きでたまらないエンジニアが「取締役」になって思う、マネジメントキャリアパス / My Manager's Path
yamitzky
2
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.2k
サーバーレスを活用して少数精鋭で開発するニュースアプリ #devsumi
yamitzky
4
3.1k
ここが辛いよサーバーレス だが私は乗り越えた #builderscon
yamitzky
14
8.1k
Other Decks in Technology
See All in Technology
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
220
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
760
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
Goでデータパイプラインを作ろう
sansantech
PRO
1
450
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.3k
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
13
12k
猫付きpingコマンドを自作
uyuki234
0
230
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
9k
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
290
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
My broken English still works: speaking at global OSS events
naruoga
0
100
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
150
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Practical Orchestrator
shlominoach
191
12k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
How GitHub (no longer) Works
holman
316
150k
Un-Boring Meetings
codingconduct
0
390
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
We Are The Robots
honzajavorek
0
300
Typedesign – Prime Four
hannesfritz
42
3.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
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໊ΛఆٛͤͣɺϨεϙϯγϒγϯϓϧʹ࣮ݱ → ੜ࢈ੑߴ͘ίʔυ͕ॻ͚Δ