iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
Vibe Coding

看得懂、叫得出、驗得過:30 天 VibeCoding UI 元件實戰系列 第 28 篇

Day 28|圖片要展示、選擇、輪播還是放大?七種媒體元件怎麼分工

  • 分享至 

  • xImage
  •  

安安~我是ChiYu~

從 Data Table 進入一筆活動專案後,詳細頁要放六張場地照片和一段教學影片。我把需求交給 AI:

做一個有圖片輪播和影片的漂亮產品頁。

下面是依照第一版需求重建的錯誤現場。畫面使用虛構活動資料與示意媒體,不含真實活動照片或個資:

六張場地照自動輪播,卻缺少暫停控制與可靠的媒體替代路徑

圖 1:六張場地照被塞進自動輪播,但沒有暫停控制;圖片失敗只剩「活動圖片」,關閉 Lightbox 後焦點還回到頁首。三項故障演練,三項都沒通過。

AI 很快做出一個 Hero Carousel。它每五秒自動換圖,有淡入淡出動畫,標題還壓在照片上,品牌感直接拉滿。

控制權則差不多歸零。

我把圖片暫時關掉,替代文字只剩「活動圖片」,完全看不出入口在哪裡,更別說右側有無障礙坡道。接著拿走滑鼠,只用鍵盤操作;Carousel 沒有暫停按鈕,Lightbox 關閉後,焦點還直接飛回頁面最上方。

這個畫面第一眼確實好看,但 Vibe Coding 不能停在第一眼。今天不從「要不要做輪播」開始,而是先做三次故障演練:

  1. 關掉圖片。
  2. 拿走滑鼠。
  3. 停止所有自動播放。

Image、Thumbnail、Gallery、Carousel、Lightbox、Video Player 與 Aspect Ratio 都要在這三關裡說明自己的責任。

完整 Demo 與選型流程整理在 Vibe UI Atlas 的媒體元件比較頁。

三次故障演練,比第一張漂亮截圖更有用

第一關,圖片不見了。必要資訊應該仍能被理解,但「活動圖片」只說明檔案類型,沒有說明照片在這段內容裡負責什麼。

第二關,不用滑鼠。我應該能選圖、開啟大圖、暫停輪播並回到原本位置;第一版卻沒有暫停控制,Lightbox 關閉後也弄丟觸發來源。

第三關,禁止自動播放。六張場地照片仍然要容易找到,教學影片則由使用者自行開始。若關掉動畫後,整個媒體區就失去閱讀順序,代表設計一直靠動態效果替內容帶路。

故障條件 第一版結果 修正時要補什麼
圖片無法載入 只剩「活動圖片」 依內容目的撰寫替代文字,必要資訊不能消失
只用鍵盤 Carousel 無法暫停,Lightbox 關閉後焦點回頁首 所有控制可聚焦,關閉後焦點回原縮圖
關閉自動播放 媒體閱讀順序不清楚 讓照片能直接選擇,影片由使用者主動開始

這三關會一路當作選型標準。媒體元件不是把畫面填滿就交差;內容目的、操作控制、網路成本與故障後的替代路徑都得留下來。

七種媒體責任,不是在搶同一個位置

使用者正在做什麼 適合的元件 元件責任
閱讀一張有內容目的的圖片 Image 傳遞照片本身的資訊
用小圖選擇或預覽媒體 Thumbnail 提供可辨識的媒體入口
主動瀏覽一組相關媒體 Gallery 讓所有項目可以直接到達
在有限空間輪流呈現部分內容 Carousel 管理切換、位置與播放控制
放大並專心檢視一張媒體 Lightbox 提供完整 Dialog 流程
操作有時間軸的影音 Video Player 處理播放、聲音、字幕與時間
穩定媒體空間與裁切方式 Aspect Ratio 約束比例並減少版面跳動

Image、Thumbnail 與 Aspect Ratio 常被組進其他元件;Gallery 可以搭配 Thumbnail 和 Lightbox;Video Player 則有自己的時間軸與控制。它們可以合作,但每多包一層,就多一段焦點、載入、失敗與返回路徑要驗收。

Image:替代文字要說入口與坡道,不是回報「這是圖片」

Image 可能是內容、功能、裝飾或複雜資訊。替代文字要根據它在當下的目的來寫,不能只把檔名換成人話,也不是每張後面都補上「圖片」兩個字。

Image:場地入口與無障礙坡道是這張圖要提供的資訊

圖 2:場地入口位於畫面中央,右側設有無障礙坡道;這兩項是圖片需要傳遞的資訊。

這張圖適合使用「活動場地入口,右側設有無障礙坡道」之類的替代文字。附近若已經有完全相同的說明,就不必再朗讀一次;圖片若純粹裝飾,也應使用空替代文字,不要硬替背景編故事。

W3C 的圖片技巧提供一個很好用的判斷:想像你正在電話裡把頁面念給另一個人聽。理解這一段時,你會怎麼描述圖片?如果完全不需要提到它,它很可能只是裝飾。

圖片政策還包括尺寸、格式與載入時機

替代文字正確,不代表媒體交付就結束。正式產品還要處理:

  • 使用 srcset、sizes 或圖片服務,避免 360px 手機下載桌面 Hero 原圖。
  • 為非首屏圖片採用合理 Lazy Loading,但首屏關鍵圖片不能因延遲載入留下長時間空白。
  • 寫入寬高或使用 Aspect Ratio,減少圖片載入前後的版面位移。
  • 依內容使用適合格式與壓縮,不能為了畫質讓六張照片一起拖慢整頁。
  • 圖片失敗時保留 Caption、替代文字與重試方式,而不是只留破圖圖示。

效能不是媒體文章旁邊的另一門課。圖片晚五秒才出現、版面一直跳,使用者一樣無法順利完成查看場地的任務。

查看 Image 元件頁

Thumbnail:縮圖是選擇入口,藍色外框不能獨自報到

Thumbnail 用較小畫面幫助選擇或預覽媒體,常出現在檔案預覽、商品圖與 Gallery 導覽。使用者仍要認得每個選項;把原圖縮到所有細節集體請假,沒有完成預覽任務。

Thumbnail:三張縮圖有目前選取狀態與文字名稱

圖 3:入口、舞台與座位各有文字名稱,目前選取項目也有可辨識狀態。

縮圖被選取時,不能只多一圈藍框;文字與程式可辨識的狀態要同步。它可能是一組具有目前項目的 Tabs、單選控制,也可能是使用 aria-pressed 的 Toggle Button,語意要跟實際行為一致。Thumbnail 若只負責開啟大圖,它就是 Button,名稱要說明準備開啟哪張圖片。

縮圖還要保留足以辨識主體的裁切。入口照片若被裁到只剩牆面,再清楚的「入口」文字也會讓視覺預覽失去價值。縮圖的任務是幫忙選,不是考眼力。

查看 Thumbnail 元件頁

Gallery:六張場地照片都重要,就讓使用者直接選

Gallery 是一組彼此相關的圖片或媒體。所有項目通常都能直接到達,使用者不必等自動播放慢慢輪到下一張。

Gallery:入口、舞台與座位可以直接選擇

圖 4:Gallery 將入口、舞台與座位列成可直接選擇的項目,主畫面同步顯示目前照片。

我實際切換三個項目後,照片、Caption 與目前選取狀態會一起更新。這條路徑適合讓參加者主動查看場地細節,也直接通過「關閉自動播放」這一關。

Gallery 若會更新 URL 或支援分享單張圖片,要先決定重新整理與瀏覽器返回行為;若不需要深層連結,也至少要讓目前項目在切換後仍可被察覺。六張照片只需要排成響應式網格時,甚至可以停在更簡單的 Gallery。效果少一點,照片不會因此辭職。

查看 Gallery 元件頁

Carousel:節省首屏空間,也會把內容藏到第二張以後

Carousel 一次只顯示部分內容,再透過前後控制或自動播放切換。它能節省首屏空間,代價是後面的項目比較不容易被看見。

Carousel:目前張數、前後切換與自動播放狀態都可見

圖 5:Carousel 顯示目前位置、上一張、下一張,以及自動播放的暫停或重新開始。

如果重要資訊藏在第二張以後,我會先問它是不是該改用 Gallery。Carousel 確實有空間限制時,至少要交付:

  • 上一張、下一張與目前位置。
  • 自動播放的暫停與重新開始。
  • 鍵盤可操作的控制項。
  • 切換後可被察覺的標題與 Caption。
  • 焦點進入、滑鼠停留或使用者偏好減少動態時的播放政策。

W3C 的 Carousel 結構教學建議把輪播視為有名稱的內容區域,項目仍保留適合的清單、文章與標題結構。W3C APG 的 Carousel Pattern也要求自動輪播能被停止;鍵盤焦點進入或滑鼠停留時應停止,除非使用者明確要求,不要自己重新開始追著人換畫面。

prefers-reduced-motion 可以減少動畫,不等於畫面上的暫停按鈕可以下班。使用者仍然需要直接掌握播放狀態。

LumenDesk 的六張場地照片都值得直接瀏覽,所以 Carousel 沒有繼續當主角。網站保留 Demo,是為了說清楚真的需要輪播時要交付哪些控制,不代表每一頁都得把它用上。

查看 Carousel 元件頁

Lightbox:點圖放大只是開場,焦點還得走完整個 Dialog 流程

Lightbox 把圖片放到前景,讓使用者專心檢視。它常被實作成 Modal Dialog;若採用 Modal,點圖變大只是第一個動作,後面還有背景不可操作、焦點進入、前後切換、離開與歸還。

Lightbox:從縮圖開啟大圖,保留標題、位置與關閉按鈕

圖 6:Lightbox 開啟後提供大圖、標題、位置與關閉操作;關閉後應回到原本 Thumbnail。

焦點進入 Lightbox 後,背景不能繼續被鍵盤操作;Escape 與關閉按鈕都要能離開;關閉後,焦點回到剛才開啟大圖的 Thumbnail。第一版焦點跑回頁首,就是這條流程沒有收完整。

切到下一張大圖時,也要更新圖片名稱、位置與 Caption;原縮圖若因篩選或資料更新已經消失,關閉後則要把焦點移到 Gallery 的合理位置,不能硬找一個不存在的元素。

W3C APG 的 Modal Dialog Pattern提供焦點進入、循環與返回觸發點的基本規則。Lightbox 再漂亮,也不能跳過這份 Dialog 工作。

查看 Lightbox 元件頁

Video Player:影片有時間軸,播放以外還要把控制交回來

Video Player 至少要處理播放、暫停、音量、時間、字幕與全螢幕。影片若是完成任務的必要內容,還要考慮逐字稿或音訊描述。

Video Player:播放與字幕是明確控制,不靠點擊整張畫面猜測

圖 7:Video Player 顯示播放、時間與字幕等控制,影片不會自動以聲音開始。

LumenDesk 不自動播放有聲影片。就算靜音自動播放在技術上可行,也得考慮注意力、行動網路與使用者可能錯過內容開頭。MDN 的 WebVTT API說明瀏覽器如何處理時間同步文字軌;字幕、逐字稿與需要時的音訊描述,都要拿實際內容驗證,不能在按鈕上寫了「字幕」就當整部影片已經交卷。

正式驗收至少要確認:

  • 字幕和語音時間同步,說話者與重要聲音有適當標示。
  • 鍵盤能操作播放、暫停、音量、字幕與全螢幕。
  • 全螢幕關閉後焦點回到原本控制。
  • 影片失敗時顯示原因、重試與替代連結。
  • 逐字稿能被搜尋、複製,並與影片內容保持一致。

只留下黑色長方形,使用者連這是載入失敗還是導演風格都不知道。

查看 Video Player 元件頁

Aspect Ratio:先穩住媒體空間,別順便裁掉內容重點

Aspect Ratio 不是使用者直接操作的媒體元件,而是版面與 CSS 層的約束工具。它用來固定媒體容器比例,例如 16:9 影片、4:3 簡報或 1:1 Avatar;媒體載入前先保留空間,可以減少版面突然跳動。

Aspect Ratio:16:9 容器保留場地入口的重點

圖 8:16:9 媒體容器預留穩定空間,裁切後仍保留入口與右側坡道。

固定比例不代表所有圖片都用同一種方式裁切。人像、海報與場地照片的重點不同;使用 cover 時要定義焦點位置,避免人物臉部、海報文字或重要指示被整齊地切出畫面。

不同斷點也可以使用不同 Crop 或 Art Direction。桌面 16:9 能容納入口與坡道,手機狹長版可能需要另一張裁切;這不是多傳一張圖就結束,兩個版本仍要保留相同資訊目的與替代文字策略。

查看 Aspect Ratio 元件頁

媒體選型:先問內容目的,再決定要不要動起來

Image、Gallery、Carousel、Lightbox 與 Video Player 的媒體選擇流程

圖 9:依媒體目的選擇 Image、Thumbnail、Gallery、Carousel、Lightbox、Video Player 或 Aspect Ratio。

問題 比較適合
只需要一張有內容目的的圖片 Image
需要用小圖選擇或預覽 Thumbnail
所有媒體都值得直接瀏覽 Gallery
空間有限、能接受部分內容先被藏起 Carousel
需要放大或專心檢視一張媒體 Lightbox
使用者要控制有時間軸的影音 Video Player
需要穩定媒體空間與裁切規則 Aspect Ratio

LumenDesk 的答案是 Gallery 搭配 Thumbnail,需要放大時再開 Lightbox;Image 與 Aspect Ratio 分別照顧內容和版型,教學影片交給 Video Player。Carousel 被排除,因為六張場地照片沒有哪一張應該等五秒才輪得到。

改寫 Prompt:照片之外,媒體政策也要一起交付

請為 LumenDesk 活動頁建立場地媒體區。

- 使用 Gallery 顯示入口、舞台與座位照片,所有照片都能直接選擇,不使用自動輪播。
- 每張圖片依內容目的撰寫替代文字;場地入口照片要提到右側無障礙坡道,裝飾背景使用空替代文字。
- 使用響應式圖片來源,避免手機下載桌面原圖;保留寬高或 Aspect Ratio,減少版面位移。
- Thumbnail 顯示文字名稱與目前選取狀態,不能只靠藍色外框。
- 點擊 Thumbnail 開啟 Modal Lightbox;焦點進入 Dialog,Escape 可關閉,關閉後回到原 Thumbnail。
- 教學影片不自動播放聲音,提供播放、暫停、音量、字幕、時間、全螢幕與逐字稿。
- 圖片與影片失敗時顯示替代內容、原因與重試方式。
- 尊重 prefers-reduced-motion;360px 控制項可換行、觸控範圍足夠,重要內容不能因裁切消失。

這份 Prompt 沒有規定淡入淡出要幾毫秒。它先鎖定所有照片是否找得到、圖片失敗後留下什麼、焦點回哪裡、影片由誰開始,以及行動網路要下載多少資料。

再跑三次故障演練:能操作,不代表所有驗證都結束

交付前,我會重新跑一次:

  1. 關掉圖片,確認必要資訊、Caption 與替代文字仍在。
  2. 不用滑鼠,確認 Thumbnail、Gallery、Lightbox 與 Video Player 都能操作,關閉後焦點回到原處。
  3. 關閉自動播放與減少動態效果,確認照片仍容易找到,影片能由使用者主動開始、暫停並知道目前位置。
  4. 模擬慢速與載入失敗,確認版面不亂跳、媒體不重複下載,失敗後仍有替代路徑。

目前 Gallery 的選取切換、圖片失敗情境、鍵盤操作與關閉自動播放已納入 Demo;第一版兩個明確問題也有對應修正:Carousel 具備停止控制,Lightbox 關閉後回到原 Thumbnail。

尚未完成的驗證也要說清楚:實際字幕檔、逐字稿、prefers-reduced-motion 完整結果、觸控裝置,以及不同網路條件下的媒體效能仍待發布前複驗。不能因為桌面版按鈕都能點,就把媒體體驗整包宣布過關。

元件介紹告一段落,明天回頭驗收第一句模糊 Prompt

開頭那個每五秒換圖的 Hero Carousel 最後退出主要場地資訊。六張照片改由 Gallery 直接選擇,Thumbnail 負責入口,Lightbox 完成放大與焦點返回,Video Player 則把播放權交還給使用者。

到這裡,資料已經有容器、小型標記、表格與媒體。只是把它們重新裝回同一個產品頁,AI 很可能又回到第一天的老方法:先交出一張很像成品的畫面,互動能不能用則等你自己發現。

我回頭拿出第一天那句 Prompt:

幫我做一個現代、漂亮、好用的工作區成員管理後台。

接著在搜尋框輸入 Orbit。

搜尋框已輸入 Orbit,三筆不相符的成員資料卻仍留在清單

圖 10:搜尋框收下 Orbit,Aurora、Nimbus 與 Solace 卻一筆都沒離開;篩選沒有條件,停用也沒有取消流程,90 秒任務卡直接得到 0/3。

一張圖把這 28 天繞過的坑又集合回來了,效率高得讓人有點哭笑不得。明天不再增加新元件,而是沿用相同資料與任務,重新驗收前後兩個版本。

這一次,先不看它漂不漂亮。

參考來源

資料查閱:2026-08-07。


上一篇
Day 27|Table 不是 Data Table:功能越多,不代表資料越好用
下一篇
Day 29|同一句「幫我做後台」,28 天後我不再先看畫面
系列文
看得懂、叫得出、驗得過:30 天 VibeCoding UI 元件實戰 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言