TODO: SkipNavigation

[CSS]iOS12 Safari で clip-path の transition が効かなくなっちゃった

iOS11 Safari までは問題なかったはずですが、iOS12 にアップデートしたら clip-path の css transition が効かなくなってしまいました。(途中のトランジションがなくて始点・終点でパッと切り替わるという状態)

どうやらプロパティの組み合わせによって効かなくなってしまう模様です。

組み合わせNGなプロパティ

  • transform: translate3d(x, y, z)
  • opacity
  • filter

思いつくままに試してみただけなので他にもありそうです。

transform: translate(x, y) の 2D のほうだと動きます。clip-path と一緒に x軸、y軸を動かしたいときはこちらを使うのがよいです。

opacity と併せて使いたいときはどうするべきか

クリップする要素を <div> で囲んでその要素に opacity をかけましょう。

サンプル

html
<body>
  <div class="outerBox"> <!-- ← opacityをかける要素 -->
    <div class="box">クリップされます</div> <!-- ← clip-pathをかける要素 -->
  </div>
</body>
css
.outerBox {
  transition: opacity 1s linear;
}
.outerBox.is-clipped {
  opacity: 0;
}
.box {
  clip-path: inset(0);
  -webkit-clip-path: inset(0);
  transition: 
    clip-path 1s ease-out,
    -webkit-clip-path 1s ease-out;
}
.box.is-clipped {
  clip-path: inset(0 0 0 100%);
  -webkit-clip-path: inset(0 0 0 100%);
}

あとはなにかしらのきっかけ(ボタンをクリックとかスクロールして viewport に入ってきたらとか)で .outerBox.box.is-clipped をつければ OK です。

お役立ち男

フロントエンド専門。フリーランスで10年以上活動しています。