WebKitのブログに、Safariの新しいバージョンで入った変更をまとめた記事が出た。日付は9月17日。冒頭に置かれているのは新機能の一覧ではなく、今回いちばん大きな機能は機能ではない、という一文だった。1年かけて既存機能の不具合を844件直した、という話が中心に据えられている。6月の開発者向けイベントの時点では525件と発表していたので、そこからさらに6割ほど積み増したことになる。
修正はいくつかの筋に整理されている。ひとつは互換性で、特定のサイトでヒンディー語の入力が正しく通らない、検索結果から画像が消える、といった個別の不具合を地道に潰していったもの。もうひとつは土台の作り直しで、JavaScriptのモジュール読み込み処理を新しく書き直し、CSSのzoomも作り直し、行内要素の配置をサブピクセル単位で行うようにしたという。深掘りの筋ではSVGだけで66件の修正が入り、SMILアニメーションの実装は端から端まで見直された。表組みの絶対配置まわりや、HTTPキャッシュがCache-Controlの指定にきちんと従うかどうかといった、仕様との食い違いを詰める作業も含まれている。
目を引いたのは、組み合わせという括りがあることだ。-webkit-line-clampがWebKitに入ったのは2010年、text-wrap: balanceは2024年で、どちらも単体では問題なく動く。ところが同じ要素に両方を指定すると、行のバランス調整のほうが効かなくなっていたという。それが今回直った。単体では再現せず、組み合わせたときだけ崩れる。制作の現場で原因の切り分けにいちばん時間を取られるのは、だいたいこの種類の不具合ではないだろうか。
読んでいる位置が飛ばなくなる
新しく入った機能のなかで、既存のサイトにそのまま効きそうなのがスクロールアンカリングだ。記事を読んでいる途中で、いま見ている位置より上に画像や広告、コメントが遅れて読み込まれると、読んでいた部分が下に押し出されて画面が急に飛ぶ。よくある挙動だが、読み手にとっては行き先を見失う原因になる。新しいSafariはこの場合にスクロール位置のほうを自動で調整し、読んでいた場所を画面上の同じところに保つ。制作側で何かを書き足す必要はなく、既定で有効になっている。挙動を切りたい箇所だけ、overflow-anchorというCSSプロパティにnoneを指定する形だ。
ブラウザの更新というと、新しい書き方が使えるようになったかどうかに目が行きやすい。ただ、納品してしばらく経ったサイトの表示が、こちらが何もしなくても静かに正しくなっていくというのは、保守を抱える側にとっては地味に大きい。Safariでだけ表示が少しずれるという理由で回避策を入れた案件が手元にあるなら、新しい版で一度素の状態に戻して確かめてみる価値はある。回避策は放っておくと、いつのまにか誰も理由を説明できないコードになる。













