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
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
48
「わたし色」の見方で拓く世界
azunyan
0
32
ちゃんとSvelte, Hello Worldした!
azunyan
0
84
最近取り組んでいることについて喋ってみる
azunyan
0
28
フロントエンドエンジニアが関数型プログラミングに出会った話
azunyan
0
130
TECH WOMAN KANSAIの 取り組みと今後~2024年の振り返りと2025年へ~
azunyan
0
110
Go初心者が開発やってみた!
azunyan
1
590
デブサミウーマン2023 アウトプットって何が良いの?
azunyan
0
1.3k
個人的に楽しかった実装2022
azunyan
0
160
Other Decks in Programming
See All in Programming
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
290
iOSDCのペンライトを自動制御したい!
akkeylab
0
330
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
220
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.7k
すこし踏み込む CancellationToken
htkym
2
1.5k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
320
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
250
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
210
速習iPhone Duo対応
yuukiw00w
2
920
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Ethics towards AI in product and experience design
skipperchong
2
410
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Producing Creativity
orderedlist
PRO
348
41k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
A Soul's Torment
seathinner
8
3.7k
Making the Leap to Tech Lead
cromwellryan
135
10k
Odyssey Design
rkendrick25
PRO
2
850
First, design no harm
axbom
PRO
2
1.3k
Prompt Engineering for Job Search
mfonobong
0
470
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
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公式ドキュメント
ご清聴ありがとうございました!