有没有办法在 React 中使用 Material UI 实现水平时间轴?
Is there a way to implement horizontal timeline using Material UI in React?
我正在尝试在 React 中使用 Material UI 实现水平时间轴。在他们的文档中我只能找到垂直时间线演示,我找不到任何可以直接改变对齐方式的道具。有办法解决吗?
我想实现类似于下图的东西,但是是水平的。
您可以覆盖时间轴样式并执行如下操作:
const useStyles = makeStyles({
timeline: {
transform: "rotate(90deg)"
},
timelineContentContainer: {
textAlign: "left"
},
timelineContent: {
display: "inline-block",
transform: "rotate(-90deg)",
textAlign: "center",
minWidth: 50
},
timelineIcon: {
transform: "rotate(-90deg)"
}
});
function App() {
const classes = useStyles();
return (
<Timeline className={classes.timeline} align="alternate">
<TimelineItem>
<TimelineSeparator>
<CheckCircleOutlineIcon
color="primary"
className={classes.timelineIcon}
/>
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Eat</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<PauseCircleFilledIcon
color="primary"
className={classes.timelineIcon}
/>
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Code</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<CachedIcon color="primary" className={classes.timelineIcon} />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Sleep</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<CachedIcon color="primary" className={classes.timelineIcon} />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Repeat</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<ErrorIcon color="primary" className={classes.timelineIcon} />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Sleep</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
</Timeline>
);
}
如果标签不在同一高度,请调整 minWidth
。
结果如下所示:
使用这种方法会感到奇怪的一件事是视觉上最左边的元素是时间轴中的最后一个元素,因为旋转。
如果您愿意,可以使用步进器作为替代解决方案
我正在尝试在 React 中使用 Material UI 实现水平时间轴。在他们的文档中我只能找到垂直时间线演示,我找不到任何可以直接改变对齐方式的道具。有办法解决吗?
我想实现类似于下图的东西,但是是水平的。
您可以覆盖时间轴样式并执行如下操作:
const useStyles = makeStyles({
timeline: {
transform: "rotate(90deg)"
},
timelineContentContainer: {
textAlign: "left"
},
timelineContent: {
display: "inline-block",
transform: "rotate(-90deg)",
textAlign: "center",
minWidth: 50
},
timelineIcon: {
transform: "rotate(-90deg)"
}
});
function App() {
const classes = useStyles();
return (
<Timeline className={classes.timeline} align="alternate">
<TimelineItem>
<TimelineSeparator>
<CheckCircleOutlineIcon
color="primary"
className={classes.timelineIcon}
/>
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Eat</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<PauseCircleFilledIcon
color="primary"
className={classes.timelineIcon}
/>
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Code</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<CachedIcon color="primary" className={classes.timelineIcon} />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Sleep</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<CachedIcon color="primary" className={classes.timelineIcon} />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Repeat</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineSeparator>
<ErrorIcon color="primary" className={classes.timelineIcon} />
</TimelineSeparator>
<TimelineContent className={classes.timelineContentContainer}>
<Paper className={classes.timelineContent}>
<Typography>Sleep</Typography>
</Paper>
</TimelineContent>
</TimelineItem>
</Timeline>
);
}
如果标签不在同一高度,请调整 minWidth
。
结果如下所示:
使用这种方法会感到奇怪的一件事是视觉上最左边的元素是时间轴中的最后一个元素,因为旋转。
如果您愿意,可以使用步进器作为替代解决方案