revealjs tabset tabs get positive tabindex values
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 88/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- javascript
調査の方向性
src/resources/formats/html/tabby/js/tabby.js の314~336行目付近から始め、提供されている3枚のスライドの revealjs QMD 例を使って問題を再現します。revealjs の tabset タブに正の tabindex 値が付与されなくなっていることと、キーボードフォーカスが表示中のスライドの DOM 順序に従うことを確認します。
索引モデルが issue の本文から書いたものです。
説明
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 revealjs deck, tabset tabs get tabindex="1", "2", and so on. Positive values put the tabs before all other content in the Tab order. As a result, on the 2 slides before a tabset, the first Tab moves focus to a tab on a slide that is not visible. This breaks WCAG 2.2 SC 2.4.3 Focus Order.
- Cause: when
body.reveal-viewportis present, Quarto's copy oftabby.jsgives each tab, and each focusable element in each tab panel, the next positive tabindex (tabby.js#L314-L336, from a174f59). - Impact: keyboard users lose focus to a tab on a slide that is not visible. There is no visible focus and no slide change.
- Fix: use
tabindex="0"in revealjs too (the non-reveal branch), or a roving tabindex (0on the selected tab,-1on the others).
Related: #14795 (off-screen slides stay in the tab order). Positive tabindex makes that problem worse, because the tabs come before the content of the current slide.
AI note: I used an AI assistant to investigate. Its findings are grounded in a local clone of quarto-cli.
Steps to reproduce
---
format: revealjs
---
## Slide 1
Plain slide.
## Slide 2
Plain slide.
## Slide 3
::: {.panel-tabset}
### Tab A
Content A
### Tab B
Content B
:::
- Render the file and open it in Chrome.
- On slide 1, press Tab.
- Go to slide 2, then press Tab.
Actual behavior
- On slide 1, focus moves to "Tab A" (
tabindex="1") on slide 3, which is not visible. - On slide 2, focus moves to "Tab B" (
tabindex="2") on slide 3, which is not visible. - The slide does not change, and nothing on screen shows focus.
Expected behavior
Focus moves in DOM order to content on the current slide. The tabs have tabindex="0" (or -1 for tabs that are not selected), as they do in HTML output.
Your environment
- IDE: none (rendered with the CLI, tested in Chrome 154.0.8037.58)
- OS: macOS 26.6.2 (build 25G83)
Quarto check output
Quarto 1.11.4
[✓] Checking environment information...
Quarto cache location: /Users/charlottewickham/Library/Caches/quarto
[✓] 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: 1.11.4
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
Path: /Library/Frameworks/R.framework/Versions/4.6/Resources
LibPaths:
- /Users/charlottewickham/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.12.2
Path: /Users/charlottewickham/.pyenv/versions/3.12.2/bin/python3
Jupyter: 5.9.1
Kernels: python3
[✓] Checking Jupyter engine render....OK
[✓] Checking Julia installation...
- 主要言語
- JavaScript
- スター
- 6k
- フォーク
- 461
- 平均マージ
- 12時間 42分
- マージ済み PR(30日)
- 54
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
quarto-dev/quarto-cli のほかの issue
-
accessibility bug embed websites
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
quarto-dev/quarto-cli#14972 ·
メンテナーはふだん 1 日以内に返信
-
accessibility documentation revealjs
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
quarto-dev/quarto-cli#14971 ·
メンテナーはふだん 1 日以内に返信
-
accessibility embed
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
quarto-dev/quarto-cli#14968 ·
メンテナーはふだん 1 日以内に返信
-
accessibility revealjs themes
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
quarto-dev/quarto-cli#14963 ·
メンテナーはふだん 1 日以内に返信
-
accessibility revealjs themes
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
quarto-dev/quarto-cli#14962 ·
メンテナーはふだん 1 日以内に返信
quarto-dev/quarto-cli の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
FuRongJun-1999/dsh-memory#56 ·
メンテナーはふだん 1 日以内に返信
-
Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
pgadmin-org/pgadmin4#10503 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
521xueweihan/HelloGitHub#3856 ·
-
needs-ac
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Ikalus1988/MisakaNet#2845 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
neondatabase/website#6038 ·
メンテナーはふだん 1 日以内に返信