Skip to content

フォーカスの輪郭を1つにそろえ、スキップリンクを置く - #170

Merged
ma91n merged 1 commit into
future-architect:masterfrom
ma91n:a11y-focus-skiplink
Sep 17, 2026
Merged

ma91n merged 1 commit into
future-architect:masterfrom
ma91n:a11y-focus-skiplink

Conversation

@ma91n

@ma91n ma91n commented Sep 17, 2026

Copy link
Copy Markdown
Collaborator

#158 の最後の項目、フォーカスの輪郭とスキップリンクです。

変更

  • _templates/layout.html を新設。extrabody にスキップリンクを置き、content ブロックを差し替えて本体の div に id="main-content" と tabindex="-1" を足す(tabindex が無いとフォーカスが本文へ移らず、次の Tab がまた先頭から始まる)
  • _static/custom.css に輪郭を1つにそろえる規則と、スキップリンクの見た目
いま 寄せ先
輪郭 リンクは UA のリング、ボタンは 4px の -webkit-focus-ring-color、入力欄は outline: none(目印が無い) 2px のネイビー・オフセット 2px で全部そろえる
暗い地(左のナビ・スキップリンクの板) — ネイビーは沈む(1.05)ので白の輪郭
着地点(#main-content) — 輪郭は出さない。本文全体が囲まれても所在は分からない

content ブロックの中身は sphinx_rtd_theme 3.0.2 のものと同じです(版は requirements.txt で固定しているので、差分はそこだけ)。

スキップリンクが効く条件に制限があります

左のナビが自動スクロールしているページでは、最初の Tab がスキップリンクに来ません。 テーマの JS が読み込み時に現在の項目を scrollIntoView していて、Chrome はスクロールで Tab の起点を動かすためです。実測した3ページ:

ページ ナビのスクロール位置 最初の Tab 本文までの Tab 回数
index.html 0 スキップリンク 38
preface.html 138 ナビの途中 43
syntax.html 330 ナビの途中 34

置く価値はあると考えています。起点がページの先頭にあるとき(index.html、Ctrl+Home の後、リンクの一覧から辿る支援技術)には効き、これまではそもそも逃げ道が無かったためです。ナビの自動スクロールを止めれば常に効きますが、あれは現在位置を示す仕掛けなので触っていません。

🤖 Generated with Claude Code

テーマは部品ごとに輪郭が違い、入力欄には目印が無かった。2px のネイビー・
オフセット 2px にそろえ、暗い地(左のナビ・スキップリンクの板)では
白に替える。着地点そのものには輪郭を出さない。

スキップリンクは extrabody に置き、content ブロックを差し替えて本体の div に
id と tabindex を足す。左のナビが自動スクロールしているページでは Chrome が
Tab の起点を動かすので最初の Tab では来ないが、起点がページの先頭にあるときは
効く(これまでは逃げ道が無かった)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ma91n
ma91n merged commit 1d3f2d7 into future-architect:master Sep 17, 2026
2 checks passed
@ma91n
ma91n deleted the a11y-focus-skiplink branch September 17, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant