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
vanilla-extractを使ってみた!with React
Search
Azusa Okamoto
April 24, 2022
Programming
880
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
vanilla-extractを使ってみた!with React
Azusa Okamoto
April 24, 2022
More Decks by Azusa Okamoto
See All by Azusa Okamoto
GraphQLでAPI開発 やってみよう!
azunyan
0
43
「わたし色」の見方で拓く世界
azunyan
0
30
ちゃんとSvelte, Hello Worldした!
azunyan
0
80
最近取り組んでいることについて喋ってみる
azunyan
0
24
フロントエンドエンジニアが関数型プログラミングに出会った話
azunyan
0
120
TECH WOMAN KANSAIの 取り組みと今後~2024年の振り返りと2025年へ~
azunyan
0
100
Go初心者が開発やってみた!
azunyan
1
580
デブサミウーマン2023 アウトプットって何が良いの?
azunyan
0
1.3k
個人的に楽しかった実装2022
azunyan
0
150
Other Decks in Programming
See All in Programming
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
120
XHTMLが残したもの
yosuke_furukawa
PRO
2
440
Building an Out-of-Order CPU
latte72
1
720
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
不幸な GC
chencmd
0
890
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
210
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
460
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
41k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
The SEO identity crisis: Don't let AI make you average
varn
0
550
Writing Fast Ruby
sferik
630
63k
It's Worth the Effort
3n
188
29k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
New Earth Scene 8
popppiees
3
2.5k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
440
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Transcript
vanilla-extractを使ってみた! with React 2022/04/24_とにかくほめる!マウントなしのLT会 あずにゃん
自己紹介 フロントエンドエンジニア。 言語: JavaScript・TypeScript FW/ライブラリ: Vue.js・React・jQuery @azunyan_eng
今日お話しすること 1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5
参考資料
今日お話しすること 先月、microCMSさんのLT会で vanilla-extractを知った! 見やすそうだし、CSS Modulesだし... なんか、良さそう!
今日お話しすること styled-componentsやSassを使った業務経験が 過去にあり。
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5 参考資料
vanilla-extractとは 2021年5月リリース。 CSS Modulesの考え方がベース。 オブジェクト形式で記述。
1 vanilla-extractとは 3 つまづいたこと 4 感想 5 参考資料 2 主な使い方
主な使い方 提供されているAPIと関数を 組み合わせて利用!
Styling API〜style~ export = ({ : , : }); const
toDoStyle style display justifyContent 'flex' 'space-between'
Styling API~globalStyle~ 全体を通して共通化したいスタイルを記述。
Styling API~globalStyle~ globalStyle( , { : , : , :
, : , : , : }); 'body, #root' '#FFFFFF' '#1A1A1A' '0' 'flex' 'column' '100vh' backgroundColor color margin display flexDirection minHeight
Styling API~globalStyle~ import ; "./styles/global.css"
Styling API~createTheme~ 同じcss.tsファイル内でのみ使える変数を 作成!
Styling API~createTheme~ export export , = ({ : { :
} }); = ({ : . . }); const const [themeClass vars] alertBtn vars createTheme style background alert backgroundColor background alert 'red'
Styling API~createTheme~ < = > = > 全て削除する div button
=> button div className onClick className { } { } { } themeClass alertBtn < = </ > </ > () () handleDeleteAll
Styling API~createGlobalTheme~ 共通で使える変数を作成!
Styling API~createGlobalTheme~ export = ( , { : { :
, : }, : { : }, : { : }, : { : , : , : } }); const globalTheme createGlobalTheme ':root' '#1A1A1A' '#7FFF7F' '#FFFFFF' '#7FFF7F' '0.5rem' '1.5rem' '2.5rem' background main success font color color success size xs s m
Styling API~createGlobalTheme~ export = ({ : , : . .
, : . . }); const footerStyle globalTheme globalTheme style marginTop backgroundColor background main color font color 'auto'
Sprinkles API ユーティリティクラスを作成! conditionsを使ってレスポンシブ対応も!
Sprinkles API const = ({ : { : { :
}, : { : } }, : , : { : [ , ], : [ ], : [ , ], : [ , ], : . , : . } }); responsiveStyle globalTheme globalTheme defineProperties conditions desktop mobile defaultCondition properties display justifyContent textAlign width paddingLeft size paddingRight size '@media' 'screen and (min-width: 1024px)' '@media' 'screen and (max-width: 1023px)' 'desktop' 'flex' 'block' 'center' 'center' 'left' '50%' '100%'
Sprinkles API export = ( ); const sprinkles responsiveStyle createSprinkles
Sprinkles API < > < /> < /> < =
, > < /> < /> </ > </ > div div div div Form DeleteAllBtn ToDos DoneToDos className display: justifyContent: { 'flex' 'center' } sprinkles( ) { }
1 vanilla-extractとは 2 主な使い方 4 感想 5 参考資料 3 つまづいたこと
つまづいたこと そもそも、vanilla-extract自体を 適用するのに手間取った!
つまづいたこと〜原因〜 create-react-appをサポートしていなかった...。 ※公式からのサポート状況に関する言及は特になし。 ※公式のGitHub Issueでは、サポートしていないとの回答が。 ※Cracoを一緒に使うことで利用できるようになるとの回答も。
つまづいたこと〜原因〜 Craco導入したらいけるかな〜?? Webpack等の構成を 上書きできる! eject不要!
つまづいたこと〜原因〜 ダメだった...。
つまづいたこと〜解決〜 create-react-appに頼らない! 面倒くさがらずに、Webpackのinstall、 webpack.config.jsの作成もやりましょう!
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 5 参考資料 4 感想
感想 CSS Modulesの方が好みなので、使い勝手が良いと感 じた! styled-componentsとは異なり、オブジェクト形式だ と書きやすい!見やすい! 定義元に簡単に移動できるのは助かる!
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5 参考資料
参考資料 vanilla-extract公式ドキュメント CSS in JSとしてVanilla-Extractを選んだ話と技術選定 の記録の残し方 vanilla-extract を試す vanilla-extractを使ってみた感想
参考資料 create-react-app公式ドキュメント Craco公式GitHubリポジトリ styled-components公式ドキュメント
ご清聴ありがとうございました!