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
870
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
37
「わたし色」の見方で拓く世界
azunyan
0
28
ちゃんとSvelte, Hello Worldした!
azunyan
0
73
最近取り組んでいることについて喋ってみる
azunyan
0
22
フロントエンドエンジニアが関数型プログラミングに出会った話
azunyan
0
120
TECH WOMAN KANSAIの 取り組みと今後~2024年の振り返りと2025年へ~
azunyan
0
100
Go初心者が開発やってみた!
azunyan
1
570
デブサミウーマン2023 アウトプットって何が良いの?
azunyan
0
1.3k
個人的に楽しかった実装2022
azunyan
0
150
Other Decks in Programming
See All in Programming
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
240
Swiftのレキシカルスコープ管理
kntkymt
0
220
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
Inside Stream API
skrb
1
690
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2k
RTSPクライアントを自作してみた話
simotin13
0
580
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
2
570
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
690
AIで効率化できた業務・日常
ochtum
0
120
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
240
Featured
See All Featured
Crafting Experiences
bethany
1
180
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
830
Large-scale JavaScript Application Architecture
addyosmani
515
110k
It's Worth the Effort
3n
188
29k
My Coaching Mixtape
mlcsv
0
140
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
400
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公式ドキュメント
ご清聴ありがとうございました!