20231006

/DESIGN

subgridがSafariで効かない

CSSのsubgridが主要ブラウザ全てでサポートされたということなので試してみたところ、Safari(17.0)でのみ何故か機能しない状況に陥ったため、検証してみた。

【追記 2024.04.24】この問題は、Safari Technology Preview 188にて修正済み。最新のSafari(17.4.1)で確認したところ、症状は出なくなっています。──

この時は、カードを3枚並べるようなよくある構成でテストしていた。
まずは普通にカード3枚の親となるノードでgridを構成して、各カードも「display: grid;」にして、subgridを効かせるために「grid-template-rows: subgrid;」を設定する。

subgridが効いて気持ちよく横並びの要素が揃ってくれる。順調だ。

ここで、今度は各カードの四隅を角マルにするために「border-radius: 12px;」を設定した。

当然それだけでは上部の写真部分のカドは四角のままなので、border-radiusによって丸まった輪郭の外は非表示にするために「overflow: hidden;」を設定する。

これで、Chrome、Firefox、Edgeでは想定通りの表示となって、角マルのカードが仕上がったのだが、Safariだけはここで問題が発生した。overflowを設定した途端、何故かsubgridが解除されてレイアウトが崩れてしまった。ブラウザのインスペクタで確認してみても、やはりsubgridが効いていない。

今は、原因がoverflowだと分かっているが、最初はSafariだけsubgridが効かない原因が不明で、スペルミスやgrid周りの設定の間違いやHTMLの構造の再チェックなど、随分と時間を費やして、ようやく “全く関係なさそうな” overflowを無効にしてみたところ、subgridが復活したのでこの部分が原因だと分かった。

CSSの仕様的に見ても、他のブラウザが正常に機能していることを考えても、overflowを適用するとsubgridが無効になってしまうという症状はSafari特有のバグと判断して良いだろう。

結果として、写真上部の角マルは、overflowに頼らずに写真ノードに対して「border-top-left-radius/border-top-right-radius」を適用することで解決している。overflowさえ使用しなければsubgridは問題なく機能して各カード内の要素の横並びは揃ってくれる。

思わぬところで足止めを食らったが、subgridはレイアウト効率を上げる便利な機能なので、今後は積極的に活用していきたい。そしてAppleには、早急にこのバグを修正したバージョンのSafariをリリースしてもらいたいものである。

Instagram