【HTML】色々な箇条書きの書き方|HTML&CSS入門講座(13)

HTML&CSS
この記事は約17分で読めます。

【HTML】色々な箇条書きの書き方|HTML&CSS入門講座(13)のPodcast

下記のPodcastは、Geminiで作成しました。

ストーリーブック

はじめに

ウェブデザインにおける情報の整理整頓は、単なる視覚的な装飾を超えた重要な役割を担っています。情報を箇条書き(リスト)として構造化することは、読者が内容を素早く理解するのを助けるだけでなく、検索エンジンやスクリーンリーダーといった機械的な解析においても、文書の論理性を示す不可欠な手段となります [1]。本稿では、HTML Living Standardにおける最新の仕様に基づいたリスト作成の基本から、CSSの最新モジュールを用いた高度なカスタマイズ、さらにはアクセシビリティの観点までを網羅し、専門的な知見から詳しく解説を行います [3]

箇条書きの基本:HTMLにおける3つのリスト要素

HTMLで箇条書きを表現する際には、その情報の「意味」に応じて適切なタグを選択することが求められます。主要なリスト形式には、順序のないリスト、順序のあるリスト、そして説明リストの3種類が存在します [3]

順序のないリスト(ul要素)

「ul」は「Unordered List」の略称であり、項目の並び順を入れ替えても情報の意味が変わらない場合に使用されます [2]。例えば、サービスの特長、買い物リスト、ナビゲーションメニューなどがこれに該当します。ブラウザのデフォルト表示では、各項目の先頭に「黒丸(ディスク)」が表示されるのが一般的です [1]

順序のあるリスト(ol要素)

「ol」は「Ordered List」の略称であり、料理のレシピ、手順の解説、ランキングなど、項目の順番に論理的な意味がある場合に使用されます [7]。ブラウザは自動的に1、2、3といった番号を各項目の先頭に付与します [6]

リスト項目(li要素)

「li」は「List Item」の略であり、`<ul>`または`<ol>`の内部で個々の項目を定義するために使用されます [1]。`<li>`要素は必ずこれらのリスト親要素の中に配置されなければならず, 単体で使用することはできません [1]

以下の表は、HTMLで提供されている主要なリスト要素とその役割をまとめたものです。

要素名正式名称主な役割とセマンティクス
`<ul>`Unordered List順序に意味を持たない情報のグループ化 [2]
`<ol>`Ordered List手順や階層など、順序が重要な情報のグループ化 [7]
`<li>`List Itemリスト内の具体的な各項目を定義 [1]
`<dl>`Description List用語とその説明(メタデータ)のセットを定義 [10]

順序のあるリスト(ol要素)を制御する属性

`<ol>`要素には、標準的な番号付けをより詳細に制御するための属性がいくつか用意されています。これらはHTML4時代に一度非推奨とされましたが、HTML5以降(Living Standard)では、文書構造において意味を持つ属性として再定義され、積極的に活用されるようになっています [7]

開始番号の変更(start属性)

start属性を使用すると、リストの開始番号を「1」以外に変更することができます [8]。例えば、長い解説の途中で一度リストを切り、次の段落で続きの番号から再開したい場合に非常に便利です。この属性には常に整数値を指定します [1]

逆順のカウントダウン(reversed属性)

reversed属性は、リストを降順(例:3, 2, 1)で表示したい場合に指定する論理属性です [9]。トップ10のカウントダウン形式などで効果を発揮します。この属性は単に見た目を逆転させるだけでなく、ブラウザに対して「これは逆順のリストである」という論理的な意味を伝えます [7]

マーカー形式の指定(type属性)

type属性は、数字(1)、アルファベット(a, A)、ローマ数字(i, I)といったマーカーの種類を指定します [1]。現在、視覚的なスタイリングはCSSで行うことが一般的ですが、その項目がアルファベットで参照されるべき(例:「項目aを参照」)という論理的な意味がある場合には、この属性の使用が適切です [7]

属性名指定できる値の例効果
start整数(例:start="5")指定した数値からカウントを開始する [8]
reversedなし(論理属性)番号を大きい順(降順)に表示する [11]
type1, a, A, i, I番号の表示形式(数字・文字)を指定する [1]

用語と説明を繋ぐ:説明リスト(dl要素)の活用

説明リスト(dl要素)は、ある用語(dt要素)とそれに対する説明(dd要素)を関連付けるための特殊なリスト形式です [10]。辞書、FAQ、メタデータの表示、あるいは著者のプロフィール紹介など、キーと値が対になる情報の構造化に最適です [5]

説明リストの構成要素

`<dl>`: 説明リスト全体のコンテナです [10]

`<dt>`: 「Description Term」の略で、説明される対象となる用語を指定します [3]

`<dd>`: 「Description Details」の略で、用語に対する具体的な内容を記述します [6]

最新のマークアップ手法(divによるグループ化)

最新のHTML仕様では、スタイリングを容易にするために、`<dl>`要素の直下に`<div>`要素を配置し、その中で`<dt>`と`<dd>`を囲むことが公式に認められています [10]。これにより、FlexboxやGridレイアウトを用いて、用語と説明を横並びに配置する際の実装が極めてスムーズになります [6]

CSSによる箇条書きのスタイリング

リストの視覚的な外観は、CSS(Cascading Style Sheets)を用いることで、サイトのデザインに合わせて自由自在にカスタマイズ可能です [14]

list-styleプロパティによる基本装飾

リストのマーカー(点や番号)を制御する主要なプロパティは以下の通りです [15]

list-style-type: マーカーの種類を指定します。disc(黒丸)、circle(白丸)、square(四角)のほか、noneを指定することでマーカーを非表示にできます [15]

list-style-image: 任意の画像をマーカーとして表示させたい場合に使用します [15]。ただし、画像サイズなどの制御が難しいため、後述する擬似要素を用いた手法の方が現在では一般的です [15]

list-style-position: マーカーをリスト項目の「外側(outside)」に置くか「内側(inside)」に置くかを指定します [15]。insideを指定すると、2行目以降のテキストがマーカーの真下から始まるようになります [8]

多彩な日本語マーカー

日本のウェブサイト制作において、list-style-typeには特有の値を指定することが可能です [15]

cjk-ideographic: 一、二、三...といった漢数字。

hiragana: あ、い、う...といった平仮名。

katakana: ア、イ、ウ...といった片仮名。

hiragana-iroha: い、ろ、は...といった「いろは」順。

リスト装飾の最新標準:::marker擬似要素

CSS Lists and Counters Module Level 3で導入された::marker擬似要素は、リストの先頭にある記号や番号(マーカーボックス)を直接選択し、個別にスタイルを適用することを可能にしました [18]。これまで、マーカーの色だけを変えるには、一度デフォルトのマーカーを消して::beforeで自作する必要がありましたが、現在はよりシンプルに実装できます [17]

::markerで制御可能なプロパティ

::markerに適用できるプロパティは、アクセシビリティやレイアウトの整合性を保つため、限定されています [19]

color: マーカーの文字色を変更できます [18]

フォント関連(font-family, font-sizeなど): マーカーの大きさや書体を変更できます [19]

content: マーカーの内容そのものを、独自の文字列や絵文字に変更可能です [15]

複雑な番号付けを実現するCSSカウンタ

ウェブサイトの章立てや、ネストされた深い階層構造において、「1-1」「1-2-1」のような形式で自動的に番号を振りたい場合、CSSカウンタ(CSS Counters)機能が非常に強力です [20]

カウンタの基本的な仕組み

CSSカウンタは、ブラウザ内で保持される「変数」のようなものです [20]。以下のステップで運用します。

1. 初期化 (counter-reset): 親要素(例:bodyやul)でカウンタに名前を付け、数値を「0」などの初期値に設定します [21]

2. 加算 (counter-increment): 番号を付けたい要素(例:liやh2)が出現するたびに、カウンタの値を増やします [20]

3. 表示 (content属性とcounter()関数): 擬似要素(::beforeなど)のcontentプロパティ内で、現在のカウンタの値を呼び出して画面に表示します [22]

多階層での利用(counters関数)

入れ子構造のリストで親階層の番号を引き継ぎたい場合は、counter()の代わりにcounters()(複数形)関数を使用します [23]。第2引数に区切り文字(例:.)を指定することで、「1.1.2」のような洗練されたドキュメント構造をCSSだけで構築できます [23]

リストのアクセシビリティ:すべてのユーザーに情報を届ける

箇条書きの実装において、視覚的な美しさ以上に考慮すべきなのがアクセシビリティです。特にスクリーンリーダー(画面読み上げソフト)を使用するユーザーにとって、箇条書きが正しく「リスト」として認識されるかどうかは、情報の理解度に大きく関わります [26]

list-style: noneとセマンティクスの喪失

一部のブラウザ環境(特にSafari/VoiceOverなど)では、CSSでlist-style: noneを指定してマーカーを消すと、その要素が「リスト」としての性質を失ったと判断され、項目の個数などが読み上げられなくなる現象が報告されています [28]。これを回避するため、デザイン上マーカーが不要なリストであっても、以下の対策を講じることが推奨されます [29]

role属性の付与: `<ul role="list">`のように、WAI-ARIAのロールを明示的に指定することで、読み上げソフトに対して「これはリストである」と再定義します [29]

適切な要素の選択: 単なる装飾目的の横並びであればリストを使わず、意味的に重要な情報の集合であれば、上記のような補完を行いながらリスト構造を維持します [26]

読みやすい行間と余白の設定

視認性を向上させるためには、行間(line-height)と項目間の余白を適切に確保することが重要です [32]。テキストサイズに対して少なくとも1.5倍以上の行間を設定し、各項目の間に十分なマージンを設けることで、注意力が散漫なユーザーや視覚障害を持つユーザーにとっても、情報の境界が明確になります [32]

リストを用いた現代的なレイアウト手法

HTMLのリスト要素は、箇条書き以外にもナビゲーションメニューやカード型レイアウトのベースとして多用されます [8]

Flexboxによる横並びナビゲーション

グローバルナビゲーションを作成する際、`<ul>`と`<li>`の組み合わせにdisplay: flexを適用するのが現代のデファクトスタンダードです [14]。この際、各`<li>`内のリンク(`<a>`要素)のクリック領域を十分に確保(例えば44x44ピクセル以上)することは、モバイルユーザーの操作性(アクセシビリティ)を高める上で不可欠な配慮です [33]

階層構造(ネスト)の注意点

リストを入れ子にする場合、子リストは必ず親の`<li>`タグの中に配置しなければなりません [2]

html

<ul>
  <li>親項目1
    <ul> <li>子項目1-1</li>
    </ul>
  </li>
</ul>

この構造を正しく保つことで、検索エンジンは情報の親子関係を正確に理解し、スクリーンリーダーは階層の深さをユーザーに伝えることができます [2]

結論と今後の展望

HTMLとCSSにおける箇条書きの実装は、単なるテキストの装飾を超え、文書の論理構造を定義し、多様なデバイスやユーザー環境に対して情報を最適化するための重要な技術です [4]。`<ul>`、`<ol>`、`<dl>`といった要素を意味的に正しく使い分け、::markerやCSSカウンタといった最新のスタイリング手法を取り入れることで、管理しやすく、かつ表現力豊かなウェブサイトを構築することが可能になります [18]。特にアクセシビリティへの配慮は、今後のウェブ標準においてますます重要性を増していきます [27]。技術の進化により、デザインの自由度は高まっていますが、常に「情報の意味」と「ユーザーへの伝わりやすさ」を主軸に据えたマークアップを心がけることが、プロフェッショナルなウェブ制作に求められる本質的なスキルと言えるでしょう [31]

参考資料

1. HTML elements reference, https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements

2. Introduction — HTML Living Standard, https://html.spec.whatwg.org/dev/introduction.html

3. HTML Living Standard - Elements Index, https://html.spec.whatwg.org/multipage/indices.html

4. CSS Lists and Counters Module Level 3, https://www.w3.org/TR/css-lists-3/

5. CSS lists and counters module, https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Lists

6. ::marker - CSS: Cascading Style Sheets, https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::marker

7. CSS Lists and Counters Module Level 3 (Working Draft), https://www.w3.org/TR/2011/WD-css3-lists-20110524/

8. Using CSS counters, https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Counter_styles/Using_counters

9. counters() - CSS: Cascading Style Sheets, https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/counter

10. counter() - CSS: Cascading Style Sheets, https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/counter

11. Using CSS counters (GitHub MDN Content), https://github.com/mdn/content/blob/main/files/en-us/web/css/guides/counter_styles/using_counters/index.md?plain=1

12. ARIA roles - Accessibility, https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles

13. WAI-ARIA basics, https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Accessibility/WAI-ARIA_basics

14. A Beginner's Guide to ARIA for Accessibility, https://www.lullabot.com/articles/what-heck-aria-beginners-guide-aria-accessibility

15. WAI-ARIA Authoring Practices Guide, https://wai-aria-practices.netlify.app/aria-practices/

16. WebAIM: Discussion on list-style-type:none and screen readers, https://webaim.org/discussion/mail_thread?thread=5579

17. デジタル庁 ウェブアクセシビリティ試験結果, https://www.digital.go.jp/accessibility-statement/test-result

18. 箇条書きのアクセシビリティ対応について, https://tane-creative.co.jp/column/7215/

19. HTML 4.01 Specification - Lists, https://www.w3.org/TR/html401/struct/lists.html

20. HTML elements reference (Standard List), https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements

21. HTML Lists: A Complete Guide, https://elementor.com/blog/html-lists/

22. Everything You Need to Know About HTML Lists, https://dev.to/nikolasbarwicki/everything-you-need-to-know-about-html-lists-5ao0

23. CSS Lists and Counters Guide, https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Lists

24. CSS Lists and Counters Module Level 3 (Standard), https://www.w3.org/TR/css-lists-3/

25. CSS Lists and Counters Module Level 3 (W3C Working Draft), https://www.w3.org/TR/2011/WD-css3-lists-20110524/

26. ::marker (MDN Reference), https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements

27. ::marker | CSS-Tricks, https://css-tricks.com/almanac/pseudo-selectors/m/marker/

28. Using CSS counters (MDN Guide), https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Counter_styles/Using_counters

29. How to Create CSS Counters to Automatically Number Lists, https://www.thatsoftwaredude.com/content/13928/css-counters

30. Customize nested numbered list styles, https://support.knowledgeowl.com/help/customize-nested-numbered-list-styles

31. web.dev: Counters and list styles, https://web.dev/learn/css/counters

32. CSS Counters: Unlocking the Power of Stylish Numbering, https://dev.to/muhammadmedhat/css-counters-unlocking-the-power-of-stylish-numbering-2p4o

33. WAI-ARIA basics (Updated), https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Accessibility/WAI-ARIA_basics

34. ARIA Patterns and Design Guide, https://elementor.com/blog/apg-explained/

35. WAI-ARIA Specification, https://w3c.github.io/aria/

36. HTML: A good basis for accessibility, https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Accessibility/HTML

37. A Beginner's Guide to WAI-ARIA, https://medium.com/@ignatovich.dm/a-beginners-guide-to-wai-aria-making-web-applications-accessible-6c29a996e064

38. HTML ol element attributes, https://www.w3.org/TR/2012/WD-html-markup-20121025/ol.html

39. HTML5 Doctor: The ol element and its attributes, http://html5doctor.com/ol-element-attributes/

40. HTML reversed Attribute, https://www.geeksforgeeks.org/html/html-ol-reversed-attribute/

コメント

タイトルとURLをコピーしました