限られたスペースに複数の情報を載せたい場合、非常に重宝するのがスライドショーとも呼ばれているカルーセルスライダーです。
JavaScriptで実装するのが一般的で「bxSlider」「slick」「Swiper」といったJSライブラリ (JSプラグイン) がよく利用されています。
しかし、これらのJSライブラリは多機能な反面、ファイルサイズが大きく、ウェブサイト内のごく限られた箇所にだけ使用したいといった場合には、利用しづらいのではないでしょうか?
そこで、今回はコピペできるCSSカルーセルスライダーを紹介します。
今回作る各種スライダー
カルーセルでないスライダー
まずは、とてもシンプルな、スクロールバーでスライドさせるスライダーを作ってみます。
scroll-snap-typeプロパティ、scroll-snap-alignプロパティを使用することで、内容部分にピタっと止まるようになります。場合によっては、これで十分なケースもあるかもしれません。
カルーセルスライダー
カルーセルでないスライダーとHTMLコードこそ同じですが、CSSコードはかなり複雑になります。
計算が必要になる箇所が多くあります。上記のコードは4つの内容を4秒ずつ表示させた場合です。
内容の数が増減したり、表示させる秒数を変更する場合には、その都度、計算する必要が出てくるので不便です。そこで、CSS変数 (CSSカスタムプロパティ) のvar関数とcalc関数を活用します。
このように設定することで、HTML側からの設定の変更も可能になり、アニメーションのバリエーションも簡単に増やすことができるようになります。
アニメーションのバリエーションをクラス毎にまとめれば、CSS側で一括管理もできます。
ちなみに、li.slide_content にCSS変数で番号を振ると、CSSコードの一部が簡略化できます。
コントロール付きカルーセルスライダー
ここまでで、無限に回り続けるカルーセルスライダーは作れましたが、内容をじっくり見たい (見せたい) 場合もありますよね。なので、アニメーションを無効化して、選択された内容が表示されるようにしてみます。
イメージとしては、input.slide_radio.unselect が checked のときにアニメーションが適用され、input.slide_radio.select が checked のとき、それに対応した内容が表示されるという感じになります。
これで、よく見るカルーセルスライダーの完成です。
使用する上での注意点としては、1つのページで複数のカルーセルスライダーを設置する場合、ラジオボタンに設定するname属性とid属性がページ上で重複しないようにする必要があります。
また、WordPressのクラシックエディタで使用する場合、自動でp要素を追加する機能により、正しく動作しない場合があります。
こういった場合は、the_contentフィルターフックで、余計なタグを除去する処理を追加すると良いです。
〆
JavaScriptが書ける人は、ラジオボタンなんか使わずに、JavaScriptで実装した方が楽です。でも、それ以外の部分はCSSでもいけますね。