Skip to content

Commit 2f307f6

Browse files
committed
refactor: make timeline marks actual elements
1 parent f1444c9 commit 2f307f6

File tree

2 files changed

+28
-41
lines changed

2 files changed

+28
-41
lines changed

src/components/Timeline.css

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33
--timeline-line-color: black;
44
--marker-line-width: var(--timeline-line-width);
55
--marker-line-color: var(--timeline-line-color);
6-
--marker-size: 1.5rem;
7-
--marker-color: var(--timeline-line-color);
8-
--marker-inner-size: 1rem;
9-
--marker-inner-color: white;
10-
--marker-radius: 50%;
6+
--marker-mark-size: 1.5rem;
7+
--marker-mark-color: var(--timeline-line-color);
8+
--marker-mark-radius: 50%;
119

1210
position: relative;
1311
}
@@ -25,6 +23,7 @@
2523
position: absolute;
2624
width: 50%;
2725
display: flex;
26+
align-items: flex-start;
2827
transition: top 0.1s;
2928
}
3029

@@ -53,53 +52,38 @@
5352
margin-left: auto;
5453
}
5554

56-
.timeline-item__marker {
55+
.timeline-marker {
5756
position: relative;
58-
height: var(--marker-line-width);
5957
margin-top: 2rem;
6058
width: 5rem;
61-
background-color: var(--marker-line-color);
62-
}
63-
64-
.timeline-item__marker::after,
65-
.timeline-item__marker::before {
66-
content: '';
67-
border-radius: var(--marker-radius);
68-
position: absolute;
69-
}
70-
71-
.timeline-item__marker::before {
72-
width: var(--marker-size);
73-
height: var(--marker-size);
74-
background-color: var(--marker-color);
75-
top: calc(-1 * var(--marker-size) / 2 + var(--marker-line-width) / 2);
76-
}
77-
78-
.timeline-item__marker::after {
79-
width: var(--marker-inner-size);
80-
height: var(--marker-inner-size);
81-
background-color: var(--marker-inner-color);
82-
top: calc(-1 * var(--marker-inner-size) / 2 + var(--marker-line-width) / 2);
8359
}
8460

85-
.timeline-item--left .timeline-item__marker::before {
86-
right: calc(-1 * var(--marker-size) / 2);
61+
.timeline-marker__pointer {
62+
flex: 1;
63+
height: var(--marker-line-width);
64+
background-color: var(--marker-line-color);
8765
}
8866

89-
.timeline-item--left .timeline-item__marker::after {
90-
right: calc(-1 * var(--marker-inner-size) / 2);
67+
.timeline-marker__mark {
68+
border-radius: var(--marker-mark-radius);
69+
width: var(--marker-mark-size);
70+
height: var(--marker-mark-size);
71+
background-color: var(--marker-mark-color);
72+
position: absolute;
73+
top: 50%;
9174
}
9275

93-
.timeline-item--right .timeline-item__marker::before {
94-
left: calc(-1 * var(--marker-size) / 2);
76+
.timeline-item--left {
77+
flex-direction: row-reverse;
9578
}
9679

97-
.timeline-item--right .timeline-item__marker::after {
98-
left: calc(-1 * var(--marker-inner-size) / 2);
80+
.timeline-item--left .timeline-marker__mark {
81+
right: 0;
82+
transform: translate(50%, -50%);
9983
}
100-
101-
.timeline-item--left .timeline-item__marker {
102-
order: 1;
84+
.timeline-item--right .timeline-marker__mark {
85+
left: 0;
86+
transform: translate(-50%, -50%);
10387
}
10488

10589
/* left positioning */

src/components/TimelineItem.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ export const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps>(
1717
({ className, title, date, children, dateFormat, dateLocale }, ref) => {
1818
return (
1919
<div ref={ref} className={['timeline-item', className].join(' ')}>
20-
<div className="timeline-item__marker" />
20+
<div className="timeline-marker">
21+
<div className="timeline-marker__pointer" />
22+
<div className="timeline-marker__mark" />
23+
</div>
2124
<div className="timeline-card">
2225
<p className="timeline-card__date">{date instanceof Date ? format(date, dateFormat ?? 'P', { locale: dateLocale }) : date}</p>
2326
<p className="timeline-card__title">{title}</p>

0 commit comments

Comments
 (0)