「HTMLでリストを作りたいけど、どうやって書けばいいのか分からない…」って思うことありますよね。
ulやol、liタグなど、見慣れないタグがたくさん出てきて、最初はちょっと戸惑うかもしれません。
今回は、HTMLでリストを作る基本の書き方から、JavaScriptでループ処理を使ってリストを自動で作る方法まで、わかりやすく解説します。
この記事を読めば、順番のあるリストやメニュー、チェックリストなど、いろんな種類のリストを自分で作れるようになりますので、ぜひ最後まで参考にしてください。
HTMLでリストを作成する基本構文

ulタグとliタグの基本的な使い方
HTMLで「順番のないリスト」を作るときに使うのが、ulタグとliタグです。
これは、メニューや項目の一覧を表示したいときによく使われます。
とてもシンプルな書き方で、初心者でもすぐに覚えることができます。
以下に、ulタグとliタグの使い方のポイントをまとめます。
- ulタグはリスト全体を囲む親のタグ
- liタグは1つ1つの項目を表す子のタグ
- ulの中にliを入れて順番に並べる
- liは好きな数だけ追加できる
- ブラウザで見ると●のような印が自動でつく
例えば、以下のようなコードになります。
<ul>
<li>りんご</li>
<li>バナナ</li>
<li>みかん</li>
</ul>
このように書くと、3つの果物が●付きで表示されます。
とても簡単ですが、見た目を整えるのにとても便利なので覚えておきましょう。
olタグとliタグの使い方と違い
olタグは、ulタグとよく似ていますが、順番があるリストを作るときに使います。
例えば「手順」や「ランキング」のように、数字で順を追いたいときに使います。
使い方の違いを、わかりやすくまとめてみます。
- olタグは番号付きのリストを作る
- ulタグは記号(●)付きのリストを作る
- liタグはどちらにも共通して使う
- 見た目の違いは自動でつく
- 順番が重要ならolタグを使う
例えば以下のようなコードになります。
<ol>
<li>HTMLを書く</li>
<li>CSSを書く</li>
<li>ブラウザで表示する</li>
</ol>
このように、数字が自動でついて順番がわかりやすくなります。
手順やランキングにはolタグがぴったりです。
入れ子のリスト構造の書き方
リストの中にさらにリストを入れたいときは、「入れ子(ネスト)」と呼ばれる書き方をします。
これは、階層的な情報を表すときにとても便利です。
子リストは親リストのliタグの中に入れます。
まずはネストリストを書くときのポイントです。
- liタグの中にulまたはolを入れる
- インデント(字下げ)すると見やすくなる
- 何段階でもネストできるが、2〜3階層までが見やすい
- 子リストにもliタグが必要
- ulとolは自由に組み合わせできる
以下に具体的なコードの例を紹介します。
<ul>
<li>果物
<ul>
<li>りんご</li>
<li>バナナ</li>
</ul>
</li>
<li>野菜</li>
</ul>
このように、親リストの中に子リストを入れると、見出しとその中の項目のように整理して表示できます。
dlタグ・dtタグ・ddタグの定義リストとは
dlタグは、用語とその説明をペアで表示するためのリストです。
ulやolとは少し違い、定義と説明をセットで書くスタイルになります。
たとえば、辞書のような使い方ができます。
この3つのタグの関係を見てみましょう。
- dlタグがリスト全体を囲む
- dtタグが用語(定義)を表す
- ddタグがその説明を表す
- 1つのdtに複数のddをつけてもOK
- 順番や●は表示されない
以下は実際のコードです。
<dl>
<dt>HTML</dt>
<dd>ウェブページを作るための言語</dd>
<dt>CSS</dt>
<dd>ページのデザインやレイアウトを指定する言語</dd>
</dl>
このように、言葉と説明をセットで表示したいときにはとても便利です。
学校の単語帳のように使えます。
HTMLリストの表示スタイルをCSSで変更する方法
HTMLで作ったリストは、そのままだとシンプルな見た目になります。
でも、CSSを使えば見た目を自由に変えることができます。
ここでは、よく使うリストのカスタマイズ方法を紹介します。
リストのスタイルを変えるには、CSSのlist-styleプロパティを使います。
- list-style-typeでマークの種類を変える
- noneにすれば●や番号を消せる
- list-style-positionでマークの位置を調整
- カスタムアイコンと組み合わせることも可能
- liに余白や色をつけてデザイン性UP
例えば以下のようなコードで●を消すことができます。
ul { list-style-type: none; }
また、数字の代わりにローマ数字やアルファベットを使うこともできます。
ol { list-style-type: upper-roman; }
このように、リストのデザインはCSSで簡単に変えられます。
見やすさやデザインにこだわりたいときはぜひ活用しましょう。
HTMLリストをループ処理で動的に生成する方法

JavaScriptを使ったリストの生成方法
HTMLだけではリストは手作業で書く必要がありますが、JavaScriptを使えば、データから自動的にリストを作ることができます。
これは「ループ処理」を使って、繰り返しliタグを作成するというやり方です。
まず、JavaScriptでリストを作るための基本の流れを紹介します。
- JavaScriptでデータ(配列など)を用意する
- ulやolなどの親要素を作る
- ループを使ってliタグを1つずつ追加する
- 最後に親要素をHTML内に追加する
以下は簡単なサンプルコードです。
const fruits = ['りんご', 'バナナ', 'みかん'];
const ul = document.createElement('ul');
fruits.forEach(function(fruit) {
const li = document.createElement('li');
li.textContent = fruit;
ul.appendChild(li);
});
document.body.appendChild(ul);
このように書けば、配列に入っているフルーツの名前がすべてリストとして表示されます。
データが増えてもコードを変える必要がないので、とても便利です。
配列データからli要素を作成する手順
配列からliタグを作成するには、JavaScriptのループ機能を使います。
配列とは、たくさんのデータを1つにまとめた入れ物のようなものです。
手順をわかりやすく箇条書きで紹介します。
- 配列を用意する(例:果物一覧)
- ulタグを作成する
- forやforEachで配列をループする
- ループの中でliタグを作り、テキストを入れる
- 作ったliをulの中に追加する
- 最後にulをHTMLに追加する
例えば以下のようなコードになります。
const animals = ['ねこ', 'いぬ', 'うさぎ'];
const ul = document.createElement('ul');
for (let i = 0; i < animals.length; i++) {
const li = document.createElement('li');
li.textContent = animals[i];
ul.appendChild(li);
}
document.body.appendChild(ul);
このように、配列の中身が変わっても自動でリストを作れるので、実用性がとても高いです。
テンプレートリテラルを活用したリスト作成
テンプレートリテラルとは、文字列の中に変数を埋め込むことができる書き方です。
バッククォート(`)を使って書きます。
HTMLタグとJavaScriptの変数を混ぜて書きたいときに便利です。
次に、テンプレートリテラルを使ったリスト作成の流れを紹介します。
- バッククォート ` を使って文字列を書く
- ${変数} で中にデータを入れる
- liタグを1つの文字列として作る
- +=でリストのHTMLをつなげる
- 最後にinnerHTMLでulに入れる
以下のようなコードになります。
const colors = ['赤', '青', '黄'];
let html = '<ul>';
colors.forEach(color => {
html += `<li>${color}</li>`;
});
html += '</ul>';
document.body.innerHTML = html;
この方法は、とても短く書けてスッキリします。
HTMLコードをまとめて作りたいときにおすすめです。
DOM操作でul/ol要素を追加する方法
DOM操作とは、HTMLの要素をJavaScriptで作ったり、変更したりすることです。
リストを作るときも、DOMを使えば自由にHTMLを動かせます。
ここでは、DOMを使ってリストを追加するステップを紹介します。
- document.createElementでulタグを作る
- liも同じように作る
- textContentで文字を入れる
- appendChildで追加する
- 最終的にbodyやdivに追加する
以下はその実例です。
const sports = ['サッカー', 'バスケ', '野球'];
const list = document.createElement('ul');
sports.forEach(sport => {
const li = document.createElement('li');
li.textContent = sport;
list.appendChild(li);
});
document.body.appendChild(list);
この方法は、リストだけでなく、どんなタグも自由に追加できるのが特徴です。
Webページを動的に作る基本として覚えておきましょう。
ループ処理におけるindexの使い方と注意点
ループ処理では、何番目のデータかを表す「index(インデックス)」を使うことがよくあります。
これは、配列の中での順番を表す数字で、0から始まるのが特徴です。
indexを使うときに知っておきたいポイントをまとめます。
- indexは0からスタートする
- for文では i や index という名前を使うことが多い
- 何番目の要素かを表示したいときに便利
- 順番に番号をつけるリストで活躍する
- lengthと組み合わせて使うと便利
例えば、以下のように使います。
const items = ['A', 'B', 'C'];
for (let i = 0; i < items.length; i++) {
console.log(i + ': ' + items[i]);
}
このように、順番付きのリストを作るときにindexはとても役立ちます。
ただし、1から始めたいときは「+1」をするのを忘れないようにしましょう。
配列の中身を条件分岐してリスト表示する
配列の中には、条件によって表示したいものとしたくないものがあるかもしれません。
そんなときは、if文などで条件を分けて表示するリストを作ります。
条件分岐でリストを作るための考え方は以下の通りです。
- 配列からデータを取り出す
- if文で条件をチェックする
- 条件に合えばliを作る
- 合わなければスキップする
- 最終的にulやolに追加する
以下は、例として「3文字以上の言葉だけ」をリストにするコードです。
const words = ['犬', 'ねこ', 'ペンギン'];
const ul = document.createElement('ul');
words.forEach(word => {
if (word.length >= 3) {
const li = document.createElement('li');
li.textContent = word;
ul.appendChild(li);
}
});
document.body.appendChild(ul);
このように、条件をつけることで、より柔軟なリスト作成ができるようになります。
表示したいものだけを選ぶには、この方法がとても便利です。
ループの種類(for, forEach, map)の違い
JavaScriptにはループ処理の方法がいくつかあります。
それぞれ使い方に特徴がありますが、どれもリスト作成に活用できます。
違いを知っておくと、目的に合わせた選び方ができます。
ループの種類と特徴をまとめます。
- for文:自分でindexを管理できる
- forEach:配列の要素を順番に処理する
- map:新しい配列を作るときに便利
- 初心者にはforEachが一番わかりやすい
- 出力やHTML生成にはforまたはforEachが向いている
たとえばforEachを使った例は以下の通りです。
const names = ['たろう', 'はなこ', 'じろう'];
names.forEach(name => {
console.log(name);
});
このように、場面に合わせてループ処理を使い分けることで、リスト作成がもっとスムーズになります。
まずはforEachから始めてみるのが良いでしょう。
HTMLリストでよくあるエラーとその対処法

liタグの閉じ忘れによる表示崩れ
HTMLでリストを作成する際にliタグの閉じ忘れはとても多いミスのひとつです。
liタグはリストの中の1項目を表しますが、これをきちんと閉じないとレイアウトが崩れてしまったり、予期しない表示になったりします。
HTMLはある程度自動で補完してくれますが、完璧ではありません。
閉じ忘れが起きやすいケースをまとめます。
- liタグの終了タグ </li> を忘れる
- 入れ子になっているliが途中で切れている
- li内にdivやpなど別のブロック要素を入れてバランスが崩れる
- 開きタグと閉じタグの数が合っていない
- コピペの途中で一部のタグが消えてしまう
このようなミスを避けるためには、コードを書くたびにタグをペアで意識する習慣が大切です。
エディターの補完機能やHTMLの整形機能も活用すると安心です。
ulやolタグを正しくネストできていない例
ulやolタグを複数階層で使うときは、正しく入れ子構造にする必要があります。
これがうまくできていないと、表示が乱れてしまったり、CSSが意図したとおりに効かなくなったりします。
間違いやすいネストのパターンを紹介します。
- liの外にulやolを書いてしまう
- ulの中に直接ulを入れてしまう(liを使わずに)
- 閉じタグの順番を間違える
- ネストの深さがわかりにくくなる
- インデントせずに書いて見づらくなる
正しい例は次のようになります。
<ul>
<li>どうぶつ
<ul>
<li>ねこ</li>
<li>いぬ</li>
</ul>
</li>
</ul>
このように、ulやolは必ずliの中に入れてネストするようにしましょう。
CSSリセットがリスト表示に与える影響
リストをデザインするとき、CSSリセットを使っていると、リストマークや番号が消えてしまうことがあります。
これは、開発者が全体のスタイルを初期化するためにlist-styleをnoneに設定しているためです。
リセットCSSがリストに与える影響とその対処方法をまとめます。
- list-style-typeがnoneになっている
- ulやolにpaddingやmarginが0にされている
- liの前の●や番号が表示されなくなる
- リストが左に詰まりすぎて読みにくくなる
- デフォルトのスタイルがなくなるので、自分で再設定が必要
リストマークを表示させたいときは、次のようにCSSで指定します。
ul {
list-style-type: disc;
padding-left: 1.5em;
}
ol {
list-style-type: decimal;
padding-left: 1.5em;
}
このように、CSSリセットの影響を理解しておくと、意図しないデザイン崩れを防げます。
ブラウザ互換性によるリストのズレ
HTMLやCSSのコードは、ブラウザによって表示が微妙に違うことがあります。
特にリストのマークや余白、位置などにズレが出ることがあります。
よくあるズレの原因を紹介します。
- ブラウザごとのデフォルトCSSの違い
- list-style-positionの初期値が異なる
- 余白(margin・padding)の差
- モバイルとPCでの表示崩れ
- 古いブラウザでの対応の違い
これを防ぐためには、CSSでしっかりスタイルを指定することが大切です。
以下のように書くと、表示が安定します。
ul, ol {
margin: 0;
padding-left: 1.5em;
list-style-position: outside;
}
このように、すべての環境で同じ見た目にするにはCSSの調整が必要です。
いくつかのブラウザで表示を確認する習慣をつけましょう。
リスト表示が意図しないレイアウトになる原因
HTMLでリストを使っていて、「思った通りに表示されない」と感じたことはありませんか?それは、HTMLやCSSのちょっとしたミスが原因になっていることが多いです。
リストが崩れる主な理由を見てみましょう。
- liの中にdivやpを入れてブロック構造が乱れる
- floatやflexなどのレイアウト指定がliに影響を与えている
- list-styleがnoneになっていてマークが出ない
- リストの高さや幅が決まっていない
- li同士のmarginやpaddingが大きすぎる
解決するには、次のような方法があります。
- liタグ内はシンプルな要素だけにする
- list-style-typeを指定してマークを出す
- 親要素の幅や配置を確認する
- ブラウザの開発者ツールで確認する
このように、CSSや構造を少し見直すだけで改善することが多いです。
エラーではなく見た目の崩れなので、気づきにくいこともありますが、丁寧に見ていきましょう。
JavaScriptでの出力ミスによるli重複
JavaScriptでリストを生成する際に、同じliが何度も出てしまうというトラブルがあります。
これは、ループが2回動いてしまったり、リストを毎回作り直していないことが原因です。
重複してしまう主なパターンを紹介します。
- 同じデータを何度も処理している
- ループの中でulを毎回作っている
- 以前のリストを削除せずに追加している
- クリックイベントなどで何度も出力されている
- DOMの操作順番が間違っている
こうした問題を防ぐために、事前にリストをクリアしてから新しく作るようにしましょう。
以下のように書くと安心です。
const ul = document.getElementById('myList');
ul.innerHTML = ''; // 先に中身をクリア
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
ul.appendChild(li);
});
このように、重複防止には「初期化」がカギになります。
動的な出力を扱うときは特に注意しましょう。
SEOに悪影響を与えるリストの誤用
HTMLリストはSEOにも良い効果を与えることがありますが、使い方を間違えると逆効果になることもあります。
意味のないリストや乱用は、検索エンジンにとってマイナスに働くことがあるのです。
SEO的に悪いリストの使い方をまとめます。
- 本文のように長い文章をliに入れてしまう
- 見た目だけのためにulを多用する
- リストの内容が曖昧でキーワードが薄い
- 構造化されておらず情報が読みづらい
- 同じ内容のliを何度も繰り返す
検索エンジンにも人間にも読みやすくするためには、以下を意識しましょう。
- liには短く明確な情報を入れる
- リストは内容を整理するために使う
- h2やh3と組み合わせて構造を意識する
- リスト内にもキーワードを自然に含める
このように、リストは整理整頓の道具として正しく使うことが、SEOにもユーザーにも優しい使い方になります。
HTMLリストを活用したデザインと応用テクニック

ナビゲーションメニューにリストを使う方法
Webサイトのメニューは、多くの場合リスト(ulタグ・liタグ)を使って作られています。
なぜなら、情報のまとまりを表すのにぴったりな構造だからです。
ナビゲーションバー(グローバルメニュー)などにもリストを使うと、整理された見た目になります。
基本的な考え方と注意点を以下にまとめます。
- ulタグでメニュー全体を囲む
- liタグで1つ1つのリンク項目を作る
- aタグをliの中に入れてリンクを設定する
- 横並びにしたいときはCSSでflexやinline-blockを使う
- hover時に色や下線を変えると視認性アップ
以下はシンプルなメニューの例です。
<ul class="nav">
<li><a href="#">ホーム</a></li>
<li><a href="#">サービス</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
このように、リストを使うことで、見た目も管理もシンプルになります。
CSSと組み合わせることで、自由なデザインが可能になります。
ステップ表示や手順ガイドでの応用
順番に進む内容を説明するとき、リストはとても効果的です。
とくにolタグ(順序付きリスト)を使えば、流れがひと目でわかるようになります。
ステップ形式の説明や手順ガイドにぴったりです。
ステップ表示で役立つ工夫を以下に紹介します。
- olタグを使って番号を自動表示させる
- liの中にタイトルと説明を分けて入れる
- CSSで数字を大きくしたり丸で囲むと視覚的にわかりやすくなる
- 完了したステップにチェックアイコンをつけるとより親切
- 横向き(ステップバー)にも対応できる
ステップの基本構造は以下のようになります。
<ol class="step">
<li>商品を選ぶ</li>
<li>カートに入れる</li>
<li>注文手続きへ進む</li>
<li>注文を確定する</li>
</ol>
このように、ユーザーが次に何をすればいいかを明確にできるのが、ステップ表示の大きなメリットです。
レスポンシブ対応のリストレイアウト
スマホでもパソコンでも見やすいWebページにするには、リストもレスポンシブ対応にする必要があります。
特にナビゲーションや項目一覧などは、画面幅によって表示方法を変えるととても見やすくなります。
レスポンシブなリストを作るためのポイントを以下にまとめます。
- 横並びリストはflexboxを使うと便利
- メディアクエリでスマホサイズ時に縦並びに切り替える
- liタグに余白や幅を指定して整える
- 画面幅が狭いときはドロップダウン形式にするのもおすすめ
- CSSでlist-styleを調整して見やすくする
以下は横並びから縦並びに切り替える例です。
ul.menu { display: flex; }
@media (max-width: 600px) {
ul.menu { flex-direction: column; }
}
このように、画面に応じた表示切り替えで、ユーザーにとって使いやすいページが作れます。
Font Awesomeなどのアイコンとの併用方法
リストにアイコンを加えると、内容がよりわかりやすく、目を引くデザインになります。
Font Awesomeなどのアイコンフォントを使えば、liの前や中に簡単にアイコンを追加できます。
使い方の基本を紹介します。
- Font AwesomeのCDNを読み込む
- liタグの中にiタグを入れてアイコンを表示
- list-styleをnoneにしてアイコンだけ見せる
- li全体をflexにするとアイコンとテキストの並びが整う
- 色やサイズも自由に変更できる
以下はチェックマークアイコン付きの例です。
<ul class="checklist">
<li><i class="fas fa-check"></i>安心サポート</li>
<li><i class="fas fa-check"></i>無料相談</li>
<li><i class="fas fa-check"></i>簡単申し込み</li>
</ul>
このように、アイコンは内容を視覚的に伝える手助けになります。
ぜひ取り入れてみましょう。
リストにアニメーションを加える実装
リストに動きを加えることで、Webページの印象をグッと魅力的にすることができます。
表示時のフェードイン、ホバーで色が変わる、スクロールに合わせて動くなど、いろいろな工夫ができます。
アニメーションの実装方法をまとめます。
- CSSのtransitionでhover時の変化を加える
- animationやkeyframesで動きをつける
- JavaScriptやライブラリでスクロール連動の動きも可能
- liごとに遅延を設定するとリズムが出る
- 動きすぎは逆効果なのでシンプルにする
以下はliにホバーで背景色が変わる例です。
li {
transition: background 0.3s;
}
li:hover {
background: #f0f0f0;
}
このように、動きのあるリストはユーザーの注目を集める力があります。
ただしやりすぎず、自然な動きにするのがポイントです。
チェックリスト風にカスタマイズする
チェックリストとは、やることや持ち物などをチェックしていく形式のリストです。
HTMLのリストにCSSやJavaScriptを加えることで、実用的なチェックリストに変身させることができます。
チェックリスト風の作り方を紹介します。
- ulまたはolでリストの形を作る
- liの中にinput type=”checkbox”を入れる
- CSSでチェック状態をデザインする
- labelタグで文字をクリックしやすくする
- JavaScriptで完了時に色を変えるなども可能
以下は簡単なチェックリストの例です。
<ul>
<li><label><input type="checkbox">歯ブラシ</label></li>
<li><label><input type="checkbox">ハンカチ</label></li>
<li><label><input type="checkbox">お弁当</label></li>
</ul>
このように、インタラクティブなリストにすることで、ページの使いやすさが大きくアップします。
リストとテーブルの使い分けのポイント
リストとテーブルはどちらも情報を整理して見せる方法ですが、使い分けがとても大切です。
何を伝えたいかによって、どちらを使うか選ぶようにしましょう。
使い分けの判断ポイントを以下にまとめます。
- 順序やカテゴリ分けならリスト
- データの比較や行列の表示はテーブル
- 少ない情報ならリストで簡潔に
- 見出し付きで情報を整理したいならテーブル
- レスポンシブにしやすいのはリスト
たとえば、持ち物一覧ならulタグが向いていますが、価格表などはtableタグが最適です。
このように、情報の内容と目的に合わせた選び方をすることで、見やすく伝わりやすいWebページを作ることができます。
まとめ

これまでに紹介した内容をふりかえり、特に大切なポイントをまとめました。
- ulやolタグは情報を整理して見やすくする
- liタグはリストの中の1つの項目を表す
- JavaScriptのループでリストを自動で作れる
- CSSを使えばリストの見た目を自由に変えられる
- エラーや表示のズレはタグの書き方やCSSに注意する
- リストの応用でメニューやチェックリストも作れる
まずは基本の書き方から始めて、自分のWebページでもリストの活用にチャレンジしてみましょう!



