feat: improve table accessibility and mobile expand tags

- Add sr-only headings for search/filter and results regions
- Add role=region and aria-label to .table-wrap for landmark navigation
- Add tabindex=0 and focus outline to .table-wrap for keyboard reachability
- Add sr-only text to empty Details column header
- Add role=button to expandable rows
- Add .expand-tags-mobile to show category/group tags in expand row on mobile
- Show .expand-tags-mobile via media query at <=900px breakpoint

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Vinta Chen
2026-03-18 18:49:52 +08:00
parent 15a38caaf9
commit 95b6b3cc69
2 changed files with 29 additions and 2 deletions
+20
View File
@@ -201,6 +201,11 @@ a:hover { color: var(--accent-hover); text-decoration: underline; }
overflow-x: auto; overflow-x: auto;
} }
.table-wrap:focus {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.table { .table {
width: 100%; width: 100%;
border-collapse: separate; border-collapse: separate;
@@ -321,6 +326,20 @@ a:hover { color: var(--accent-hover); text-decoration: underline; }
line-height: 1.6; line-height: 1.6;
} }
.expand-tags-mobile {
display: none;
gap: 0.4rem;
margin-bottom: 0.4rem;
}
.expand-tag {
font-size: var(--text-xs);
color: oklch(45% 0.06 240);
background: var(--bg);
padding: 0.15rem 0.4rem;
border-radius: 3px;
}
.expand-also-see { .expand-also-see {
margin-top: 0.25rem; margin-top: 0.25rem;
font-size: var(--text-xs); font-size: var(--text-xs);
@@ -419,6 +438,7 @@ a:hover { color: var(--accent-hover); text-decoration: underline; }
/* === Responsive === */ /* === Responsive === */
@media (max-width: 900px) { @media (max-width: 900px) {
.col-group { display: none; } .col-group { display: none; }
.expand-tags-mobile { display: flex; }
} }
@media (max-width: 640px) { @media (max-width: 640px) {
+9 -2
View File
@@ -29,6 +29,7 @@
</div> </div>
</header> </header>
<h2 class="sr-only">Search and filter</h2>
<div class="controls"> <div class="controls">
<div class="search-wrap"> <div class="search-wrap">
<svg <svg
@@ -60,7 +61,8 @@
</div> </div>
</div> </div>
<div class="table-wrap"> <h2 class="sr-only">Results</h2>
<div class="table-wrap" tabindex="0" role="region" aria-label="Libraries table">
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@@ -69,13 +71,14 @@
<th class="col-stars">GitHub Stars</th> <th class="col-stars">GitHub Stars</th>
<th class="col-cat">Category</th> <th class="col-cat">Category</th>
<th class="col-group">Group</th> <th class="col-group">Group</th>
<th class="col-arrow"></th> <th class="col-arrow"><span class="sr-only">Details</span></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for entry in entries %} {% for entry in entries %}
<tr <tr
class="row" class="row"
role="button"
data-cat="{{ entry.category }}" data-cat="{{ entry.category }}"
data-group="{{ entry.group }}" data-group="{{ entry.group }}"
tabindex="0" tabindex="0"
@@ -108,6 +111,10 @@
<td></td> <td></td>
<td colspan="5"> <td colspan="5">
<div class="expand-content"> <div class="expand-content">
<div class="expand-tags-mobile">
<span class="expand-tag">{{ entry.category }}</span>
<span class="expand-tag">{{ entry.group }}</span>
</div>
{% if entry.description %} {% if entry.description %}
<div class="expand-desc">{{ entry.description | safe }}</div> <div class="expand-desc">{{ entry.description | safe }}</div>
{% endif %} {% if entry.also_see %} {% endif %} {% if entry.also_see %}