Keen-Slider でレスポンシブに対応する


こんにちは、上條(mk-0A0)です。

先日スライダーの実装に Keen-Slider を使ったのですが、その際にレスポンシブってどうやるんだ…?となったので、試したことを書こうと思います。

Keen-Slider とは

スライダーを実装できるライブラリです。
JavaScript や React はもちろん、Vue, Angular にも対応しています。
そして依存関係が無いため 5.5KB と軽量なのも嬉しいところです。

公式通りに実装する

React の導入手順で実装してみます。

import { useKeenSlider } from 'keen-slider/react'
import 'keen-slider/keen-slider.min.css'

const KeenSlider = () => {
  const [sliderRef] = useKeenSlider({
    slides: {
      spacing: 50,
    },
  })

  return (
    <ul ref={sliderRef} className="keen-slider">
      {Array(...Array(6)).map((_, index) => (
        <li className="keen-slider__slide">
          {index}
        </li>
      ))}
    </ul>
  )
}

export default KeenSlider

keen-slider/keen-slider.min.css を読み込み、スライダーのコンテナ(ul)に keen-slider クラス、スライダー本体(li)に keen-slider__slide クラスを付与します。
そして Keen-Slider で用意されている useKeenSlider フックからコールバック関数 sliderRef を呼び出し、コンテナである ul の ref 属性に指定することで動作します。

スライダーのレイアウトは useKeenSlider の第一引数で設定できます。
今回はレスポンシブ対応として PC と SP でスライダー間の余白を変えたいので、slides: {spacing: 50} として余白を設定しました。

この段階ではまだレスポンシブに対応していません。

試したこと

SP では余白を狭めたかったので、useKeenSliderslides は削除してCSS で指定してみました。

.keen-slider {
    gap: 50px;
}

@media screen and (max-width: 768px) {
    .keen-slider {
        gap: 10px;
    }
}

意図通りになっています。
しかし、CSS に頼らず Keen-Slider の機能を使う方がリーダブルになります。

解決方法

useKeenSliderbreakpoints という props を使ってレスポンシブ対応する方法がありました。
公式の Examples に従って記述すると以下のようになります。( CSS は全て削除します。)

  const [sliderRef] = useKeenSlider({
    slides: {
      spacing: 50,
    },
    breakpoints: {
      '(max-width: 768px)': {
        slides: {
          spacing: 10,
        },
      },
    },
  })

breakpoints により、CSS 指定時と同様の挙動のまま意図通りの挙動になりました!

まとめ

はじめはレスポンシブに対応するには CSS を使うしか無いかと思っていましたが、breakpoints を使うことでリーダブルに実装できました。
実装の参考になれば幸いです。

Gaji-Labo は Next.js 開発の実績と知見があります

フロントエンド開発の専門家である私たちが御社の開発チームに入ることで、バックエンドも含めた全体の開発効率が上がります。

「既存のサイトを Next.js に移行したい」
「人手が足りず信頼できるエンジニアを探している」
「自分たちで手を付けてみたがいまいち上手くいかない」

フロントエンド開発に関わるお困りごとがあれば、まずは一度お気軽に Gaji-Labo にご相談ください。

オンラインでのヒアリングとフルリモートでのプロセス支援にも対応しています。

フロントエンドの相談をする!

投稿者 Kamijo Momoka

フロントエンドエンジニア。
HTML/CSS/JavaScript/WordPressでのサイト制作からNext.js/TypeScriptなどを使ったWebアプリ開発、FigmaでのUIデザインまで広く経験しています。 デザインエンジニアと名乗るのが夢です。