「記事が長くなりすぎて、読者が離脱してしまう…」
「もっと読むボタンって、どうやって作るの?」
そんな悩みを持つWeb制作者の方へ。
今回ご紹介するのは、ページ表示を最適化する「もっと読むボタン」と「無限スクロール」の作り方です。
いずれもユーザー体験を快適に保つ定番UIパーツですが、意外と正しく作るのは難しいもの。
そこで今回は、HTML・CSS・JavaScriptを使った初心者向けの丁寧な解説をお届けします!
🎬 完成イメージ

📂 ファイル構成(分割型)
load-more-scroll/
├─ index.html ← HTML本体
├─ css/
│ └─ style.css ← 見た目とレスポンシブ対応
└─ js/
└─ script.js ← ボタン制御/スクロール監視処理
STEP1 「もっと読む」ボタンで段階的に表示しよう
まずは、最初のアイテムだけを表示し、残りを非表示にしておく仕組みを作ります。
<section id="itemList">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
<div class="item">アイテム4</div>
<div class="item">アイテム5</div>
<div class="item">アイテム6</div>
</section>
<button id="loadMoreBtn">もっと読む</button>
CSSで初期表示を制御
.item {
display: none;
margin: 1rem 0;
}
.item.show {
display: block;
}
解説
- .item は全体のアイテム群を表すクラスです。
- 最初はすべて非表示にし、あとから .show を付けて表示させます。
- この状態ではまだボタンを押しても表示されません。次にJSを追加していきましょう。
次のSTEPでは、クリックするたびに一定数ずつアイテムを表示する処理を加えていきます。
STEP2 クリックで表示を増やすJSを追加しよう
ここでは、「もっと読む」ボタンをクリックしたときに、アイテムを一定数ずつ表示していく処理をJavaScriptで実装していきます。
以下のコードを js/script.js に記述します。
// 表示対象のアイテムを全て取得
const items = document.querySelectorAll('.item');
// ボタン要素を取得
const loadMoreBtn = document.getElementById('loadMoreBtn');
// 現在表示されている件数(初期は0)
let currentIndex = 0;
// 1回のクリックで増やす件数
const itemsPerClick = 3;
// 最初の表示処理(初期化)
showItems();
// ボタンがクリックされたら、次のアイテムを表示
loadMoreBtn.addEventListener('click', showItems);
// アイテムを表示する関数
function showItems() {
// 次に表示すべき範囲を計算
const nextIndex = currentIndex + itemsPerClick;
// 対象範囲のアイテムを表示
for (let i = currentIndex; i < nextIndex && i < items.length; i++) {
items[i].classList.add('show'); // display: block にする
}
// 表示済みのインデックスを更新
currentIndex = nextIndex;
// すべて表示し終えたらボタンを非表示に
if (currentIndex >= items.length) {
loadMoreBtn.style.display = 'none';
}
}
✅ 解説
- .item 要素はすべて取得されますが、最初は非表示です。
- ボタンをクリックすると、次の3件(itemsPerClick)が .show 付きで表示されます。
- 表示済みの件数は currentIndex に記録され、次回以降に続けて表示されます。
- 最後のアイテムまで表示されたら、ボタン自体を style.display = ‘none’ で非表示にします。
これで「もっと読むボタン」で段階的に要素を表示する仕組みが完成しました。
次はこの仕組みをボタンなしで自動表示させる「無限スクロール」版に拡張していきましょう。
STEP3 無限スクロールの実装(Intersection Observer)
ユーザーが画面の一番下に近づいたタイミングで、次のアイテムを自動的に表示する方法です。
今回は「Intersection Observer API」を使って、監視対象エリアに入ったら処理を発火させる仕組みにします。
この先の実装こそが本番です!
「もっと読むボタン」は入門レベル。
本当に差がつくのは、無限スクロールや外部データ連携といった“応用力”です。
たとえば、スクロールするだけで自動で読み込まれる「無限スクロール」や、外部のJSON・APIからデータを取得してリスト表示する処理は、実案件でも非常に高確率で求められるスキルです。
✅ このスキルが身につくとどうなるか?
- 読み込み中のスピナー表示、データの取得・表示制御、監視の停止まで含めた「実用的な非同期UI」を実装できるようになります。
- 技術的に洗練された表示は、お客さんのサイトのUX向上につながり、満足度・信頼感を高める要素になります。
- 「デザインだけじゃない」「コードもちゃんと書ける」制作者として周囲と一歩差をつけられる強みになります。
- そして何より、それはあなた自身の評価や実績に直結します。
✅ この記事でできるようになること
- 無限スクロールをIntersection Observerで軽量実装
- 読み込み演出&表示完了の制御ロジックの構築
- JSONファイルやfetchを使った外部データの読み込み・表示の基礎
- 実務にそのまま応用できる柔軟なコードパターン
✨ プロンプト付きでChatGPTにも頼れる!
自分で書けるだけでなく、ChatGPTを活用して構造的に組めるように設計しているので、一度覚えれば反復・拡張も自在です。
→ 読んだその日から「使える」内容に仕上げました。
今後、仕事としてコーディングを受けたい・任されたいと考えている方は、ぜひ手に取って学んでみてください!
次回予告|ログイン機能(会員登録+セッション管理)
次回は、Webアプリケーションに欠かせない「ログイン機能」の基礎を学びます。
セッション管理やパスワードの安全な扱い方など、PHPを使った実践的な内容になります。
✨ 定期購読のご案内
noteメンバーシップでは、以下のような特典をご用意しています!
- あなたのコードを添削&アドバイス(HTML/CSS/JavaScript/PHP対応)
- Zoom相談での個別サポート(月1回)
- 実務にも使えるテンプレートの先行配布
- ChatGPT活用ノウハウやプロンプト共有
「もっと学びたい」「詰まったときに相談したい」という方は、ぜひメンバー登録をご検討ください!
👉 あなたの「できた!」を、これからも一緒にサポートします。