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
コンポーネント指向時代のmargin戦略 / Rethinking the relations...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ダーシノ
September 06, 2021
Programming
3.7k
1
Share
コンポーネント指向時代のmargin戦略 / Rethinking the relationship between Components and Margins
社内勉強会用
コンポーネントにmarginを持たせて良いのか、Spacer/Stackコンポーネントは有用なのか、比較検討する
ダーシノ
September 06, 2021
More Decks by ダーシノ
See All by ダーシノ
がんばりすぎないAI活用 & Tips / Working with AI
bcrikko
0
140
存在感が薄い?!意外とがんばってるさくらインターネットFEチーム / Frontend Conference 2024
bcrikko
1
4.4k
フロントエンドの複雑さに立ち向かう / Tackling Complexity of Front-end Software with DDD and Clean Architecture
bcrikko
19
19k
社内勉強会やっていきガイド / Tips for Sustainable Study Groups
bcrikko
4
2.1k
加速するコンポーネント設計入門 / Component Design as an Accelerator
bcrikko
10
7.2k
自分がやった設計反省会 / Evaluation of my Architecture
bcrikko
0
520
知ってトクするDevToolsの使い方 / DevTools Tips you should know
bcrikko
1
580
伝わるバグ報告 / How to write a better bug report
bcrikko
2
740
Sassの新しいモジュールシステム / Introducing New Sass Module System
bcrikko
0
700
Other Decks in Programming
See All in Programming
JOAI2026 1st solution - heron0519 -
heron0519
0
110
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
170
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
160
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
170
ローカルで稼働するAI エージェントを超えて / beyond-local-ai-agents
gawa
3
270
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
180
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
710
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
yasunori0418
1
120
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
240
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
170
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
120
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
5.4k
Prompt Engineering for Job Search
mfonobong
0
260
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
290
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The SEO Collaboration Effect
kristinabergwall1
0
420
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
160
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
340
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
100
Building Applications with DynamoDB
mza
96
7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Transcript
コンポーネント指向時代の margin戦略
TL;DR 結論はだせない(場合による) 宗教戦争になる
TOC 1. コンポーネント設計とmargin戦略 2. margin戦略の疑問 3. 従来型 4. Spacerコンポーネント 5.
Stackコンポーネント 6. まとめ
1. コンポーネント設計とmargin戦略
1.1. コンポーネント設計とmargin戦略 - Atoms Atoms UIパーツの最小単位のコンポーネント ラベル、テキスト、アイコン、ボタンなど Atoms の margin戦略
marginは持たない(わかる ) まわりのコンポーネントに影響を与えるため marginの相殺 marginの上書き
1.2. コンポーネント指向とmargin戦略 - Molecules Molecules Atomsを組み合わせたコンポーネント 入力フォームなど Molecules の margin戦略
自身のmarginは持たない(わかる ) 子コンポーネントに対してmarginを指定する(ホントに? )
1.3. コンポーネント指向とmargin戦略 - Organisms Organisms Atoms、Molecuresを組み合わせたコンポーネント ナビゲーションバーなど Organisms の margin戦略
自身のmarginを持つ(ホントに? ) 子コンポーネントに対してmarginを指定する(ホントに? )
2. margin戦略の疑問
2.1. margin戦略の疑問 - Molecules Moleculesは子コンポーネントに対してmarginを指定する?! <Button> <Icon /> <Text />
</Button> Button > * + * { margin-left: 1em; } 本当に <Text /> に margin-left の責務を持たせていいの? 複数、Icon/Text以外の要素が <Button /> 内に入れられたらどうするの?
2.2. margin戦略の疑問 - Organisms Organismsは自身のmarginを持つ?! Organismsは子コンポーネントに対してmarginを指定する?! <Navbar> <Logo /> <ButtonGroup
/> <Account /> </Navbar> Navbar { // 自身のmargin margin-bottom: 32px; // 子コンポーネントに対してのmargin Logo { margin-right: 64px; } ButtonGroup { margin-right: 32px; } } 本当に <Logo /> や <ButtonGroup /> に margin-right をもたせていいの?
3. 従来型 <Navbar> <Logo /> <ButtonGroup /> <Account /> </Navbar>
Navbar { margin-bottom: 32px; Logo { margin-right: 64px; } ButtonGroup { margin-right: 32px; } } Pros シンプル レイアウトのためだけの無意味な要 素が増えない Cons margin-left / marigin-right どっち使 うか問題が発生する margin相殺が発生する可能性が高い marginをコンポーネントの責務として持た せる必要性を疑う
4. Spacerコンポーネント margin専用のコンポーネント <Navbar> <Logo /> <Spacer x="64px" /> <ButtonGroup
/> <Spacer x="32px" /> <Account /> </Navbar> <Spacer y="32px" /> Navbar { /* none */}
4. Spacerコンポーネント Pros 責務が明確 CSSを触らなくても柔軟にmarginを調 整できる Cons marginと共存させるなら別途ルールが必 要 基本的には共存させない
margin用の要素がDOM Treeに大量に登 録される 導入、切り戻しコストが高い
5. Stackコンポーネント 等間隔に並べるためのコンポーネント <Stack axis="column" gap="24px"> <Button /> <Button />
<Button /> </Stack> // JSで設定する Stack { display: flex; flex-direction: column; gap: 24px; }
5. Stackコンポーネント Pros 不要な要素を作成しなくてよい CSSを触らなくても柔軟にmarginを調整 できる 導入、切り戻しコストはそれほど高くな い Cons DOM
Treeが1階層深くなる 一定の間隔でしか指定できない 異なるコンテキストのボタンが並ぶ場 合に複数のStackが必要になる flex-gapを使うので古いブラウザで使え ない
6. まとめ marginってなんだ? 考えすぎかも なにもわからない