slick.jsで画像のカルーセルをつくるとき、decoding属性があると表示されなかった話

原因の究明も深追いもしていないので、こういう事例があるのだなーぐらいで読んでいただけると幸いです。

先日、カラーミーショップの簡易パフォーマンス改善を承り、画像の属性抜けを1つ1つ修正していました。

言わずもがなですが、img要素にwidth、height指定がなければCore Web VitalでCLSの問題が出がちですし、ファーストビュー以外の画像にはloading=lazyを指定してあげた方が良いです。

そして、トップページには上部にSlick.jsを用いた画像スライダーが配置されており、一度に複数枚表示するタイプでしたのでdecoding=asyncを指定することにしました。

カルーセルが消えた…?

画像の指定がすべて終わって表示を確認すると、おや不思議。トップに表示されるはずのスライダーがありません。

devツールで確認してみると、img要素は存在するもののなぜかheight:0 になっています。

decoding指定をやめてみると、きちんと表示され事なきを得ました。

ということは、デコードされる前の状態でslickが動作したため、要素の無い状態でカルーセルを作ってしまった => height: 0 ということでしょうか。憶測でしかありませんが。

CSSによるheight指定があれば防げたかも

限られた予算と時間 & 自分はslick.jsを使うことがない(大体swiper使う)、 ので追及しませんでしたが、CSSで予めカルーセルアイテムのサイズを指定しておけば、decodingありでも問題なく表示できたんじゃないかと予想されます。

css1行でできる、slick.jsのパフォーマンス改善

以前書いたブログのご紹介ですが、slick.jsに関してはcssを1行書き加えるだけで大きくパフォーマンスを改善することができます。

ご興味がありましたらご参考になさってください。 → 「css一行でできるCLS改善(slick.jsの場合)

タイトルとURLをコピーしました