Dashboard: inactive light/dark navbar logo remains an empty focusable link
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 78/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- css, html
- Lĩnh vực
- accessibility, frontend
Hướng nghiên cứu
Bắt đầu với src/resources/formats/dashboard/_nav-container.html và src/resources/formats/html/_quarto-rules.scss, sau đó render bản tái hiện dashboard được cung cấp cùng với đầu ra của axe. Đảm bảo biến thể theme không hoạt động ẩn toàn bộ logo link của nó, để lại một logo link có thể focus và có tên, đồng thời không có vi phạm tên link của axe ở cả hai trạng thái theme.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
A format: dashboard navbar logo is always rendered twice — a light-theme and a dark-theme copy, even when the author supplies a single logo: path (_nav-container.html#L3-L4). The theme CSS then hides the inactive copy — but the light-content/dark-content class sits on the <img>, not the wrapping <a>, and the hiding rules only match the image (_quarto-rules.scss#L765-L774).
So in every theme state the inactive logo's <a href="#"> remains rendered at 0×0: still in the keyboard tab order, exposed to assistive technology as a link with an empty accessible name (its only content is display: none, so it contributes nothing to name computation), and flagged by axe-core link-name (serious → WCAG 2.2 SC 2.4.4 Link Purpose (In Context)) — even when the author sets logo alt text. Keyboard and screen-reader users hit two consecutive logo links on every dashboard page, one of them invisible and unnamed.
The fix direction: put the visibility class on the <a> (or render the anchor conditionally), so hiding the theme variant removes the whole link from the tab order and accessibility tree. Authors can approximate this today with body.quarto-light .navbar-brand-container a:has(> .navbar-logo.dark-content) { display: none !important; } (and the quarto-dark/light-content mirror) — verified to leave one named logo tab stop and zero axe violations — but that shouldn't be required.
An AI assistant helped investigate, grounded in a local clone of quarto-cli (source pinned to 8577ed1c6), per CONTRIBUTING.md.
Steps to reproduce
---
title: "Logo repro"
format:
dashboard:
axe:
output: document
logo:
path: logo.png
alt: "Washington County, Oregon"
---
# Page one
## Row
Content.
quarto renderwith any smalllogo.pngalongside, and open the result in a browser.- Press
Tabfrom the top of the page, or run axe DevTools.
Actual behavior
Rendered navbar (both links always present):
<a href="#"><img src="logo.png" alt="Washington County, Oregon" class="navbar-logo light-content d-inline-block"></a>
<a href="#"><img src="logo.png" alt="Washington County, Oregon" class="navbar-logo dark-content d-inline-block"></a>
With body.quarto-light, the second link's <img> is display: none but the <a> computes to display: block at 0×0. Verified via CDP (Chrome 150) in both body.quarto-light and body.quarto-dark, with a single logo and with an explicit light:/dark: pair:
- Tab order:
navbar-toggler → logo link (light) → logo link (dark) → …— two logo stops, one invisible. - Accessibility tree: visible link
name="Washington County, Oregon"; inactive link exposed aslink, name="".
Axe-core:
Serious · WCAG 2.0 A (2.4.4, 4.1.2): Ensure links have discernible text
Links must have discernible text
a[href="#"]:nth-child(2)
Expected behavior
Only the active theme's logo link is focusable and exposed to assistive technology — one logo tab stop, no link-name violation. E.g. the light-content/dark-content class on the <a> so the existing hiding rules remove the whole link.
Your environment
- IDE: n/a (rendered from the command line; behavior is browser-side)
- OS: macOS 26.5.1 (build 25F80)
- Browsers checked: Chrome 150 (headless, CDP accessibility tree + simulated Tab)
Quarto check output
Quarto 1.10.12
[✓] Checking environment information...
Quarto cache location: /Users/charlottewickham/Library/Caches/quarto
[✓] Checking versions of quarto binary dependencies...
Pandoc version 3.8.3: OK
Dart Sass version 1.87.0: OK
Deno version 2.7.14: OK
Typst version 0.14.2: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
Version: 1.10.12
Path: /Applications/quarto/bin
[✓] Checking tools....................OK
TinyTeX: v2026.04
Chrome Headless Shell: 150.0.7871.115
VeraPDF: 1.28.2
[✓] Checking LaTeX....................OK
Using: TinyTex
Path: /Users/charlottewickham/Library/TinyTeX/bin/universal-darwin
Version: 2026
[✓] Checking Chrome Headless....................OK
Using: Chrome Headless Shell installed by Quarto
Path: /Users/charlottewickham/Library/Application Support/quarto/chrome-headless-shell/chrome-headless-shell-mac-arm64/chrome-headless-shell
Version: 150.0.7871.115
[✓] Checking basic markdown render....OK
[✓] Checking R installation...........OK
Version: 4.6.0
[✓] Checking Knitr engine render......OK
[✓] Checking Python 3 installation....OK
Version: 3.12.2
[✓] Checking Jupyter engine render....OK
[✓] Checking Julia installation...
- Ngôn ngữ chính
- JavaScript
- Star
- 6.1k
- Fork
- 466
- Merge trung bình
- 20 giờ 28 phút
- Pull request đã merge (30 ngày)
- 64
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của quarto-dev/quarto-cli
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 60/100
quarto-dev/quarto-cli#15042 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility documentation revealjs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
quarto-dev/quarto-cli#14971 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility revealjs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
quarto-dev/quarto-cli#14970 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility revealjs themes
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
quarto-dev/quarto-cli#14963 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility revealjs themes
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
quarto-dev/quarto-cli#14962 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của quarto-dev/quarto-cli
Issue tương tự
-
Access-request approve silently discards the decider's note (decision_note written only on deny)Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Uuriko/project-room#3378 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Notifications pagination accepts NaN and negative LIMIT/OFFSETCó thể đã có người làm @Senthil455 đã nhận hôm nay. Đang mởBUGS MEDIUM
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
elixpo/blogs.elixpo#419 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
immich-app/immich#32426 ·
Maintainer thường phản hồi trong vòng 1 ngày