semantic-html-first について
semantic-html-firstは、インターフェース開発者向けに、操作にはネイティブHTML要素を優先するスキルです。標準のキーボード操作、フォーム動作、アクセシビリティの意味付けに基づく実装・レビュー指針を示します。
主な機能
- 01操作に合うネイティブ要素の選択
- 02ARIAによるネイティブな意味付けの補足
- 03明示的な要素構成の優先
- 04ネイティブ疑似クラスによる状態のスタイル設定
- 05DOM内のセマンティック要素の確認
活用シーン
- 01ボタンやリンクに適したHTMLの選択
- 02ネイティブな開閉領域や一時オーバーレイの構築
- 03キーボード操作と無効状態のレビュー
- 04フォーム送信とスクリーンリーダー向け意味付けの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kemiljk/ skills --skill semantic-html-firstインストール後、Claude Code で/semantic-html-firstを入力して読み込まれたか確認します。
詳細
セマンティック HTML を最優先に
セマンティック HTML はインターフェースの基盤です。ネイティブ要素を使えば、別途実装しなくてもキーボード操作、フォームへの参加、無効時の動作、アクセシビリティのセマンティクスを利用できます。
基本方針
- インタラクションに合ったネイティブ要素から始めます。
- ARIA は、
div/spanでネイティブのセマンティクスを再構築するためではなく、ネイティブのセマンティクスを補うために使います。 - 実際の要素が分かりにくくなる場合は、マジックな
asChildのポリモーフィズムより、明示的なコンポジションを優先します。 - 並行する
data-*の状態システムを使う前に、ネイティブの疑似クラス(:disabled、:checked、:open、:invalid)で状態をスタイリングします。 - ライブラリのプリミティブが存在する場合は、DOM 内に本物のセマンティック要素を出力するか確認します。
推奨/非推奨
| 推奨 | 非推奨 |
|---|---|
<button type="button"> | 必要もないのに使う <div onClick> / <span role="button"> |
ナビゲーションには <a href> | JS で遷移するだけの、ボタン風にスタイリングした div |
<details> / <summary> | 独自のキーボード操作コードを使うカスタム開示 UI |
<dialog> / Popover API | フォーカスやトップレイヤーの動作と競合するモーダル div |
ネイティブの <form> コントロール | Enter/Space/無効状態を無視するクリック可能な行 |
判断ガイド
- アクションを実行する:
button - 別の場所へ移動する:
a[href] - 関連コンテンツの表示を切り替える:
detailsまたは開示ボタン+制御対象の領域 - 一時的なオーバーレイでのタスクが必要:
dialogまたはpopover - 入力を受け取る:
form内のネイティブなフォームコントロール
レビューチェックリスト
- ネイティブ要素で実現できますか?
- 追加コードなしで Tab によるフォーカス移動が機能しますか?
- ボタンは Enter/Space で動作しますか?
- 無効状態では、操作が正しくブロックされ、公開状態も適切ですか?
- スクリーンリーダーのロールは、視覚的なコントロールと一致していますか?
- フォームコントロールはフォームと一緒に送信/リセットされますか?
- カスタム ARIA はプラットフォームの仕様を書き換えるのではなく、補足するものですか?
関連エッセイ
- セマンティックウェブについて
- セマンティック HTML を最優先にしたライブラリを作った理由
コメント
Markdown 対応