在使用 Next.js 搭配 next/image 與 react-fast-marquee 或自製跑馬燈動畫時,我遇到了一個難以捉摸的問題:圖片偶爾會「突然消失」,但只要滑鼠一動或按個鍵盤,它們又會神奇地出現。
這讓我一度以為是動畫套件的 bug、載入順序的問題,甚至懷疑是不是 React hydration 對不上。但最後真正的關鍵,其實是一組 CSS。
問題
圖片在畫面上滑動一段距離後會突然消失。
重新整理頁面可能會好,但也可能又發生。
滑鼠一移動、畫面有 reflow,圖片馬上又顯示出來。
嘗試過的解法
✅ 圖片全部 preload 再開始動畫
✅ next/image 加上 priority or loading=”eager”
✅ GPU 加速 (transform: translateZ(0))
✅ 調整速度、圖片尺寸
…都沒解決。
最終成功的 CSS 解法
這組 CSS 讓我完全解決了圖片消失問題:
1 | .marquee img { |
為什麼有效?
width: 100%:確保圖片不會受到 Image 預設 inline style 影響(有時會設定寬度為 auto)
object-fit: contain:避免圖片拉伸
position: relative:避免瀏覽器優化或 layout 渲染失敗造成跳格
height: unset:解除 next/image 自動插入的 height 限制
這一組樣式成功避免了圖片在動畫過程中被「判定為不需要顯示」而被瀏覽器優化掉的問題。
結語
這是一個非常難 debug 的問題,因為它不是 100% 重現。若你也在做圖片輪播或跑馬燈時遇到「消失」或「閃爍」問題,可以試試這組 CSS,也許會像我一樣被救了一命。