Default listing renders an empty, focusable thumbnail link for posts without an image
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- javascript, typescript
- Domaine
- accessibility, frontend
Piste de recherche
Commence par le modèle item-default.ejs.md, où la vignette est toujours enveloppée dans une balise a, puis examine emptyDiv() dans website-listing-read.ts, qui remplit le cas vide. Pour reproduire, effectue le rendu d'une liste par défaut avec une publication sans image et vérifie dans la sortie la présence du lien sans nom. C'est terminé lorsqu'une publication sans image n'a plus de lien de vignette focalisable, ou en a un qui est aria-hidden avec tabindex défini à -1, et qu'axe ne signale plus link-name pour elle.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
I have:
- searched the issue tracker for similar issues
- installed the latest version of Quarto CLI
- formatted my issue following the Bug Reports guide
Bug description
In a default listing, a post with no preview image gets an empty thumbnail link.
item-default.ejs.md always wraps the thumbnail in <a href="...">.
When the post has no image and the listing sets no image-placeholder, emptyDiv() in website-listing-read.ts fills it with <div class="listing-item-img-placeholder"> </div>.
The link has no accessible name, but it is still a Tab stop, so keyboard and screen reader users meet one unnamed link per post before its title link.
axe reports it as link-name (WCAG 2.4.4, 4.1.2).
The grid listing is not affected, as its whole card is one link with text.
This differs from #15038, where the thumbnail has an image without alt text, and from #7028, which asks for alt text on image-placeholder.
Steps to reproduce
_quarto.yml:
project:
type: website
website:
title: "Listing"
index.qmd:
---
title: "Posts"
listing:
contents: posts
type: default
---
posts/one/index.qmd:
---
title: "Post one"
date: 2026-01-01
---
Text without an image.
Render the website and inspect _site/index.html, or run axe on it.
Actual behavior
<div class="thumbnail"><a href="./posts/one/index.html" class="no-external">
<div class="listing-item-img-placeholder card-img-top" > </div>
</a></div>
axe: link-name on the thumbnail link of each post; the link is reachable with Tab and announced with no name.
Expected behavior
A post with no image gets no thumbnail link, or a link hidden from assistive technology and taken out of the tab order (aria-hidden="true" and tabindex="-1"), since the title link next to it already goes to the same page.
Your environment
- IDE: none, rendered from the command line.
- OS: macOS 27.0.
Quarto check output
quarto check
Quarto 99.9.9
[✓] Checking environment information...
Quarto cache location: /Users/mcanouil/Library/Caches/quarto
Project: none found (single-file mode)
[✓] Checking versions of quarto binary dependencies...
Pandoc version 3.10.0: OK
Dart Sass version 1.101.0: OK
Deno version 2.7.14: OK
Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
Version: 99.9.9
commit: b86f98d382940bef6c65f37ea0bdfba844f19b6d
Path: /Users/mcanouil/Projects/quarto-dev/quarto-cli/package/dist/bin
[✓] Checking tools....................OK
TinyTeX: v2026.07
Chrome Headless Shell: (not installed)
VeraPDF: (not installed)
[✓] Checking LaTeX....................OK
Using: TinyTex
Path: /Users/mcanouil/Library/TinyTeX/bin/universal-darwin
Version: 2026
[✓] Checking Chrome Headless....................OK
Using: Chrome from QUARTO_CHROMIUM
Path: /Applications/Brave Browser.app/Contents/MacOS/Brave Browser
[✓] Checking basic markdown render....OK
ℹ R version 4.6.1 (2026-06-24)
! Config '~/.Rprofile' was loaded!
[✓] Checking R installation...........OK
Version: 4.6.1
Path: /Library/Frameworks/R.framework/Versions/4.6/Resources
LibPaths:
- /Users/mcanouil/Library/R/arm64/4.6/library
- /Library/Frameworks/R.framework/Versions/4.6/Resources/library
knitr: 1.51
rmarkdown: 2.31
[✓] Checking Knitr engine render......OK
[✓] Checking Python 3 installation....OK
Version: 3.13.11
Path: /Users/mcanouil/Projects/q2-tests/.venv/bin/python3
Jupyter: (None)
Jupyter is not available in this Python installation.
Install with python3 -m pip install jupyter
[✓] Checking Julia installation...
- Langage dominant
- JavaScript
- Étoiles
- 6.1k
- Forks
- 466
- Merge moyen
- 20 h 35 min
- PR mergées (30 j)
- 75
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de quarto-dev/quarto-cli
-
accessibility bootstrap dark-mode enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
quarto-dev/quarto-cli#15060 ·
Les mainteneurs répondent en général sous 1 jour
-
Code annotation gutter keeps a grey background when code blocks have none (`code-block-bg: false`)Ouvertebug code-annotation code-blocks themes
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
quarto-dev/quarto-cli#15059 ·
Les mainteneurs répondent en général sous 1 jour
-
bug callouts code-blocks themes
Difficulté 1/5 1-3 heures Accessibilité débutants 82/100
quarto-dev/quarto-cli#15058 ·
Les mainteneurs répondent en général sous 1 jour
-
diagrams-mermaid maintenance
Difficulté 2/5 1-3 heures Accessibilité débutants 60/100
quarto-dev/quarto-cli#15042 ·
Les mainteneurs répondent en général sous 1 jour
-
accessibility documentation revealjs
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
quarto-dev/quarto-cli#14971 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de quarto-dev/quarto-cli
Issues similaires
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P2
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
openclaw/openclaw-enterprise#2571 · 1 commentaire · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
fabriziosalmi/certmate#1247 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
bradymholt/cRonstrue#427 ·
Les mainteneurs répondent en général sous 1 jour
-
internal
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
frostney/GocciaScript#1715 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 2 jours