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
いまさら styled components 入門した
Search
8845musign
September 20, 2018
Technology
980
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
いまさら styled components 入門した
Meguro.css #3 @ oRo
8845musign
September 20, 2018
More Decks by 8845musign
See All by 8845musign
Ubie Vitalsの取り組み紹介
8845musign
1
1.5k
業務システムの銀の弾丸? メモ機能を考察する
8845musign
2
370
業務システムに必要なアクセシビリティ
8845musign
1
1.2k
業務システム狂詩曲
8845musign
4
2.3k
READING The Atomic Workflow
8845musign
3
820
いろはとアップデート LIGHTNING DESIGN SYSTEM
8845musign
0
1.9k
チームをかえていくこと そして、泥臭さについて
8845musign
1
2.2k
感性デザインとは?
8845musign
4
2k
○DD駆動開発
8845musign
1
190
Other Decks in Technology
See All in Technology
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
390
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
370
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
140
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
380
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
440
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
160
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
150
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
330
macOS Golden Gate 時代のMac管理
tategami
0
120
こんにちは!SORACOM です & IoT とは【SORACOM UG 東北 in 八戸】
soracom
PRO
0
170
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
220
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
290
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
350
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
870
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
New Earth Scene 8
popppiees
4
2.7k
Producing Creativity
orderedlist
PRO
348
41k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Between Models and Reality
mayunak
4
500
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Transcript
いまさら stlyed components 入門した Meguro.css #3 @ oRo
自己紹介 腹筋ローラーの力、信じてるよ @8845musign_ 株式会社ウィルゲート ディレクター 転職した会社すべてに腹筋ローラー部を作ってきた 腹筋ローラーが必要な会社さん声かけてください(嘘
話すこと 最近業務で styled components 使い始めた 各所で結構「いいよ」って言われまくっている(於: Twitter) 実際に使って思ったことを話します
styled components サマリ
CSS in JS のメリット ローカルスコープ スタイルの再利用 JavaScript の利用 変数 関数など
一部は Sass や LESS といった CSS プリプロセサーでも代替可能です
CSS in JS の例を見てみましょう Vue styled components
Vue <template> <h1 class="heading"><slot></slot></h1> </template> <style scoped> .heading { font-size:
40px; } </style> ... 以下省略... 普通の CSS を書く感覚で CSS in JS の恩恵を得ることができる
styled components import styled from 'styled-components' const Heading = styled.h1`
font-size: 18px; ... ` const Page = () => <Heading> 見出し</Heading> Tagged Template literals に CSS を記述 コード量がかなり少なくなった React や Vue などでコンポーネントを作るよりはるかに手軽
styled components の良さ class を書かない分、記述量が減る 冗長な名前が減る ‑ ローカルスコープのおかげ Sass や
LESS でできるようなことはたいていできる ‑ mixin や extend、function など OK
アプローチの一種として ライブラリではなく styled components というアプローチ として 広まっている ほぼ同じような書き方ができるライブラリもいくつかある ‑ freestyler
‑ emotion React でも Vue でも Angular でも使える
stlyed components は既存 CSS の置き換え となるか?
どうかなぁ...
難しい 実装コストが大きい JavaScript による高い柔軟性は結局メンテナンスを難しくする
実装コストが大きい
通常の Web ページのコーディングフロー 1. デザインから HTML 文章構造を設計 2. HTML を構築しつつ
class を 各要素へ付与 3. CSS を記述して style を付与 4. 1~3 を繰り返す
stlyed components を使った場合のフロー 1. デザインから HTML 文章構造を設計 2. HTML を構築
3. 構築した HTML から必要なコンポーネントを作成 4. CSS を記述して style を付与 5. コンポーネントを HTML の各要素と置き換え 6. 1~5 を繰り返す
正直 ul > li の li くらいはローカルスコープに頼って コンポーネント化しなくても良いんでは
高い柔軟性は結局メンテナンスを難しくする
スタイルの使い回し const transition = css` transition: background-color 150ms ease-in-out, color:
150ms ease-in-out; ` const Button = styled.button` ${buttonBase} ${transition} ... `
既存コンポーネントの拡張 const Button = styled.button` background-color: white; ... ` const
PrimaryButton = styled(Button)` background-color: blue; ... `
一度定義したコンポーネントの要素の変更 ver 4.0 より const Text = styled.div``; <Text as="p">
腹筋がだらしない<Text />
高い柔軟性 柔軟性がコードベース全体に渡って発揮されていたとしたら? 私には難しい
それでも
stlyed components の力を信じろ
どう扱えば良さそう? 限定的 に扱うとその力を最大限発揮するのでは
ローカルスコープを作るために使う const Component = () => { <Status> <div> <dt>
腹筋</dt> <dd> 今筋肉痛</dd> </div> ... </Status> } const Status = styled.dl => { ... > div { ... } dt { ... } dd { ... } }
ローカルスコープを作るために使う ドキュメントで実は似たような手法が紹介されている 1. コンポーネントとという小さな単位内 2. 構造が自明な要素を使っていること 2 つのどちらかに当てはまる場合、ローカルスコープを生成しても良い のでは
雑に複数の要素からなるコンポーネントを作る const BaseSiteFooter = ({ className, children }) => (
<footer className={className}> <p><small> (c ){children}</small></p> </footer> ) className を受け取るコンポーネントを実装する
雑に複数の要素からなるコンポーネントを作る const SiteFooter = styled(BaseSiteFooter)` footer { display: flex; ...
} small: { font-size: ${theme.font.sm}; } ` <SiteFooter> 腹筋ローラの力を信じろよ?</SiteFooter> セマンティクスを持った構造をコンポーネントにまとめて スタイルを付与。 とっても楽。
UI フレームワーク の実装に使う
機能と外観を分離する class BaseButton extends React.Components { onClick: () { ...
} onHhover () { ... } render () { return ( <button className={this.props.className}> {this.props.children} </button> ) } } const PrimaryButton = styled(BaseButton)`...`; const SecondaryButton = styled(BaseButton)`...`; export PrimaryButton export SecondaryButton
CSS フレームワークを コンポーネント化するために使う // Bootstrap const LgPrimaryButton = styled.button.attrs({ className:
'btn btn-lg btn-primary' }); コンポーネント生成時に class 属性を指定することができるので CSS を 1 行も書かずにコンポーネントが実装可能
まとめ 銀の弾丸なんてなかった 辛いと感じたら全部置き換えなくても良い stlyed components、崩して使っても便利
ご清聴ありがとうございました