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
いまさら styled components 入門した
Search
8845musign
September 20, 2018
Technology
970
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.4k
業務システムの銀の弾丸? メモ機能を考察する
8845musign
2
320
業務システムに必要なアクセシビリティ
8845musign
1
1.2k
業務システム狂詩曲
8845musign
4
2.2k
READING The Atomic Workflow
8845musign
3
790
いろはとアップデート LIGHTNING DESIGN SYSTEM
8845musign
0
1.8k
チームをかえていくこと そして、泥臭さについて
8845musign
1
2.2k
感性デザインとは?
8845musign
4
2k
○DD駆動開発
8845musign
1
180
Other Decks in Technology
See All in Technology
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
18
6.3k
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
140
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
270
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
200
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
0
150
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
630
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
180
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
250
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
550
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
170
不要なレビューをAIにまかせて AIコーディングの環境改善を加速した
shoota
1
230
自宅LLMの話
jacopen
1
690
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Design in an AI World
tapps
1
250
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Everyday Curiosity
cassininazir
0
230
Designing Experiences People Love
moore
143
24k
We Have a Design System, Now What?
morganepeng
55
8.2k
Prompt Engineering for Job Search
mfonobong
0
350
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Claude Code のすすめ
schroneko
67
230k
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、崩して使っても便利
ご清聴ありがとうございました