🎠

MantineでCarouselについて触れてみた

2023/12/22に公開

はじめに

現在取り組んでいるプロジェクトで初めてCarouselを作ることになったので、
Mantineを使って簡単にCarouselを触れてみました。

概要

Mantine

https://mantine.dev/getting-started/

Mantineは、Reactをベースにした軽量なUIコンポーネントフレームワークです。 100種類以上のカスタマイズ可能なコンポーネントと50以上の便利なhooksが用意されています。


https://www.irasutoya.com/2013/12/blog-post_317.html
Carouselとは、回転台、回転木馬、回転コンベア、回転棚などの意味を持つ英単語のことです。
Webページにおいては、複数の画像などのコンテンツを左右に移動して切り替えられる領域を指します。
メリーゴーラウンドのように回転する動きからCarouselと呼ばれています。
https://mantine.dev/others/carousel/

Carouselは、Mantine UIライブラリの一部であり、Reactベースのウェブ開発において簡単に使用できるカルーセル(スライダー)コンポーネントです。
Carouselコンポーネントを使用することで、異なるコンテンツを視覚的に引き立てながら、効果的に表示することができます。

環境準備

yarn add embla-carousel-react@^7.3.2 @mantine/carousel

まずCarouselを使うためにインストール

使い方

page.tsx
import { Carousel } from '@mantine/carousel';

function page() {
  return (
    <Carousel
      withIndicators
      height={200}
      slideSize="33.333333%"
      slideGap="md"
      loop
      align="start"
      slidesToScroll={3}
    >
      <Carousel.Slide>1</Carousel.Slide>
      <Carousel.Slide>2</Carousel.Slide>
      <Carousel.Slide>3</Carousel.Slide>
      {/* ...カルーセルの追加*/}
    </Carousel>
  );
}

CarouselのコンポーネントにslideSizeとslideGapを設定し、
各スライドのサイズとギャップを制御します。

コンポーネント

Carouselにはコンポーネントに複数のpropsを設定することができます。

withIndicators

boolean
インジケーター(下に表示される点線)を表示するかどうかを決定します。デフォルトでは false

  • trueの場合
  • falseの場合

height

Height<string | number>
コンテナの高さを調整します

slideSize

StyleProp<string | number>
スライドの幅を制御します。デフォルトでは100%

slideGap

<MantineSpacing>
スライド間のギャップを設定する数値

loop

boolean
スライドの内容がループするのに十分でない場合は自動的にfalseに戻ります。
デフォルトではtrue

  • trueの場合
  • falseの場合

align

number|"center"|"end"|"start"
スライドをコンテナに対してどのように整列させるかを決定します。
0.5が50%で、デフォルトは"center"

  • center
  • end
  • start

slidesToScroll

number|"auto"
次/前ボタンでスクロールされるスライドの数。デフォルトでは1

上記のコードに載っていないのですが他のpropsも紹介します

dragFree

boolean
スクロール間で停止の設定する
デフォルトでは false

  • trueの場合
  • falseの場合

draggable

boolean
カルーセルがマウスやタッチ操作でスクロールできるかどうかを決定します。
デフォルトでは true

  • trueの場合
  • falseの場合

使用例

https://mantine.dev/core/paper/

page.tsx
import { Carousel } from "@mantine/carousel";
import { Paper } from "@mantine/core";

export const CarouselComponent = () => {
 const colorList = ["red", "blue", "lime", "orange", "pink", "skyblue"];

 return (
   <Carousel
     slideSize="40%"
     breakpoints={[{ maxWidth: "sm", slideSize: "100%", slideGap: 2 }]}
     slideGap="xl"
     align="start"
   >
     {colorList.map((color) => {
       return (
         <Carousel.Slide key={color}>
           <Paper
             p="xl"
             m="sm"
             radius="md"
             sx={{ backgroundColor: color }}
             style={{ height: "200px" }}
           />
         </Carousel.Slide>
       );
     })}
   </Carousel>
 );

Mantine/coreにあるPaperをインポートし、
Carouselと一緒にを表示してみました。

page.tsx
{colorList.map((color) => {
 return (
   <Carousel.Slide key={color}>
     <Paper
       p="xl"
       m="sm"
       radius="md"
       sx={{ backgroundColor: color }}
       style={{ height: "200px" }}
     />
   </Carousel.Slide>
 );
})}


配列colorListの各色をCarousel.Slide内でPaperコンポーネントのbackgroundColorとして使用され、
各スライドの背景色として表示されます。

まとめ

  • Carouselを使うことでコンテンツの切り替えが滑らかで視覚的に魅力的になる
  • Mantine UIの一部であるため、他のMantineコンポーネントとの統合がスムーズになり、一貫性のあるデザインやスタイルを保ちながら、ウェブアプリケーションやサイトにカルーセルを容易に組み込むことができる。
めがね〜ず

Discussion