0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的アドカレAdvent Calendar 2024

Day 9

MUIのTimelineコンポーネントで縦方向のタイムラインUIを作ってみる

Posted at

はじめに

タイムラインUIの作成方法を調べていたところ、MUIで Timeline コンポーネントがあったので。こちらを使用し縦方向のタイムラインUIを実装してみました。

環境

  • react: 18.3.1
  • vite: 5.4.8

ゴール

次のようなタイムラインUIを作成する

image.png

インストール

npm install @mui/material @mui/lab @emotion/react @emotion/styled

タイムラインの作成

タイムラインUIを作成します。詳細はコメントアウトの通りです。

App.jsx
import Timeline from '@mui/lab/Timeline';
import TimelineItem from '@mui/lab/TimelineItem';
import TimelineSeparator from '@mui/lab/TimelineSeparator';
import TimelineConnector from '@mui/lab/TimelineConnector';
import TimelineContent from '@mui/lab/TimelineContent';
import TimelineDot from '@mui/lab/TimelineDot';
import TimelineOppositeContent from '@mui/lab/TimelineOppositeContent';
import { Typography, Paper } from '@mui/material';

// サンプルデータ
const timelineItems = [
  {
    year: '2024',
    title: 'サンプル1',
    description: 'テキスト テキスト テキスト',
  },
  {
    year: '2023',
    title: 'サンプル2',
    description: 'テキスト テキスト テキスト',
  },
  {
    year: '2022',
    title: 'サンプル3',
    description: 'テキスト テキスト テキスト',
  },
  {
    year: '2021',
    title: 'サンプル4',
    description: 'テキスト テキスト テキスト',
  },
];

export default function App() {
  return (
    <div style={{width:'50%', margin: '0 auto'}}>
        <Timeline position="alternate">
          {timelineItems.map((item, index) => (
            <TimelineItem key={item.year}>
              {/* 年を表示 */}
              <TimelineOppositeContent>
                <Typography variant="h6" component="span">
                  {item.year}
                </Typography>
              </TimelineOppositeContent>
              {/* 中央の点と線 */}
              <TimelineSeparator>
                <TimelineDot color="primary" />
                {index !== timelineItems.length - 1 && <TimelineConnector />}
              </TimelineSeparator>
              {/* カード風のUI */}
              <TimelineContent>
                <Paper elevation={3} sx={{ p: 2 }}>
                  {/* タイトル */}
                  <Typography variant="h6" component="span">
                    {item.title}
                  </Typography>
                  {/* 説明文 */}
                  <Typography>{item.description}</Typography>
                </Paper>
              </TimelineContent>
            </TimelineItem>
          ))}
        </Timeline>
    </div>
  );
}

動作確認

サーバを起動してUIを確認します。

npm run dev

カード風のUIをタイムラインが作成されてることを確認できました。

image.png

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?