開源專案 · MIT 授權 · Safari 家族

bleedblend

**零設定的 Safari chrome 著色,橫跨 iPhone、iPad、Mac。**

一次 import,就讓 Safari 的狀態列與網址列在每個視窗邊緣都與頁面內容同色:漸層、不透明區塊、橡皮筋回彈全自動處理,不必再手動調 theme-color,也不用設定任何著色參數。bleedblend 馴服的是 Safari 原生的染色,不是另外畫一層;而 Safari 26 的 Liquid Glass 讓這套染色橫跨 iPhone、iPad、Mac,所以同一份頁面結構在整個 Safari 家族都可預測:iOS 主動擺平怪癖,Mac 因模型已統一而直接生效。

運作原理

1.

面臨問題

Safari 26 會用「視窗邊緣剛好有什麼」來決定 chrome(狀態列與網址列)的顏色,這套模型橫跨 iPhone、iPad 與 Mac。但規則既隱晦又沒文件,還會隨版本改變,而在 iPhone 與 iPad 上最為棘手:漸層會留下明顯接縫、精簡分頁列會讓著色偏移約 30px、橡皮筋回彈會露出錯誤的背景色,而 `theme-color` 在 iOS 26 上根本被忽略。

2.

解決方法

只要加上一次 `import 'bleedblend/auto'`。bleedblend 會監看 scroll、resize 與 visualViewport 事件,針對每個視窗邊緣判斷該退場讓 Safari 自然取樣,還是補上一小塊正確顏色的著色,並直接從頁面讀取漸層色標,不需手動維護色標陣列。

3.

最終效果

狀態列與網址列與頁面完美同步:漸層會延伸進 chrome、頁尾顏色在頁面底端接手,連 iOS 橡皮筋回彈露出的區域也染成同色,不再漏出你的備援背景。

主要功能

零設定自動偵測

`import 'bleedblend/auto'` 就是全部 API。它會從 `body::before``body``<html>` 讀出漸層色標,自動算出每個邊緣該用的 chrome 顏色,不必維護任何色標陣列。

依邊緣判斷的狀態機

針對每個視窗邊緣在三種狀態間擇一:交給你自己的 sticky 頁首/頁尾、在 Safari 原生取樣已正確時退場、或只在邊緣會著錯色時才補上著色。

回彈與漸層處理

把漸層延伸進 chrome,並同時覆寫 `<html>``<body>``body::before`,讓 iOS 橡皮筋回彈染成同色,頁面底端不再漏色。

框架無關 + Tailwind

一次 import 即可在任何框架使用,並提供 `onPageLoad` hook 因應 SPA 頁面轉場。另附 Tailwind 外掛與 `.bleedblend-top` / `.bleedblend-bottom`,這正是讓你自己的 sticky 頁首或頁尾「主動」把 chrome 染色的配方,橫跨整個 Safari 家族。

開始使用

從 npm 安裝 `bleedblend`(或直接把原始碼複製進專案),把網頁 viewport meta 設為 `viewport-fit=cover`,再於進入點加上 `import 'bleedblend/auto'`,這一行就是全部設定。需要自訂 section 選擇器或頁面轉場 hook,再改用 `bleedblend/utils``createBleedblendAuto()`