昨天我們替微光採集瓶的色票加上了專屬名稱,並讓心情名稱順利顯示在月度色卡與時光相簿中。
但在回頭審視整個頁面時,我發現了兩個需要改善的體驗問題:
今天(Day 27),我們要來做一次「減法設計」——移除臨時按鈕、重整頂部導覽,並壓縮元件間距,讓採集流程更加緊湊流暢。
在動手改 code 之前,我先釐清了主畫面的優先順序。使用者進到這個畫面,最核心的目的只有四個動作:
看見瓶子 ➔ 挑選心情 ➔ 寫下美好 ➔ 放入微光
其他像是「時光相簿」、「時光檢索」,都屬於次級操作,不應該過度佔用瓶身與輸入框之間的空間。
因此我進行三個版面調整:
原本的返回按鈕獨立放置,現在將「時光相簿」也收整進來,讓次級操作集中在頂部,瓶身下方不再需要額外放置導覽按鈕。
<!-- 頂部導覽列:左側返回首頁,右側時光相簿 -->
<nav class="top-nav">
<button class="btn-nav-action" @click="showLanding = true">
← 首頁
</button>
<button class="btn-nav-action" @click="showAlbum = true">
時光相簿 ({{ archivedCards.length }})
</button>
</nav>
這樣一來,使用者可以從頂部進入相簿或返回首頁,而主畫面的視覺重心則能留給瓶身與採集操作。
檢索列不再佔用過大的上下邊距,瓶身高度也從 220px 微調為 185px。這樣的尺寸在視覺上依然保有玻璃瓶的輕盈感,同時也為下方的採集元件保留更多空間。
<!-- 緊湊型時光檢索列 -->
<div class="filter-bar">
<label for="filterDateInput" class="filter-label">檢索:</label>
<input
id="filterDateInput"
type="date"
v-model="filterDate"
class="filter-date-input"
/>
<button
v-if="filterDate"
class="btn-reset-filter"
@click="resetFilter"
>
重設
</button>
</div>
瓶身高度則調整為:
.bottle {
width: 145px;
height: 185px;
}
重新分配各個元件的空間,讓瓶子、調色盤與輸入區之間的比例更加協調。
原本分佔兩行的「當前顏色文字」與「修改心情名稱按鈕」,現在整合進同一個彈性容器,減少額外的垂直空間。
<div class="palette-container">
<!-- 選色按鈕 -->
<div class="palette">
<button
v-for="color in paletteColors"
:key="color"
class="color-dot"
:class="{ 'is-active': selectedColor === color }"
:style="{ backgroundColor: color }"
@click="selectColor(color)"
></button>
</div>
<!-- 單行呈現:選中文字 + 編輯小按鈕 -->
<div class="label-info-row">
<span class="selected-label">{{ labelOf(selectedColor) }}</span>
<button class="btn-edit-inline" @click="showLabelEditor = true">
✎ 自訂名稱
</button>
</div>
</div>
透過 display: flex 與 align-items: center,心情名稱和編輯按鈕可以在同一行對齊,不需要各自佔據一整行。
要讓畫面更緊湊,除了調整個別元件的高度,外層容器的排版與間距也很重要。
.page-wrap {
max-width: 460px;
min-height: 100vh;
margin: 0 auto;
padding: 12px 18px 20px;
box-sizing: border-box;
background: #0b0f14;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
這裡使用 min-height: 100vh,讓容器至少具有與視窗相同的高度;搭配 box-sizing: border-box,可以讓 padding 計入容器的尺寸計算。
不過,min-height: 100vh 並不代表內容一定不會超出畫面,因此還需要配合瓶身高度、標題間距、檢索列與輸入區的 margin 一起調整。
.top-nav {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 4px 0 10px;
box-sizing: border-box;
}
.btn-nav-action {
background: transparent;
border: none;
color: rgba(255, 255, 255, 0.5);
font-family: var(--font-serif);
font-size: 0.78rem;
letter-spacing: 0.5px;
cursor: pointer;
padding: 4px 6px;
transition: color 0.25s ease;
}
.btn-nav-action:hover {
color: var(--gold);
}
透過 justify-content: space-between,兩個導覽入口分別靠向左右兩側,讓版面更有秩序,也避免它們擠在同一個位置。
.label-info-row {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.btn-edit-inline {
background: none;
border: none;
color: rgba(255, 255, 255, 0.4);
font-family: var(--font-serif);
font-size: 0.68rem;
letter-spacing: 0.5px;
cursor: pointer;
padding: 2px 4px;
transition: color 0.2s ease;
}
.btn-edit-inline:hover {
color: var(--gold);
}
這裡主要是透過 flex 將兩個元件排列在同一行,並縮小按鈕的 padding,避免不必要的空間占用。
在調整完採集內頁後,我也回頭檢查了首頁 Hero 區塊。先前首頁內容偏向螢幕上半部,下方留白較多,整體視覺重心不夠平衡。
因此今天也替首頁補上垂直置中規則:
.landing-page {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
min-height: calc(100vh - 40px);
box-sizing: border-box;
padding: 20px 8px;
}
其中,justify-content: center 負責將首頁內容沿著垂直方向置中,而 min-height 則讓首頁在一般視窗尺寸下保有足夠的高度。
調整後,首頁的標題、三步驟引導與開始按鈕能更集中地呈現在畫面中央,讓整體的視覺風格更加一致。
更緊湊的採集主畫面
移除冗餘按鈕並重新分配間距後,主畫面的版面更加緊湊。在目前測試的畫面尺寸下,使用者不需要滾動,就能看到瓶身、調色盤、文字框與採集按鈕,讓整個採集流程更加流暢。
左右分立的頂部導覽
左側返回首頁、右側時光相簿,功能清楚不搶主視覺焦點。

垂直置中的首頁 Hero
調整首頁的垂直排列方式後,標題、引導步驟與開始按鈕更加集中,改善先前內容偏上的視覺問題。

有時候,前端開發最重要的一步不是「加功能」,而是學會適時做減法。
移除測試用的按鈕,讓月度色卡回歸月底回顧的儀式;重新調整元件間距與版面配置,則讓使用者能更順暢地完成採集流程。這次的調整讓我體會到,前端開發不只是增加功能,也需要重新檢視既有設計,才能讓整體體驗更加完整。
明天(Day 28)將著手實作月底封存後的光珠清空機制。當月度色卡保存至時光相簿後,瓶中的光珠也會一併清空,讓瓶子重新回到乾淨的起點。同時也會處理封存後的日期補漏問題,避免系統再次自動生成白色光珠,確保舊月份的回憶妥善保存,也讓新月份能順利開始!