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
コンポーネント指向時代のmargin戦略 / Rethinking the relations...
Search
ダーシノ
September 06, 2021
Programming
4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンポーネント指向時代の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
200
存在感が薄い?!意外とがんばってるさくらインターネットFEチーム / Frontend Conference 2024
bcrikko
1
4.7k
フロントエンドの複雑さに立ち向かう / Tackling Complexity of Front-end Software with DDD and Clean Architecture
bcrikko
19
20k
社内勉強会やっていきガイド / Tips for Sustainable Study Groups
bcrikko
4
2.2k
加速するコンポーネント設計入門 / Component Design as an Accelerator
bcrikko
10
7.3k
自分がやった設計反省会 / Evaluation of my Architecture
bcrikko
0
560
知ってトクするDevToolsの使い方 / DevTools Tips you should know
bcrikko
1
630
伝わるバグ報告 / How to write a better bug report
bcrikko
2
780
Sassの新しいモジュールシステム / Introducing New Sass Module System
bcrikko
0
730
Other Decks in Programming
See All in Programming
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
R8 の設定見直しでアプリサイズ削減
andpad
0
140
AWSに止められる覚悟してますか?
morizo_1984
2
510
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
140
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
140
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.8k
Domain-Driven Transformation
hschwentner
2
2.3k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
540
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
440
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
4
520
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Technical Leadership for Architectural Decision Making
baasie
3
590
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
690
Mobile First: as difficult as doing things right
swwweet
225
10k
Producing Creativity
orderedlist
PRO
348
41k
Building Adaptive Systems
keathley
44
3.2k
Into the Great Unknown - MozCon
thekraken
41
2.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
310
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
エンジニアに許された特別な時間の終わり
watany
109
250k
Side Projects
sachag
456
43k
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ってなんだ? 考えすぎかも なにもわからない