Skip to content

Commit 862ff1e

Browse files
Add responsive separators between puzzle cards
1 parent 0cad61f commit 862ff1e

1 file changed

Lines changed: 104 additions & 0 deletions

File tree

dotcom-rendering/src/components/PuzzlesDirectory.tsx

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,54 @@ const contentStyles = css`
115115
&:has(details) {
116116
padding-bottom: 24px;
117117
}
118+
@media (max-width: 739px) {
119+
position: relative;
120+
::before {
121+
position: absolute;
122+
top: 0;
123+
right: 10px;
124+
left: 10px;
125+
border-top: 1px solid #d9d9d9;
126+
content: '';
127+
pointer-events: none;
128+
}
129+
${from.mobileMedium} {
130+
::before {
131+
right: 20px;
132+
left: 20px;
133+
}
134+
}
135+
}
118136
`;
119137

120138
const rowsStyles = css`
139+
--puzzles-gap: 16px;
121140
display: flex;
122141
min-width: 0;
123142
flex-direction: column;
124143
gap: 16px;
125144
${from.phablet} {
145+
--puzzles-gap: 24px;
126146
gap: 24px;
127147
}
128148
129149
${from.tablet} {
150+
--puzzles-gap: 20px;
130151
gap: 20px;
131152
}
153+
> ul ~ ul::before {
154+
position: absolute;
155+
top: calc(var(--puzzles-gap) / -2);
156+
right: 0;
157+
left: 0;
158+
border-top: 1px solid #d9d9d9;
159+
content: '';
160+
pointer-events: none;
161+
}
132162
`;
133163

134164
const rowStyles = (variant: PuzzleItem['cardVariant'], count: number) => css`
165+
position: relative;
135166
display: grid;
136167
grid-template-columns: ${variant === 'compact'
137168
? 'repeat(2, minmax(0, 1fr))'
@@ -143,13 +174,59 @@ const rowStyles = (variant: PuzzleItem['cardVariant'], count: number) => css`
143174
margin: 0;
144175
padding: 0;
145176
list-style: none;
177+
> li {
178+
position: relative;
179+
}
180+
> li:nth-child(n + ${variant === 'compact' ? 3 : 2})::before {
181+
position: absolute;
182+
top: calc(var(--puzzles-gap) / -2);
183+
right: 0;
184+
left: 0;
185+
border-top: 1px solid #d9d9d9;
186+
content: '';
187+
pointer-events: none;
188+
}
189+
${variant === 'compact' &&
190+
css`
191+
> li:nth-child(2n)::after {
192+
position: absolute;
193+
top: 0;
194+
bottom: 0;
195+
left: calc(var(--puzzles-gap) / -2);
196+
border-left: 1px solid #d9d9d9;
197+
content: '';
198+
pointer-events: none;
199+
}
200+
`}
146201
147202
${from.tablet} {
148203
grid-template-columns: ${variant === 'compact'
149204
? `repeat(${Math.min(count, 4)}, minmax(0, 1fr))`
150205
: `repeat(${Math.min(count, 2)}, minmax(0, 1fr))`};
151206
gap: 20px;
152207
max-width: 700px;
208+
> li:nth-child(n + ${variant === 'compact' ? 3 : 2})::before,
209+
> li:nth-child(2n)::after {
210+
content: none;
211+
}
212+
> li:nth-child(
213+
n + ${Math.min(count, variant === 'compact' ? 4 : 2) + 1}
214+
)::before {
215+
content: '';
216+
}
217+
> li:not(
218+
:nth-child(
219+
${Math.min(count, variant === 'compact' ? 4 : 2)}n + 1
220+
)
221+
)::after {
222+
position: absolute;
223+
top: 0;
224+
bottom: 0;
225+
left: calc(var(--puzzles-gap) / -2);
226+
border-left: 1px solid #d9d9d9;
227+
content: '';
228+
pointer-events: none;
229+
}
153230
}
154231
${from.desktop} {
155232
max-width: 940px;
@@ -266,16 +343,19 @@ const cardImageStyles = (isFeatured: boolean) => css`
266343
`;
267344

268345
const nestedGridStyles = css`
346+
--puzzles-gap: 16px;
269347
display: grid;
270348
grid-template-columns: 1fr;
271349
gap: 16px;
272350
${from.phablet} {
351+
--puzzles-gap: 24px;
273352
gap: 24px;
274353
}
275354
276355
${from.tablet} {
277356
grid-template-columns: repeat(12, minmax(0, 1fr));
278357
gap: 20px;
358+
--puzzles-gap: 20px;
279359
max-width: 700px;
280360
}
281361
${from.desktop} {
@@ -284,9 +364,33 @@ const nestedGridStyles = css`
284364
`;
285365

286366
const nestedStyles = (span: number) => css`
367+
position: relative;
287368
min-width: 0;
369+
& ~ &::before {
370+
position: absolute;
371+
top: calc(var(--puzzles-gap) / -2);
372+
right: 0;
373+
left: 0;
374+
border-top: 1px solid #d9d9d9;
375+
content: '';
376+
pointer-events: none;
377+
}
288378
${from.tablet} {
289379
grid-column: span ${Math.max(1, Math.min(12, span))};
380+
& ~ &::before {
381+
${span < 12
382+
? css`
383+
top: 0;
384+
bottom: 0;
385+
right: auto;
386+
left: calc(var(--puzzles-gap) / -2);
387+
border-top: 0;
388+
border-left: 1px solid #d9d9d9;
389+
`
390+
: css`
391+
border-top: 1px solid #d9d9d9;
392+
`}
393+
}
290394
}
291395
`;
292396

0 commit comments

Comments
 (0)