<a href="https://5f985eb478dcb00022cfd60e-hqwgomhkqw.chromatic.com/?path=/story/example-vertical--vertical-basic" target="_blank"><img src="https://raw.githubusercontent.com/storybooks/brand/master/badge/badge-storybook.svg"></a>
// install with yarn yarn add react-chrono // or with npm npm install react-chrono
Please make sure you wrap the component in a container that has a width and height.
When no mode is specified, the component defaults to HORIZONTAL mode. Please check props for all the available options.
import React from "react" import { Chrono } from "react-chrono"; const Home = () => { const items = [{ title: "May 1940", cardTitle: "Dunkirk", url: "http://www.history.com", cardSubtitle:"Men of the British Expeditionary Force (BEF) wade out to..", cardDetailedText: "Men of the British Expeditionary Force (BEF) wade out to..", media: { type: "IMAGE", source: { url: "http://someurl/image.jpg" } } }, ...]; return ( <div style={{ width: "500px", height: "400px" }}> <Chrono items={items} /> </div> ) }

To render the timeline vertically use the VERTICAL mode
<div style={{ width: '500px', height: '950px' }}> <Chrono items={items} mode="VERTICAL" /> </div>

In VERTICAL_ALTERNATING mode the timeline is rendered vertically with cards alternating between left and right side.
<div style={{ width: '500px', height: '950px' }}> <Chrono items={items} mode="VERTICAL_ALTERNATING" /> </div>

Below are the available configuration options for the component:
| Name | Default | Description |
|---|---|---|
| activeItemIndex | 0 | Selects the active timeline item when loading. |
| allowDynamicUpdate | false | Enables or disables dynamic updates of timeline items. |
| borderLessCards | false | Removes borders and shadows from the timeline cards. |
| buttonTexts | Customizes the alternative text for all buttons. | |
| cardHeight | 200 | Defines the minimum height of timeline cards. |
| cardLess | false | Disables timeline cards in both horizontal and vertical layouts. |
| cardPositionHorizontal | Positions the card in horizontal mode. Options: TOP or BOTTOM. | |
| cardWidth | Sets the maximum width of timeline cards. | |
| classNames | Applies custom class names to different card elements. | |
| contentDetailsHeight | 150 | Controls the height of the details section if using cardDetailedText. Refer to TimelineItem model for more info. |
| disableAutoScrollOnClick | false | Prevents auto-scrolling when a timeline card is clicked. |
| disableClickOnCircle | false | Disables the click action on circular points. |
| disableInteraction | false | Disables all the interactions with the Timeline. |
| disableNavOnKey | false | Turns off keyboard navigation. |
| disableTimelinePoint | false | Disables the timeline point in both HORIZONTAL and VERTICAL mode. |
| enableBreakPoint | true | Automatically switches to vertical mode when the vertical breakpoint is reached. |
| enableDarkToggle | false | Adds a toggle switch for dark mode. |
| enableLayoutSwitch | true | Switches the timeline layout |
| enableQuickJump | true | Allows to quickly jump to a timeline item |
| flipLayout | false | Reverses the layout (Right to Left). |
| focusActiveItemOnLoad | false | Automatically scrolls to and focuses on the activeItemIndex when loading. |
| fontSizes | Allows customization of font sizes. | |
| highlightCardsOnHover | false | Highlights the card on hover |
| items | [] | A collection of Timeline Item Models. |
| itemWidth | 300 | Sets the width of the timeline section in horizontal mode. |
| lineWidth | 3px | Adjusts the width of the timeline track line. |
| mediaHeight | 200 | Sets the minimum height for media elements like images or videos in the card. |
| mediaSettings | Configures settings specific to media layout. Refer to mediaSettings for more info. | |
| mode | VERTICAL_ALTERNATING | Sets the component mode. Options: HORIZONTAL, VERTICAL, VERTICAL_ALTERNATING. |
| nestedCardHeight | 150 | Defines the height of nested timeline cards. |
| noUniqueId | false | Prevents generating a unique id for the table wrapper. |
| onItemSelected | Invokes a callback on item selection, passing relevant data. | |
| onScrollEnd | Detects the end of the timeline via onScrollEnd. | |
| onThemeChange | Invokes a callback when the theme changes, triggered via enableDarkToggle. | |
| parseDetailsAsHTML | false | Parses the cardDetailedText as HTML. |
| responsiveBreakPoint | 1024 | Break point at which the timeline changes to VERTICAL mode when VERTICAL_ALTERNATING is the default mode |
| scrollable | true | Makes the timeline scrollable in VERTICAL and VERTICAL_ALTERNATING modes. |
| showAllCardsHorizontal | false | Displays all cards in horizontal mode. By default, only the active card is shown. |
| slideItemDuration | 5000 | Sets the duration (in milliseconds) that a timeline card is active during a slideshow. |
| slideShow | false | Enables slideshow control. |
| textDensity | HIGH | Configures the amount of text to be displayed in each timeline card. Can be either HIGH or LOW |
| textOverlay | false | Displays text as an overlay on media elements. Refer to Text Overlay for more info. |
| theme | Customizes colors. Refer to Theme for more info. | |
| timelinePointDimension | Defines the dimensions of circular points on the timeline. | |
| timelinePointShape | circle | Configures the shape of timeline points. Options: circle, square, diamond. |
| titleDateFormat | 'MMM DD, YYYY' | Formats the date for each timeline item. Supports all dayjs formats. |
| toolbarPosition | TOP | Configures the position of the toolbar. Can be TOP or BOTTOM |
| uniqueId | Used with noUniqueId to set a custom unique id for the wrapper. | |
| useReadMore | true | Enables or disables the "read more" button. Available if text content on the card is taller than the card itself. |
| disableToolbar | false | Hides the toolbar / control panel |
react-chrono supports three modes HORIZONTAL, VERTICAL and VERTICAL_ALTERNATING. No additional setting is required.
<Chrono items={items} mode="HORIZONTAL" />
<Chrono items={items} mode="VERTICAL" />
<Chrono items={items} mode="VERTICAL_ALTERNATING" />
| name | description | type |
|---|---|---|
cardDetailedText | detailed text displayed in the timeline card | String or String[] |
cardSubtitle | text displayed in the timeline card | String |
cardTitle | title that is displayed on the timeline card | String |
date | date to be used in the title. when used, this will override the title property | Date |
media | media object to set image or video | Object |
timelineContent | render custom content instead of text.This prop has higher precedence over cardDetailedText | ReactNode |
title | title of the timeline item | String |
url | url to be used in the title | String |
{ title: "May 1940", cardTitle: "Dunkirk", cardSubtitle: "Men of the British Expeditionary Force (BEF) wade out to a destroyer during the evacuation from Dunkirk.", cardDetailedText: ["paragraph1", "paragraph2"], timelineContent: <div>Custom content</div>, }
if you have a large text to display(via cardDetailedText) and want to split the text into paragraphs, you can pass an array of strings.
each array entry will be created as a paragraph inside the timeline card.
The timeline can be navigated via keyboard.
HORIZONTAL mode use your <kbd>LEFT</kbd> <kbd>RIGHT</kbd> arrow keys for navigation.VERTICAL or VERTICAL_ALTERNATING mode, the timeline can be navigated via the <kbd>UP</kbd> <kbd>DOWN</kbd> arrow keys.To disable keyboard navigation set disableNavOnKey to true.
<Chrono items={items} disableNavOnKey />
With the scrollable prop, you can enable scrolling on both VERTICAL and VERTICAL_ALTERNATING modes.
<Chrono items={items} scrollable />
The scrollbar is not shown by default. To enable the scrollbar, pass an object with prop scrollbar to scrollable prop.
<Chrono items={items} scrollable={{ scrollbar: true }} />
Both images and videos can be embedded in the timeline.
Just add the media attribute to the Timeline Item model and the component will take care of the rest.
<h5> To embed a video </h5>{ title: "May 1940", cardTitle: "Dunkirk", media: { name: "dunkirk beach", source: { url: "http://someurl/image.jpg" }, type: "IMAGE" } }
Videos start playing automatically when active and will be automatically paused when not active.
Like images, videos are also automatically hidden when not in the visible viewport of the container.
{ title: "7 December 1941", cardTitle: "Pearl Harbor", media: { source: { url: "/pearl-harbor.mp4", type: "mp4" }, type: "VIDEO", name: "Pearl Harbor" } }
To embed YouTube videos, use the right embed url.
{ title: "7 December 1941", cardTitle: "Pearl Harbor", media: { source: { url:


全球首个AI音乐社区
音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。


阿里Qoder团队推出的桌面端AI智能体
QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。


一站式搞定所有学习需求
不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。


为AI短剧协作而生
专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。


能听懂你表达的视频模型
Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。


国内直接访问,限时3折
输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!


多风格AI绘画神器
堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。


零代码AI应用开发平台
零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号