Timeline
A timeline is a list of events in order, with an icon or an avatar per event and a card for its content, for activity feeds and histories.
Overview
A timeline is a list of events in order. Build it from three parts:
.timelineon aulelement wraps the whole list..timeline-eventon eachliholds one event and draws the line to the next one..timeline-event-iconmarks the event, and.timeline-event-cardholds its content.
The line between events is drawn by the events themselves, so the last one never gets a trailing line.
- 1 day ago
Database backup completed
The nightly backup finished without errors.
- 2 hrs ago
3 new products were added
They are already visible in the catalog.
<ul class="timeline">
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/check -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M5 12l5 5l10 -10" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">1 day ago</div>
<h4>Database backup completed</h4>
<p class="text-secondary mb-0">The nightly backup finished without errors.</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/briefcase -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9" />
<path d="M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2" />
<path d="M12 12l0 .01" />
<path d="M3 13a20 20 0 0 0 18 0" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 hrs ago</div>
<h4>3 new products were added</h4>
<p class="text-secondary mb-0">They are already visible in the catalog.</p>
</div>
</div>
</li>
</ul>Event icons
The icon marker is a plain box, so any icon or avatar fits inside. Add a bg-*-lt class to tint it and tell event types apart at a glance.
- Deployment finished
- Build failed on the release branch
- Paweł Kuna commented on the pull request
<ul class="timeline">
<li class="timeline-event">
<div class="timeline-event-icon bg-green-lt">
<!-- Download SVG icon from http://tabler.io/icons/icon/check -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M5 12l5 5l10 -10" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">Deployment finished</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon bg-red-lt">
<!-- Download SVG icon from http://tabler.io/icons/icon/alert-triangle -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M12 9v4" />
<path d="M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0" />
<path d="M12 16h.01" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">Build failed on the release branch</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<span class="avatar avatar-sm" style="background-image: url(/static/avatars/000m.jpg)"></span>
</div>
<div class="card timeline-event-card">
<div class="card-body">Paweł Kuna commented on the pull request</div>
</div>
</li>
</ul>Simple timeline
Add .timeline-simple to hide the icons and pull the cards to the edge. Use it when the events need less decoration, for example in a narrow column.
- 10 hrs ago
+1150 Followers
You’re getting more and more followers, keep it up!
- 2 hrs ago
+3 New Products were added!
Congratulations!
- 1 day ago
+290 Page Likes
This is great, keep it up!
- 2 days ago
+3 Friend Requests
- 3 days ago
+3 New photos



<ul class="timeline timeline-simple">
<li class="timeline-event">
<div class="timeline-event-icon bg-x text-x-fg">
<!-- Download SVG icon from http://tabler.io/icons/icon/brand-x -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M4 4l11.733 16h4.267l-11.733 -16l-4.267 0" />
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">10 hrs ago</div>
<h4>+1150 Followers</h4>
<p class="text-secondary">You’re getting more and more followers, keep it up!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/briefcase -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9" />
<path d="M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2" />
<path d="M12 12l0 .01" />
<path d="M3 13a20 20 0 0 0 18 0" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 hrs ago</div>
<h4>+3 New Products were added!</h4>
<p class="text-secondary">Congratulations!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/check -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M5 12l5 5l10 -10" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">1 day ago</div>
<h4>Database backup completed!</h4>
<p class="text-secondary">Download the <a href="#">latest backup</a>.</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon bg-facebook text-facebook-fg">
<!-- Download SVG icon from http://tabler.io/icons/icon/brand-facebook -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">1 day ago</div>
<h4>+290 Page Likes</h4>
<p class="text-secondary">This is great, keep it up!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/user-plus -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" />
<path d="M16 19h6" />
<path d="M19 16v6" />
<path d="M6 21v-2a4 4 0 0 1 4 -4h4" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 days ago</div>
<h4>+3 Friend Requests</h4>
<div class="avatar-list mt-3">
<span style="background-image: url(/static/avatars/000m.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
<span style="background-image: url(/static/avatars/052f.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
<span style="background-image: url(/static/avatars/002m.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
</div>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/photo -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M15 8h.01" />
<path d="M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12" />
<path d="M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5" />
<path d="M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">3 days ago</div>
<h4>+3 New photos</h4>
<div class="mt-3">
<div class="row g-2">
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/blue-sofa-with-pillows-in-a-designer-living-room-interior.jpg" class="rounded" alt="Blue sofa with pillows in a designer living room interior">
</div>
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/home-office-desk-with-macbook-iphone-calendar-watch-and-organizer.jpg" class="rounded" alt="Home office desk with Macbook, iPhone, calendar, watch & organizer">
</div>
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/young-woman-working-in-a-cafe.jpg" class="rounded" alt="Young woman working in a cafe">
</div>
</div>
</div>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/settings -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065" />
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 weeks ago</div>
<h4>System updated to v2.02</h4>
<p class="text-secondary">Check the complete changelog at the <a href="#">activity page</a>.</p>
</div>
</div>
</li>
</ul>Examples
A timeline works well as an activity feed, where each event mixes text, links and its own time.
- 10 hrs ago
+1150 Followers
You’re getting more and more followers, keep it up!
- 2 hrs ago
+3 New Products were added!
Congratulations!
- 1 day ago
+290 Page Likes
This is great, keep it up!
- 2 days ago
+3 Friend Requests
- 3 days ago
+3 New photos



<ul class="timeline">
<li class="timeline-event">
<div class="timeline-event-icon bg-x text-x-fg">
<!-- Download SVG icon from http://tabler.io/icons/icon/brand-x -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M4 4l11.733 16h4.267l-11.733 -16l-4.267 0" />
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">10 hrs ago</div>
<h4>+1150 Followers</h4>
<p class="text-secondary">You’re getting more and more followers, keep it up!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/briefcase -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9" />
<path d="M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2" />
<path d="M12 12l0 .01" />
<path d="M3 13a20 20 0 0 0 18 0" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 hrs ago</div>
<h4>+3 New Products were added!</h4>
<p class="text-secondary">Congratulations!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/check -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M5 12l5 5l10 -10" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">1 day ago</div>
<h4>Database backup completed!</h4>
<p class="text-secondary">Download the <a href="#">latest backup</a>.</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon bg-facebook text-facebook-fg">
<!-- Download SVG icon from http://tabler.io/icons/icon/brand-facebook -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M7 10v4h3v7h4v-7h3l1 -4h-4v-2a1 1 0 0 1 1 -1h3v-4h-3a5 5 0 0 0 -5 5v2h-3" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">1 day ago</div>
<h4>+290 Page Likes</h4>
<p class="text-secondary">This is great, keep it up!</p>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/user-plus -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" />
<path d="M16 19h6" />
<path d="M19 16v6" />
<path d="M6 21v-2a4 4 0 0 1 4 -4h4" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 days ago</div>
<h4>+3 Friend Requests</h4>
<div class="avatar-list mt-3">
<span style="background-image: url(/static/avatars/000m.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
<span style="background-image: url(/static/avatars/052f.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
<span style="background-image: url(/static/avatars/002m.jpg)" class="avatar">
<span class="badge bg-success" aria-label="Online"></span>
</span>
</div>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/photo -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M15 8h.01" />
<path d="M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12" />
<path d="M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5" />
<path d="M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">3 days ago</div>
<h4>+3 New photos</h4>
<div class="mt-3">
<div class="row g-2">
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/blue-sofa-with-pillows-in-a-designer-living-room-interior.jpg" class="rounded" alt="Blue sofa with pillows in a designer living room interior">
</div>
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/home-office-desk-with-macbook-iphone-calendar-watch-and-organizer.jpg" class="rounded" alt="Home office desk with Macbook, iPhone, calendar, watch & organizer">
</div>
<div class="col-4">
<!-- Photo -->
<img src="/static/photos/young-woman-working-in-a-cafe.jpg" class="rounded" alt="Young woman working in a cafe">
</div>
</div>
</div>
</div>
</div>
</li>
<li class="timeline-event">
<div class="timeline-event-icon">
<!-- Download SVG icon from http://tabler.io/icons/icon/settings -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false" class="icon">
<path d="M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065" />
<path d="M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" />
</svg>
</div>
<div class="card timeline-event-card">
<div class="card-body">
<div class="text-secondary float-end">2 weeks ago</div>
<h4>System updated to v2.02</h4>
<p class="text-secondary">Check the complete changelog at the <a href="#">activity page</a>.</p>
</div>
</div>
</li>
</ul>Accessibility
A timeline is a list of events, so keep the list markup and let the content say what happened.
- Use
ulandlielements. A screen reader then announces how many events there are and where the reader is in the list. - Put the event time in a
timeelement with adatetimeattribute, so "2 hrs ago" also has an exact value. - The icon is decoration on top of the text. Keep the meaning in the heading or the body of the card, never in the icon color alone.
- Keep heading levels in order.
h4inside a card only sets the look - pick the level that fits the page outline.
SCSS variables
The size of the icon marker comes from one custom property, which also sets where the line is drawn:
| Variable | Description | Default |
|---|---|---|
--tblr-timeline-icon-size |
Width and height of the event icon | 2.5rem |
Class reference
Every class this component ships, grouped by what it changes. A name in braces stands for a family — {color} is any base color, {breakpoint} any responsive step.
timeline | component | Container element |
timeline-event | part | One entry on the timeline |
timeline-event-icon | part | Marker on the line, next to the entry |
timeline-event-card | part | Card holding the content of the entry |
timeline-simple | style | Drops the cards and the connecting line for a plain list |
