Skip to content

Commit 6ab4eb5

Browse files
committed
Focus visible updates on tag and articles list views
1 parent 388ca38 commit 6ab4eb5

2 files changed

Lines changed: 34 additions & 36 deletions

File tree

src/pages/articles/index.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const path = '/articles'
5757
<header class="px-8 sm:px-12 max-w-6xl mx-auto">
5858
<a
5959
href={`/tags/${tag.data.slug}`}
60-
class="group flex items-center gap-3 sm:gap-5 rounded-xl border border-page-inverse bg-content-inverse px-3 sm:px-6 py-3 sm:py-4 no-underline shadow-sm transition-all hover:border-page-active"
60+
class="group relative flex items-center gap-3 sm:gap-5 rounded-xl border border-page-inverse bg-content-inverse px-3 sm:px-6 py-3 sm:py-4 no-underline shadow-sm transition-all hover:border-page-active focus-visible:outline-none focus-visible:after:border-2 focus-visible:after:border-spotlight focus-visible:after:-inset-1.5 after:pointer-events-none after:absolute after:inset-0 after:rounded-none after:content-[''] after:border-2 after:border-transparent"
6161
>
6262
{/* Tag icon */}
6363
<div class="hidden sm:flex shrink-0 items-center justify-center text-page-inverse group-hover:text-page-active transition-colors">

src/pages/tags/[tag].astro

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ const paginatedContent = sortedContent.slice(startIndex, endIndex)
9191
<h1 class="text-page-inverse">
9292
{tagEntry.data.displayName}
9393
</h1>
94-
<span class="inline-flex w-fit rounded-full bg-page-inverse px-3 py-1 text-sm font-semibold text-page-base whitespace-nowrap sm:ml-2 sm:mt-2">
94+
<span class="inline-flex w-fit rounded-full bg-page-inverse px-3 py-1 text-sm font-semibold text-page-base whitespace-nowrap ml-2 sm:mt-2">
9595
{totalItems} {totalItems === 1 ? 'article' : 'articles'}
9696
</span>
9797
</div>
@@ -102,7 +102,7 @@ const paginatedContent = sortedContent.slice(startIndex, endIndex)
102102
</p>
103103
)}
104104

105-
<div class="mt-2 sm:mt-0 flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-content-offset">
105+
<div class="flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-content-offset mt-2 sm:mt-0 ml-3 sm:ml-0">
106106
{sortedContent.length > 0 && (
107107
<span class="text-content-active">
108108
Latest: <time class="font-medium text-content">{sortedContent[0]!.data.publishDate.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}</time>
@@ -131,9 +131,12 @@ const paginatedContent = sortedContent.slice(startIndex, endIndex)
131131
const href = `/articles/${item.id}`
132132

133133
return (
134-
<article class="bg-content-inverse rounded-2xl shadow-lg hover:shadow-xl transition-all duration-300 hover:-translate-y-1 overflow-hidden group">
135-
{item.data.cover && (
136-
<a href={href} class="block">
134+
<article class="group h-full relative after:pointer-events-none after:absolute after:content-[''] after:inset-0 after:rounded-none after:border-2 after:border-transparent after:opacity-0 after:transition-opacity after:duration-150 after:ease-out focus-within:after:opacity-100 focus-within:after:-inset-1.5 focus-within:after:border-spotlight">
135+
<a
136+
href={href}
137+
class="block h-full bg-content-inverse rounded-2xl shadow-lg hover:shadow-xl transition-all duration-300 hover:-translate-y-1 overflow-hidden focus-visible:outline-none"
138+
>
139+
{item.data.cover && (
137140
<div class="relative aspect-video overflow-hidden">
138141
<Picture
139142
src={item.data.cover}
@@ -148,40 +151,35 @@ const paginatedContent = sortedContent.slice(startIndex, endIndex)
148151
loading="lazy"
149152
/>
150153
</div>
151-
</a>
152-
)}
154+
)}
153155

154-
<div class="p-6 space-y-4">
155-
<div class="flex items-center gap-3 text-sm">
156-
<span
157-
class="px-3 py-1 rounded-full text-white font-medium bg-primary"
158-
>
159-
Article
160-
</span>
161-
<time datetime={item.data.publishDate.toISOString()}>
162-
{item.data.publishDate.toLocaleDateString('en-US', {
163-
year: 'numeric',
164-
month: 'long',
165-
day: 'numeric',
166-
})}
167-
</time>
168-
</div>
156+
<div class="p-6 space-y-4">
157+
<div class="flex items-center gap-3 text-sm">
158+
<span
159+
class="px-3 py-1 rounded-full text-white font-medium bg-primary"
160+
>
161+
Article
162+
</span>
163+
<time datetime={item.data.publishDate.toISOString()}>
164+
{item.data.publishDate.toLocaleDateString('en-US', {
165+
year: 'numeric',
166+
month: 'long',
167+
day: 'numeric',
168+
})}
169+
</time>
170+
</div>
169171

170-
<h2 class="text-xl font-semibold leading-tight">
171-
<a
172-
href={href}
173-
class="group-hover:text-primary transition-colors duration-300"
174-
>
172+
<h2 class="text-xl font-semibold leading-tight group-hover:text-primary transition-colors duration-300">
175173
{item.data.title}
176-
</a>
177-
</h2>
174+
</h2>
178175

179-
{item.data.description && (
180-
<p class="text-sm leading-relaxed line-clamp-3">
181-
{item.data.description}
182-
</p>
183-
)}
184-
</div>
176+
{item.data.description && (
177+
<p class="text-sm leading-relaxed line-clamp-3">
178+
{item.data.description}
179+
</p>
180+
)}
181+
</div>
182+
</a>
185183
</article>
186184
)
187185
})}

0 commit comments

Comments
 (0)