隨著行動網路的普及與智慧型手機運算效能的巨幅提升,越來越多的使用者習慣在移動中處理各種生活大小事。根據我們的內部系統數據分析,高達八成以上的使用者是透過行動裝置(如手機或平板電腦)來訪問我們的應用程式。為了順應這個不可逆的行動化趨勢,我們在本次更新中,針對前端介面排版進行了最全面的重構與響應式設計(Responsive Web Design, RWD)深度優化。
這項基礎架構層級的改進,為廣大的行動端使用者帶來了前所未有的流暢體驗(UX)。過去那種在小螢幕上需要不斷放大、縮小,甚至痛苦地左右滑動才能看清楚發車資訊的窘境已不復存在。現在,無論使用者拿的是寬螢幕的高階顯示器、直立的平板電腦,還是小巧的智慧型手機,所有的介面元素、站點卡片與路線圖表都能自動適應螢幕寬度,呈現出最完美、最易讀的版面配置。
然而,在推動這項響應式介面改造的過程中,我卻必須為專案過去累積的技術債付出慘痛的代價。在應用程式開發的最初期,開發團隊採取了傳統的「桌機優先」(Desktop-First)思維進行佈局規劃。當時為了確保網頁版面在電腦大螢幕上的絕對穩定性與對齊,我們在許多核心容器(Container)的 CSS 樣式中,直接寫死了固定的像素寬度(Fixed Pixel Widths),例如將主版面強制作為 width: 800px;。
這個歷史遺留的「坑」,在我們將服務推廣到行動端裝置時引發了一場視覺災難。雖然我們已經在 HTML 的 <head> 區塊中正確加入了控制縮放的 Viewport Meta 標籤,但由於內部元素被強制撐開至 800 像素,遠遠超出了絕大多數手機螢幕的物理與邏輯寬度。這導致整個頁面底部出現了令人崩潰的水平捲軸。更糟糕的是,一些極度重要的操作按鈕(例如「確認送出路線」或「定位目前位置」)被無情地擠到了螢幕可視範圍之外,使用者如果沒有意識到需要向右滑動,就會完全無法使用核心功能,這對產品的可用性造成了毀滅性的打擊。
為了解決這個嚴重的佈局破壞問題,我展開了一場大規模的樣式表清理與重構行動。我使用瀏覽器的裝置模擬工具(Device Mode),逐一檢視各個頁面在不同解析度下的破綻。在測試過程中我發現,單純將 width 改為百分比並不能解決所有問題,因為在超大螢幕上,無限制的百分比寬度又會讓內容顯得過於鬆散,失去閱讀焦點。
因此,我實作了一套基於 max-width 的流體佈局策略。我將那些寫死的 width: 800px 替換為 max-width: 800px 加上 width: 100%,這樣容器在電腦上能保持適當的最大寬度限制,而在手機上則能自動縮放以完美填滿螢幕。同時,為了處理容器內部複雜的元件排列,我全面淘汰了老舊且難以控制的 float 浮動排版與絕對定位技巧,大舉導入了現代化的 Flexbox 彈性盒子模型。透過設定 flex-wrap: wrap 與適當的彈性成長比例,內部的資訊卡片與操作按鈕現在能夠優雅地根據裝置的剩餘空間自動換行與對齊。這次的重構不僅完美修復了行動端破版的問題,更讓我們的程式碼體系更符合現代網頁標準。
/* 桌機優先的寫死樣式,導致手機版出現水平捲軸與破版 */
.main-content-wrapper {
width: 800px; /* 致命的固定寬度 */
margin: 0 auto;
padding: 20px;
}
.route-options-list {
float: left; /* 老舊的浮動排版,難以控制響應式 */
width: 600px;
}
.side-panel {
float: right;
width: 200px;
}
/* 現代化的響應式流體佈局與 Flexbox 排版系統 */
.main-content-wrapper {
max-width: 800px;
width: 100%; /* 確保在小螢幕上自適應縮放 */
margin: 0 auto;
padding: 20px;
box-sizing: border-box; /* 確保 padding 不撐破容器 */
}
.layout-container {
display: flex; /* 啟用 Flexbox */
flex-wrap: wrap; /* 允許空間不足時自動換行 */
gap: 20px;
}
.route-options-list {
flex: 3 1 300px; /* 彈性增長,最小寬度為 300px */
}
.side-panel {
flex: 1 1 200px;
}