オープンソース · 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 の色を自動計算します。色配列の管理は不要です。

端ごとのステートマシン

各ビューポート端で3つの状態から1つを選択します。あなたが持つ sticky ヘッダー/フッターに委ねる、Safari のネイティブサンプリングが正しいときは退く、誤った色になる場合のみ着色する、の3つです。

オーバースクロールとグラデーション処理

グラデーションを chrome まで延長し、`<html>``<body>``body::before` を同時に上書きすることで、iOS のラバーバンドオーバースクロールも同じ色に。ページ末尾で背景が漏れません。

フレームワーク非依存 + Tailwind

import 一行であらゆるフレームワークから利用でき、SPA のページ遷移用に `onPageLoad` フックも用意。Tailwind プラグインと `.bleedblend-top` / `.bleedblend-bottom` クラスも同梱——これは自分の sticky ヘッダーやフッターに chrome を「意図して」着色させるためのレシピで、Safari ファミリー全体で機能します。

導入方法

npmから `bleedblend` をインストール(またはソースをコピー)し、ビューポートのメタを `viewport-fit=cover` に設定して、エントリーポイントに `import 'bleedblend/auto'` を追加するだけ。この一行が導入のすべてです。セクションセレクタやページ遷移フックをカスタマイズしたい場合は `bleedblend/utils``createBleedblendAuto()` を使います。