Skip to content

Commit e6c3f56

Browse files
committed
refactor: timeline pointer to allow drop-shadow
1 parent 2f307f6 commit e6c3f56

File tree

3 files changed

+44
-41
lines changed

3 files changed

+44
-41
lines changed

src/components/Timeline.css

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
:where(.timeline) {
2-
--timeline-line-width: 0.2rem;
3-
--timeline-line-color: black;
4-
--marker-line-width: var(--timeline-line-width);
5-
--marker-line-color: var(--timeline-line-color);
6-
--marker-mark-size: 1.5rem;
7-
--marker-mark-color: var(--timeline-line-color);
2+
--line-width: 0.2rem;
3+
--line-color: black;
4+
--marker-mark-size: 1rem;
5+
--marker-mark-color: var(--line-color);
86
--marker-mark-radius: 50%;
7+
--marker-offset: 2rem;
8+
--pointer-height: 2rem;
9+
--pointer-width: 1rem;
910

1011
position: relative;
1112
}
1213

1314
.timeline__line {
1415
position: absolute;
15-
background-color: var(--timeline-line-color);
16-
width: var(--timeline-line-width);
16+
background-color: var(--line-color);
17+
width: var(--line-width);
1718
height: 100%;
1819
left: 50%;
1920
transform: translateX(-50%);
@@ -25,22 +26,41 @@
2526
display: flex;
2627
align-items: flex-start;
2728
transition: top 0.1s;
29+
gap: 1rem;
2830
}
2931

3032
.timeline-item--left {
3133
left: 0;
34+
flex-direction: row-reverse;
3235
}
3336

3437
.timeline-item--right {
3538
right: 0;
3639
}
3740

41+
.timeline-item__marker {
42+
border-radius: var(--marker-mark-radius);
43+
width: var(--marker-mark-size);
44+
height: var(--marker-mark-size);
45+
background-color: var(--marker-mark-color);
46+
margin-top: var(--marker-offset);
47+
}
48+
49+
.timeline-item--left .timeline-item__marker {
50+
transform: translate(50%, -50%);
51+
}
52+
.timeline-item--right .timeline-item__marker {
53+
transform: translate(-50%, -50%);
54+
}
55+
3856
.timeline-card {
57+
background-color: white;
3958
border: 0.2rem solid black;
4059
padding: 1rem;
4160
display: flex;
4261
flex-direction: column;
4362
flex: 1;
63+
position: relative;
4464
}
4565

4666
.timeline-card img {
@@ -52,38 +72,23 @@
5272
margin-left: auto;
5373
}
5474

55-
.timeline-marker {
56-
position: relative;
57-
margin-top: 2rem;
58-
width: 5rem;
59-
}
60-
61-
.timeline-marker__pointer {
62-
flex: 1;
63-
height: var(--marker-line-width);
64-
background-color: var(--marker-line-color);
65-
}
66-
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);
75+
.timeline-card__pointer {
76+
clip-path: polygon(0% 0%, 0% 100%, 100% 50%);
77+
background-color: white;
78+
top: var(--marker-offset);
79+
width: var(--pointer-width);
80+
height: var(--pointer-height);
81+
transform: translate(100%, -50%);
7282
position: absolute;
73-
top: 50%;
7483
}
7584

76-
.timeline-item--left {
77-
flex-direction: row-reverse;
78-
}
79-
80-
.timeline-item--left .timeline-marker__mark {
85+
.timeline-item--left .timeline-card__pointer {
8186
right: 0;
82-
transform: translate(50%, -50%);
8387
}
84-
.timeline-item--right .timeline-marker__mark {
88+
89+
.timeline-item--right .timeline-card__pointer {
90+
transform: scaleX(-1) translate(100%, -50%);
8591
left: 0;
86-
transform: translate(-50%, -50%);
8792
}
8893

8994
/* left positioning */

src/components/Timeline.stories.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
}
55

66
.styled-timeline {
7-
--timeline-line-width: 2px;
8-
--timeline-line-color: gray;
7+
--line-width: 2px;
8+
--line-color: gray;
99
--marker-inner-color: hotpink;
1010
--marker-color: gray;
1111
--marker-size: 1.5rem;
@@ -18,7 +18,7 @@
1818
border: none;
1919
padding: 2rem;
2020
border-radius: 0.2rem;
21-
box-shadow: 2px 2px 5px rgb(0, 0, 0, 0.2);
21+
filter: drop-shadow(2px 2px 5px rgb(0, 0, 0, 0.2));
2222
}
2323

2424
.styled-timeline .timeline-card__title {

src/components/TimelineItem.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ 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-marker">
21-
<div className="timeline-marker__pointer" />
22-
<div className="timeline-marker__mark" />
23-
</div>
20+
<div className="timeline-item__marker" />
2421
<div className="timeline-card">
22+
<div className="timeline-card__pointer" />
2523
<p className="timeline-card__date">{date instanceof Date ? format(date, dateFormat ?? 'P', { locale: dateLocale }) : date}</p>
2624
<p className="timeline-card__title">{title}</p>
2725
{children}

0 commit comments

Comments
 (0)