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 relationship between Components and Margins
Search
ダーシノ
September 06, 2021
Programming
1
930
コンポーネント指向時代のmargin戦略 / Rethinking the relationship between Components and Margins
社内勉強会用
コンポーネントにmarginを持たせて良いのか、Spacer/Stackコンポーネントは有用なのか、比較検討する
ダーシノ
September 06, 2021
Tweet
Share
More Decks by ダーシノ
See All by ダーシノ
フロントエンドの複雑さに立ち向かう / Tackling Complexity of Front-end Software with DDD and Clean Architecture
bcrikko
18
9.7k
社内勉強会やっていきガイド / Tips for Sustainable Study Groups
bcrikko
4
1.9k
加速するコンポーネント設計入門 / Component Design as an Accelerator
bcrikko
9
5.9k
自分がやった設計反省会 / Evaluation of my Architecture
bcrikko
0
360
知ってトクするDevToolsの使い方 / DevTools Tips you should know
bcrikko
1
460
伝わるバグ報告 / How to write a better bug report
bcrikko
2
590
Sassの新しいモジュールシステム / Introducing New Sass Module System
bcrikko
0
560
決断力を消耗しないSass開発環境構築 / Set up Sass development environment
bcrikko
0
470
本気でCSS芸やりたい人のためのbox-shadow講座 / Mastering box-shadow
bcrikko
6
6.9k
Other Decks in Programming
See All in Programming
Folding Cheat Sheet #7
philipschwarz
PRO
0
150
Composing an API the *right* way (Droidcon Berlin 2024)
zsmb
1
450
Temporalを取り巻く仕様を整理する
sajikix
0
110
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
Ruby メモリ管理 プログラミング
megmogmog1965
0
130
Jetpack for KMP
fornewid
1
290
Introduction to GitOps
hwchiu
0
110
わかりやすい正解を捨てて、コトに向き合う - スクラムフェス金沢2024 スポンサーセッション
yusukekokubo
0
170
Terraformテスト入門
msato
0
530
Xcode 16のPreviewModifierと@Previewableを活用した効率的なプレビュー方法の考察
ojun9
2
160
Activities at Cairo Library
cairolibrary720
0
1.2k
CSC307 Lecture 11
javiergs
PRO
0
240
Featured
See All Featured
Ruby is Unlike a Banana
tanoku
96
10k
Into the Great Unknown - MozCon
thekraken
20
1.3k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
The World Runs on Bad Software
bkeepers
PRO
63
11k
Designing for humans not robots
tammielis
247
25k
Six Lessons from altMBA
skipperchong
24
3.2k
Learning to Love Humans: Emotional Interface Design
aarron
269
39k
The Mythical Team-Month
searls
217
43k
5 minutes of I Can Smell Your CMS
philhawksworth
200
19k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
Navigating Team Friction
lara
181
13k
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ってなんだ? 考えすぎかも なにもわからない