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
120
リストビュー画面UX改善の振り返り
Muddy_Web_#11_Cybozu_proteinmochi
proteinMochi
April 03, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
SEAL - Dive into the sea of search engines - Symfony Live Berlin 2025
alexanderschranz
1
120
ミリしらMCP勉強会
watany
4
720
英語 × の私が、生成AIの力を借りて、OSSに初コントリビュートした話
personabb
0
170
Day0 初心者向けワークショップ実践!ソフトウェアテストの第一歩
satohiroyuki
0
800
WordPress Playground for Developers
iambherulal
0
130
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1k
AHC045_解説
shun_pi
0
420
Being an ethical software engineer
xgouchet
PRO
0
200
custom_lintで始めるチームルール管理
akaboshinit
0
200
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
870
英語文法から学ぶ、クリーンな設計の秘訣
newnomad
1
290
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
23
5.7k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
245
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Side Projects
sachag
452
42k
Done Done
chrislema
183
16k
4 Signs Your Business is Dying
shpigford
183
22k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
103
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
Bash Introduction
62gerente
611
210k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
51
2.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
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