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
リストビュー画面UX改善の振り返り
Search
proteinMochi
April 03, 2025
Programming
0
170
リストビュー画面UX改善の振り返り
Muddy_Web_#11_Cybozu_proteinmochi
proteinMochi
April 03, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Java on Azure で LangGraph!
kohei3110
0
170
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
800
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
100
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
230
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
11
2k
5つのアンチパターンから学ぶLT設計
narihara
1
110
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
190
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
490
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
570
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
250
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
4 Signs Your Business is Dying
shpigford
184
22k
Practical Orchestrator
shlominoach
188
11k
Building Applications with DynamoDB
mza
95
6.5k
Faster Mobile Websites
deanohume
307
31k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
The Cult of Friendly URLs
andyhume
79
6.5k
Automating Front-end Workflow
addyosmani
1370
200k
Site-Speed That Sticks
csswizardry
10
660
BBQ
matthewcrist
89
9.7k
Transcript
リストビュー画面UX改善の 振り返り
None
話す内容 • 「リストビュー画面」(一覧画面)のUXの改善タスクを振り返る • 一覧画面を一目に収める対応 • 微妙に伸びる横幅の対応 *主に実装レベルで振り返る(UXの概念はあまり触れません)
before
after
None
前提:一覧画面の構成
ヘッダー & グローバル ナビゲーション メインコンテンツ (utility) メインコンテンツ (table)
横にスクロールすると..
None
一覧画面を一目に収める対応
実装方法の検討 1. スクロール対象をテーブルに変更 2. 1.の変更に加えて、外側に偽スクロールを作って同期させる 3. テーブルコンポーネント以外をviewportに固定する
1. スクロール対象テーブルに変更
None
採用できなかった理由 • 横スクロールバーがviewportの最下部に表示されない → 横スクロールバーを探すために毎度下まで下がらないといけない → UX よくないと判断
None
2. 1.の変更に加えて、 外側に偽スクロールを作って同期させる
内側スクロールバー 外側スクロールバー (に見えるやつ)
採用できなかった理由 • ゴリ押しすぎる (偽スクロールバーってなに?) → React の DOM update の自然な流れに反する
bad practice → コードの可読性&メンテ性&拡張性などにおいて NG
3. テーブルコンポーネント以外をviewportに固定する
ラッパーコンポーネント用意
ラッパーコンポーネントの css 指定
None
絶妙に伸びる横幅の対応
横幅が伸びたとは?
横幅が伸びた原因 • `width: 100vw` → 現状 css 仕様的には、縦スクロールバーを考慮しない
解決策の検討 1. 別の width property 単位 → `dvw` を活用 2.
別の width property 単位 → `%` を活用 3. JS 活用
1. 別の width property 単位 → `dvw` を活用
% に変更 from web.dev vw = dvw
解決できなかった理由 dvhはモバイルの viewport では意味あるけど、 dvwは = vw なので、 スクロールバー分を考慮してくれるわけではない
2. 別の width property 単位 → `%` を活用
% に変更
Viewportに固定したい コンポーネント テーブル コンポーネント root コンポーネント Viewport
Viewportに固定したい コンポーネント テーブル コンポーネント root コンポーネント Viewport
解決できなかった理由 伸ばしたくないコンポーネントの幅を伸ばしてしまう。 kintoneの構造上無理だった。
3. JS 活用
1. グローバル resize イベント → ブラウザー window 自体のサイズを観察 → 画面自体のレイアウト変更は観察しない
2. MutationObserver API → DOM 変更を観察 → DOM追加・削除に使えそう 3. IntersectionObserver API → viewport範囲内で見えるか否かを観察 → lazy loading, scroll tracking などで使えそう 4. ResizeObserver API → 要素のサイズの変化を観察 → 縦スクロールバーによる width 変更に反応してくれそう 使えそうなJS pick-up
ResizeObserver API は幅広く使われてる!
% に変更
% に変更
解決!
あとがき
source • Scrollbar problem source • `dvh` explanation source •
Can I use source • resize event source • MutationObserver source • IntersectionObserver source • ResizeObserver source