1 ポイント 投稿者 GN⁺ 9 시간 전 | 2件のコメント | WhatsAppで共有
  • `` は、名前と値のペアの一覧を意味的に表現する HTML 要素で、宿泊施設の設備、請求項目、技術用語集のような UI パターンに適している
  • 説明リストは 名前** と ** を `` の中に配置する構造で、1 つの名前に複数の値を対応づけることもできる
  • スタイリングのために関連する をまとめる必要がある場合、仕様上は `` ラッパー だけがグループを囲める
  • 入れ子の だけでもリストパターンは作れるが、支援技術はそのパターンを認識しにくく、 は項目数、現在位置、リストのスキップといったナビゲーション上の利点を提供する
  • Dungeons & Dragons のステータスブロックのように、異なる形式の数値・能力・行動データも説明リストとして分割でき、汎用性の高さがよく分かる

`` が表現するパターン

  • `` は、名前と値のペアの一覧を表現する HTML 要素であり、Web UI で繰り返し現れるパターンに意味を与える
  • 宿泊施設の設備、家賃の個別請求項目、技術用語集のように、名前と値 が対になる構造が代表的な候補になる
  • は単独の要素ではなく、 の 3 要素の組み合わせで名前と値のグループを構成する
  • HTML5 以前、`` は definition list と呼ばれており、もともとは用語と定義の用語集を表現するための要素だった

説明リストの基本構造

  • 、``

    • **** は説明リスト全体を包み、 や `` がリスト全体を囲むのと似た役割を持つ
    • ** は説明語句 (description term) として名前を表し、** は説明詳細 (description detail) として値を表す
    • も以前はそれぞれ definition term、definition detail として知られていた
    • 基本構造は 1 つの の後ろに 1 つの を置く形である

	Title
	Designing with Web Standards

  • 複数の名前と値のペア

    • 同じリストの中に別の名前と値のペアを追加するには、新しい を続けて配置する

	Title
	Designing with Web Standards
	Publisher
	New Riders Pub; 3rd edition (October 19, 2009)

  • 1 つの名前に複数の値

    • 1 つの は複数の ** 値** を持てる
    • 本に著者が複数いる場合のように、1 つの名前に複数の値が付く構造をそのまま表現できる

	Title
	Designing with Web Standards
	Author
	Jeffrey Zeldman
	Ethan Marcotte
	Publisher
	New Riders Pub; 3rd edition (October 19, 2009)

  • スタイリングのためのラッパー

    • 関連する をスタイリング目的でまとめたい場合は、`` ラッパー を使える
    • 仕様上、/ グループを囲めるラッパー要素は `` のみである
    • より詳しい許可構造と制約は MDN の `` ドキュメントHTML 仕様 で確認できる

		Title
		Designing with Web Standards

		Author
		Jeffrey Zeldman
		Ethan Marcotte

セマンティクスが必要な理由

  • 名前と値のグループは、入れ子の `` だけでも視覚的には作れるが、ブラウザや支援技術がそれを リストパターン として認識するのは難しい
  • セマンティックな要素の選択は、コンピュータがそのパターンを認識したときに、利用者へ実質的な利点が生まれるかどうかを基準に判断できる
  • `` を使うと、スクリーンリーダー利用者は名前と値のグループの一覧をより簡単に移動できる
    • リスト内の 名前と値のグループ数 を把握できる
    • 現在リストのどの位置にいるかを把握できる
    • 関心がなければリスト全体を 1 つのブロックのようにスキップできる
  • 入れ子の 構造では各名前と値が独立したテキストノードのように扱われるが、 は同じ情報に 構造的な意味 を与える
  • こうした利点は、大半のブラウザ/スクリーンリーダーの組み合わせ で `` を使った場合に実際に提供される
  • ただし のサポートはまだ十分に一般的とはいえないため、独立したテキストノードとして扱われるフォールバック体験で不十分なら、サポートが改善されるまで のような別の要素を選ぶこともできる

Dungeons & Dragons ステータスブロックの例

  • Dungeons & Dragons のステータスブロックは、名前と値のペアが多い例であり、1 つのステータスブロックの中に複数の説明リスト候補を見つけられる
  • Armor Class、Hit Points、Speed のような基本数値、STR・DEX のような能力値、Senses・Languages・Challenge のような習熟情報、Traits、Actions をそれぞれ説明リストとして分けられる
  • 視覚的に異なる能力値リストと攻撃リストも、どちらも 説明リストパターン として表現できる
  • 複数の説明リストを区別したり、見出しと関連付けたりする際には aria-labelaria-labelledby を使える
  • このマークアップは可能な方法の 1 つであり、`` パターンが異なる形のデータのまとまりにも適用できるほど 汎用的 であることを示している

2件のコメント

 
GN⁺ 6 시간 전
Lobste.rsの意見
  • Markdownに説明リスト(description list) がないのは残念
    • Pandoc風のMarkdown少なくとも2種類の構文で説明リストをサポートしている
      ただし、ほとんどの実装が対応していないのはその通り。一方で組版システム/マークアップ言語のTypstは、/ term: descriptionのように説明リストを第一級の構文として提供していて、-の箇条書きリストや+の自動番号付きリストとも相性が良いと思う
    • Hugo、Pandoc、GFMのような一部の実装はこういう形式をサポートしていた記憶がある
      dt  
      : dd  
      
      dt  
      : dd  
      
    • MarkdownはHTMLが持っているものをすべて持てる。HTMLの上位集合だから
    • https://www.djot.net/ は説明リストをサポートしている。さらに重要なのは、DjotはHTMLの上位集合ではないので、肥大化したHTML対応ブラウザの外でも使えること
  • 個人的には歴代トップ5に入る要素
    • <details>と並んで間違いなく上位。こういうインタラクティブ要素がもっと増えてほしい
  • 1つの項目に<dt>を複数置くこともできる。辞書形式のリストで同義語のようなものを表現するときに使える
    CSSでスタイリングするときは隣接兄弟セレクタに慣れておくとよい
    参考: https://developer.mozilla.org/en-US/docs/…
 
GN⁺ 9 시간 전
Hacker Newsの意見
  • これは間違っている: には対応する暗黙の役割はないが、`group`、`list`、`none`、`presentation` の役割は与えられる `aria-label` は、暗黙的または明示的に互換性のある役割を持つ要素に対してのみ定義でき、`aria-label` はほとんどの役割で許可されているが、ここでは `presentation` と `none` が外れるので、`group` と `list` だけが残る `group` は不自然で、`list` は許容できるので、結論は **aria-label を外すか** `role="list"` を追加すべきということになる。そうすると子には `role="listitem"` も必要になる 記事で見落としているのは、 は 1 つだけ来るのではなく、複数が連続することもあるという点だ。仕様の例がよい: https://html.spec.whatwg.org/multipage/grouping-content.html... これは名前と値の組ではなく、名前と値のグループ

    • これはまったく知らなかった。気になるのだが、 を包む 要素に `role="listitem"` を付けるつもり? `role="listitem"` は では許可されているようだが、複数の が一緒に束ねられる場合には正確ではないように見えるし、 が本来用語として解釈される挙動まで壊してしまうのかはよく分からない
    • 昔の HTML5 Doctor の記事が今でもいちばん好きだ: https://html5doctor.com/element-index/
  • ここでは不人気だろうが、セマンティック HTML を使おうと頑張らなくなってから人生が楽になった。設計が単純によくない を使おうとするたび、結局後悔した。何層ものラッパーが必要になったり、セクション間の区切り線が必要になったり、アイコンが必要になったり、複数のキーと値の組にまたがる見出しが必要になったりするからだ ある程度の柔軟性はあるが、標榜している一般化された概念を実際に扱うには到底足りない。もちろん, `` のように観測可能な利点がある対応要素は今でも使うが、データモデルにぴったり合うわけでもなく、全面的に上書きしなければならないなら実用的な選択ではない 利用の 99% が API を回避することなら、それはたぶん API の側が悪い と言うのは、そこまで物議を醸す話ではない

    • スクリーンリーダーを毎日使う立場として本当に同意する W3C がイデオロギー的なセマンティクス純粋主義のたわごとをやめて、もっと現実政治的に取り組めば、みんなにとってよくなるはずだ。API が意味論的に純粋かどうかより、開発者が何をしたいのか、反対されてもどんな抜け道を使うのか、そしてその作業をみんなにとって最大限有益に実現する方法を見るべきだ ARIA live region はその完璧な例だ。開発者が本当に欲しいのは document.speakText だ。実際にあるのは、ページのテキストが変わったときにそれを読み上げる奇妙な API だ。その間を埋めなければならないが、うまく実装しても難しく、ほとんどハックに近い。それでも少なくとも live region 方式は意味論的に純粋な HTML ではあるのだろう
    • それはむしろ CSS の側の問題 のように聞こえる。display:contents でラッパーを消せるようにしたように、共通の祖先があるかのように要素をグループ化する方法も導入すべきだと思う :wrap(dt, dt+dd) {border: solid 1px}
    • HTTP についても似たように感じる。このプロトコルは、S3 のような リソースストア には本当によく合っている。GET、PUT、DELETE はどれも筋が通っているし、HTTP ステータスコードもまさにこの用途向けに作られている だが Web 開発者として、たいていはリソースストアを作っているわけではない。そういうものは非常に汎用的なので、一度作れば何百万ものアプリが使える。誰かが HTTP とやり取りするコードを書くとき、その大半はリモートプロシージャコールをしている GraphQL、gRPC、その他のリモートプロシージャコールシステムを使えば、こうしたことを丸ごと避けられる。すべてを単一エンドポイントに POST し、抽象化レイヤーを 1 つ上げることで、アプリケーションに非常に特化した状況ごとに 4XX/5XX エラーを返さなくて済む RFC の執筆者たちが少しやりすぎたのは確かだ。402 Payment Required407 Proxy Authentication Required508 Loop Detected は、特定のアプリやデプロイ形態に特化した機能を Web の土台に押し込もうとしたように見える なぜ RFC 執筆者の具体的な必要は Web の土台に実装され、私の必要はたまたま重なる部分を探して、アプリ特化の要素を全部 400 Bad Request500 Internal Server Error に押し込めなければならないのか分からない。Web アプリが最低限以上の HTTP ステータスコードを実際に活用しているのを見るたびに目を回したくなる。そういうものはアプリケーション層に置くべきだ。このプロトコルはあなたのために作られたのではなく、主に静的アセットを配信していた LAMP スタックのアプリ のために作られたのだ
  • リストの歴史の授業だ。下の 1985 年の IBM メインフレーム DCF/GML マニュアルを見ると、DL-DT-DD は Web 以前から存在していた 40 年以上前の文書には、Definition lists (DL) のほかに Glossary lists (GL)、Ordered lists (OL)、Unordered lists (UL)、Simple lists (SL) が出てくる ibm :: 370 :: DCF :: SH35-0050-2 Document Composition Facility Generalized Markup Language Implementation Guide Rel 3 Mar85 https://archive.org/details/bitsavers_ibm370DCFSpositionFaci...

    • GML は 1969 年、SGML は 1970 年代にまでさかのぼる。内部では BookMaster というものを使っていて、HTML の前身のようにも見えた `` の代わりに :p.、`
  • の代わりに:li.` のような感じだった。1990〜1991 年ごろに TBL が HTML と HTTP を開発していた時期には、ハイパーメディアに焦点を当てた SGML アプリケーションである HyTime という試みもあった。HTML がかなり早くそれを押しのけた GML/SGML を率いた Charles Goldfarb については https://en.wikipedia.org/wiki/Charles_Goldfarb、SGML については https://en.wikipedia.org/wiki/Standard_Generalized_Markup_La... を参照

    • IBM Generalized Markup Language が SGML (Standard Generalized Markup Language) に発展し、Tim Berners-Lee が HTML に取り組んでいた CERN でも SGML が多用されていたと理解している。HTML はそこから大きく派生した HTML で興味深いのは、ある種のマークアップ言語が数十年にわたって存在していて、Berners-Lee がそこに ハイパーリンク を加えたという点だ
    • 今は description list じゃないの?
  • 世界初の Web サイトでは `` が多用されている https://info.cern.ch/hypertext/WWW/TheProject.html https://info.cern.ch/ は、本物の最初の Web サイトに関する文脈と案内を与える一種のランディングページだ

  • ネイティブ GUI ツールキットはみんな死んだのに、今では人々が HTML 要素 1 つ をめぐって長文のエッセイを書ける。これが進歩なのだろうか

  • HTML5 以前はこれを definition list と呼んでいて、もともと `` は用語と定義からなる glossary だけを表すものだったと、今になって知った。10 年間ずっと名前を間違えていたよ

    • b が今では「bring attention to」だなんて。まったく
    • あなただけじゃない。今週これを見るのは 2 回目で、最初は誤記だと思った
    • definition list から名前が変わっていたのを今知った
    • HTML5 が標準化された年は確認したくない。10 年どころではない可能性が高いので ;)
  • いい記事だ。ごく些細な難癖をつけるなら、small 要素はサブタイトルに使うべきではなく、その用途には hgroup 要素を使うべきだ small 要素は、小さな文字の補足コメントのようなものを表す。小さな文字には通常、免責事項、注意事項、法的制限、著作権が入る。帰属表示やライセンス要件を満たすために使われることもある (https://html.spec.whatwg.org/multipage/text-level-semantics....)

  • スクリーンリーダーが `` をどれくらいうまくサポートしているかについての有用なメモがある: https://adrianroselli.com/2025/01/updated-brief-note-on-desc...

  • DnD 能力値シートの最後の例を見て、`` を ネスト しても合法なのか気になった たとえば Actions ... のようにできる?

  • は好きだ。少なくとも昔は、テーブルが のように誤用されるケースのほうが多かった気がするし、テーブルマークアップの不便さは div をいくつも並べるよりひどい

    • 不要な閉じタグを省略すれば、そこまで不便ではない first second what ever どんな Markdown テーブル構文 よりも単純で整っていると思う
    • そうだね。でもテーブルが `` の代役を強いられるのは、テーブルの誤用の中ではずっとましな部類だった
    • ずっと `` をテーブルの単一行みたいなものだと思っていた