ゲーム・エンタメ業界向けWeb制作。
まずは会話レベルで壁打ちの相談を!
Webサイトを制作していると、ニュース一覧やブログ記事、商品一覧、画像ギャラリーなどで「すべてのコンテンツを最初から表示すると、ページが長くなりすぎる」というケースがあります。
そんなときに便利なのが、「もっと見る」ボタンです。
最初は一定数のコンテンツだけを表示し、「もっと見る」をクリックすると追加のコンテンツが表示される仕組みにすることで、一覧ページをすっきり見せることができます。
「もっと見る」はWordPressだけの機能ではありません。
HTML・CSS・JavaScriptを使った通常のWebサイトでも実装でき、WordPressではPHPと組み合わせることで、記事やカスタムフィールドなどの動的なコンテンツにも対応できます。
今回は、シンプルな「もっと見る」ボタンをHTML・CSS・JavaScriptで実装する方法から、WordPressでの実装方法、さらに大量のコンテンツを扱う場合の考え方まで解説します。
フルスタックサイト構築
「もっと見る」ボタンとは、一覧に表示するコンテンツを最初からすべて表示せず、ユーザーがボタンをクリックしたタイミングで追加表示するUIです。
例えば、10件のニュースがある場合、
といった動きを実現できます。
ブログ記事一覧やニュース一覧だけでなく、
など、さまざまなコンテンツに利用できます。
「もっと見る」を導入する大きなメリットは、一覧ページをコンパクトに整理できることです。
コンテンツが数十件、数百件ある場合、すべてを最初から表示するとページが非常に長くなります。
最初に必要な件数だけを表示しておけば、ユーザーが目的のコンテンツを探しやすくなります。
自動的に大量のコンテンツを読み込むのではなく、ユーザーが「もっと見たい」と思ったタイミングで追加表示できます。
そのため、ユーザーの操作に合わせた自然なUIを作ることができます。
スマートフォンでは、PCよりも縦方向のスクロールが長く感じられます。
ニュースや商品などを一定数ずつ表示することで、スクロール量を抑えながらコンテンツを整理できます。
「もっと見る」は、WordPressを使っていないWebサイトでも実装できます。
基本的な仕組みは非常にシンプルです。
HTMLでコンテンツを用意し、CSSで非表示にし、JavaScriptでクリックされた項目を表示するという構成です。
今回は、最初に3件表示し、ボタンをクリックするたびに3件ずつ追加表示するサンプルを作ります。
まずは表示するコンテンツをHTMLで用意します。
<ul class="news-list">
<li class="news-item">ニュース1</li>
<li class="news-item">ニュース2</li>
<li class="news-item">ニュース3</li>
<li class="news-item">ニュース4</li>
<li class="news-item">ニュース5</li>
<li class="news-item">ニュース6</li>
<li class="news-item">ニュース7</li>
<li class="news-item">ニュース8</li>
<li class="news-item">ニュース9</li>
</ul>
<button type="button" class="more-button">
もっと見る
</button>
ここでは9件のニュースを用意しています。
実際のWebサイトでは、ニュースタイトルや画像、リンクなどを入れて使用します。
次に、最初に表示しないコンテンツを非表示にします。
.news-item.is-hidden {
display: none;
}
.more-button {
display: block;
margin: 30px auto 0;
padding: 10px 30px;
cursor: pointer;
}
JavaScriptによって表示対象となった要素からis-hiddenというクラスを削除することで、コンテンツを表示できるようにします。
最後にJavaScriptを追加します。
document.addEventListener('DOMContentLoaded', function () {
const items = document.querySelectorAll('.news-item');
const button = document.querySelector('.more-button');
const initialCount = 3;
const addCount = 3;
let visibleCount = initialCount;
// 最初に表示する件数以外を非表示
items.forEach((item, index) => {
if (index >= initialCount) {
item.classList.add('is-hidden');
}
});
// 最初からすべて表示できる場合はボタンを非表示
if (items.length <= initialCount) {
button.style.display = 'none';
}
button.addEventListener('click', function () {
const hiddenItems = document.querySelectorAll(
'.news-item.is-hidden'
);
// 3件ずつ表示
for (
let i = 0;
i < addCount && i < hiddenItems.length;
i++
) {
hiddenItems[i].classList.remove('is-hidden');
}
visibleCount += addCount;
// すべて表示したらボタンを非表示
if (visibleCount >= items.length) {
button.style.display = 'none';
}
});
});
このコードでは、querySelectorAll()で指定したCSSセレクターに一致する要素を取得しています。querySelectorAll()は複数の要素を取得できる標準的なWeb APIです。
また、ボタンのクリック処理にはaddEventListener()を使用しています。
今回の処理を簡単に説明すると、以下の流れです。
① 最初に3件だけ表示
const initialCount = 3;
この数字を変更すれば、最初に表示する件数を変更できます。
例えば、
const initialCount = 6;
とすれば、最初に6件表示できます。
② クリックするたびに3件追加
const addCount = 3;
ここを変更すれば、一度に追加する件数を変更できます。
const addCount = 6;
とすれば、6件ずつ追加表示できます。
③ すべて表示したらボタンを消す
if (visibleCount >= items.length) {
button.style.display = 'none';
}
最後まで表示された場合、「もっと見る」ボタン自体を非表示にしています。
追加されたコンテンツを突然表示するのではなく、フェードインさせることもできます。
例えば、以下のようなCSSを追加します。
.news-item {
animation: fadeIn 0.4s ease-in-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
これによって、追加されたコンテンツが少し下から浮かび上がるような表示になります。
ただし、アニメーションは過剰に使用するとユーザーの負担になる場合もあるため、Webサイト全体のデザインに合わせて調整することが重要です。
WordPressの場合も基本的な考え方は同じです。
違いは、HTMLに直接コンテンツを書くのではなく、PHPを使ってWordPressの記事やカスタムフィールドなどからコンテンツを取得する点です。
例えば、WordPressのカスタムフィールドから画像一覧を取得する場合、以下のような構造にできます。
<?php
$post_id = 14;
$field_images = get_post_meta(
$post_id,
'custom-field',
true
);
if (!empty($field_images) && is_array($field_images)) :
?>
<ul class="img-wrap">
<?php foreach ($field_images as $i => $url) : ?>
<li
class="img-item"
<?php echo $i >= 6 ? 'style="display:none;"' : ''; ?>
>
<img
src="<?php echo esc_url($url); ?>"
loading="lazy"
alt="画像"
>
</li>
<?php endforeach; ?>
</ul>
<?php if (count($field_images) > 6) : ?>
<button
type="button"
id="load-more-btn"
class="load-more-button"
>
もっと見る
</button>
<?php endif; ?>
<?php endif; ?>
この例では、最初の6件を表示し、7件目以降を非表示にしています。
WordPressでは、PHP側で記事やカスタムフィールドなどのデータを取得し、それをHTMLとして出力します。
その後の「何件ずつ表示するか」という制御はJavaScriptに任せることができます。
WordPressでJavaScriptを使う場合、「jQueryを使わなければならない」と考える必要はありません。
今回のような単純な「もっと見る」であれば、通常のJavaScriptだけで実装できます。
そのため、
という構成だけでも十分に実現できます。
外部ライブラリや専用プラグインを追加せずに済むため、サイトの構成をシンプルに保ちたい場合にも適しています。
1ページの中に、
など、複数の「もっと見る」を設置したい場合があります。
その場合は、JavaScriptをそれぞれ個別に書くのではなく、共通の処理として関数化する方法があります。
例えば、
function setupLoadMore(itemsSelector, buttonSelector, step = 6) {
const items = document.querySelectorAll(itemsSelector);
const button = document.querySelector(buttonSelector);
let current = step;
items.forEach((item, index) => {
if (index >= step) {
item.style.display = 'none';
}
});
if (!button || items.length <= step) {
if (button) {
button.style.display = 'none';
}
return;
}
button.addEventListener('click', function () {
for (
let i = current;
i < current + step && i < items.length;
i++
) {
items[i].style.display = '';
}
current += step;
if (current >= items.length) {
button.style.display = 'none';
}
});
}
そして、それぞれの一覧に対して、
setupLoadMore('.news-item', '#news-more', 6);
setupLoadMore('.work-item', '#work-more', 4);
のように設定できます。
このように処理を関数化しておくことで、同じ仕組みを複数の場所で再利用できます。
ここで重要なのが、「もっと見る」=ページの読み込みが速くなる、とは限らないという点です。
例えば100件の記事がある場合、
<li class="item">記事1</li>
<li class="item">記事2</li>
...
<li class="item">記事100</li>
というHTMLを最初からすべて読み込んで、CSSやJavaScriptによって非表示にしているだけなら、100件分のHTML自体はページに存在しています。
つまり、「画面上では10件しか見えていない」からといって、必ずしも読み込むデータ量が10件分になるわけではありません。
大量のコンテンツを扱う場合は、最初からすべてのデータをHTMLとして出力するのではなく、
「もっと見る」をクリックしたら、サーバーから追加データを取得する
という方法もあります。
例えば、
という仕組みです。
この方法なら、コンテンツ量が非常に多いサイトでも効率的にデータを扱えます。
ただし、AjaxやAPIを使うと実装の複雑さも増えるため、すべてのサイトに必要というわけではありません。
数十件程度ならシンプルなJavaScript方式、大量データならAPIなどを利用する方式
というように、コンテンツ量やサイト構成に応じて選択することが重要です。
一覧ページでコンテンツを整理する方法には、「もっと見る」以外にもいくつかあります。
| 方法 | 特徴 | 向いているケース |
| もっと見る | ボタンで追加表示 | ニュース・商品・実績一覧 |
| ページネーション | ページを分割 | 大量の記事・検索結果 |
| 無限スクロール | スクロールに応じて自動追加 | SNS・画像一覧など |
ユーザーがボタンをクリックしたときだけ追加表示します。
「必要な人だけ続きを見る」という考え方に向いています。
1ページあたりの表示件数を決め、2ページ目、3ページ目というようにページを分けます。
大量のコンテンツを整理しやすく、ページ単位でURLを持たせたい場合にも向いています。
ページを下までスクロールすると、自動的に次のコンテンツが読み込まれます。
SNSのタイムラインや画像一覧など、連続してコンテンツを閲覧するサイトと相性が良い方法です。
「もっと見る」「ページネーション」「無限スクロール」のどれが正解というわけではありません。
例えば、
ニュースや実績一覧 → 「もっと見る」
数百〜数千件の検索結果 → ページネーション
SNSのように次々とコンテンツを見る → 無限スクロール
というように、ユーザーがどのようにコンテンツを見るのかを考えて選択することが大切です。
ページ遷移を目的としない操作の場合、HTMLでは<button>を使うのが適しています。
<button type="button">
もっと見る
</button>
見た目だけでなく、HTMLの意味に合わせたマークアップを行うことが重要です。
PCでは問題なくクリックできても、スマートフォンではボタンが小さすぎたり、周囲の要素と近すぎたりする場合があります。
特に、
などを確認しましょう。
コンテンツがすべて表示されたにもかかわらず、「もっと見る」ボタンが残っていると、ユーザーは「まだ何かあるのでは?」と感じてしまいます。
最後のコンテンツまで表示したら、ボタンを非表示にする処理を入れておくと自然です。
「もっと見る」をJavaScriptだけで制御する場合、JavaScriptが正常に動作しなかったときのことも考えておく必要があります。
特にSEOやアクセシビリティが重要なページでは、
などにも配慮しましょう。
「もっと見る」は、さまざまなWebサイトで利用できます。
特にコンテンツが継続的に追加されるWebサイトでは、「もっと見る」を導入することで一覧ページを整理しやすくなります。
いいえ。
HTML・CSS・JavaScriptだけでも実装できます。
WordPressの場合は、PHPで取得した記事やカスタムフィールドなどのデータをHTMLとして出力し、その後の表示制御をJavaScriptで行う方法が一般的です。
必須ではありません。
今回紹介したような基本的な「もっと見る」であれば、JavaScriptだけで実装できます。
そのため、jQueryなどの外部ライブラリを追加せずに実装することも可能です。
必ずしも速くなるわけではありません。
すべてのコンテンツを最初からHTMLに出力し、CSSやJavaScriptで一部を非表示にしているだけの場合、コンテンツ自体は最初から読み込まれています。
表示速度や通信量を改善したい場合は、AjaxやAPIなどを利用して必要なデータだけを取得する方法も検討しましょう。
実装自体は可能です。
ただし、すべてのデータを最初に読み込む方式では、コンテンツ量が増えるほどHTMLや画像などのデータ量も大きくなります。
大量データを扱う場合は、AjaxやAPI、ページネーションなどを組み合わせる方法がおすすめです。
Webサイトの目的によって異なります。
ユーザーが自分のタイミングで追加表示したい場合は「もっと見る」、SNSのように連続してコンテンツを見る場合は無限スクロールが適しています。
可能です。
JavaScriptで表示状態を管理すれば、「もっと見る」と「閉じる」を切り替えることができます。
ただし、追加表示したコンテンツを閉じる必要が本当にあるのかは、ユーザー体験を考えて判断することが大切です。
「もっと見る」というUI自体がSEOに悪いわけではありません。
ただし、検索エンジンに認識してほしい重要なコンテンツをJavaScriptによる動的取得だけに依存させる場合などは、実装方法を慎重に検討する必要があります。
SEOが重要な一覧ページでは、HTMLとして適切なコンテンツ構造を用意することや、ページネーションなど別の方式も含めて検討するとよいでしょう。
「もっと見る」ボタンは、ニュース、ブログ、商品、実績、画像など、さまざまな一覧コンテンツを整理するために利用できる便利なUIです。
実装方法も難しくありません。
基本的には、
HTML → 表示するコンテンツを用意する
CSS → 最初に表示しないコンテンツを非表示にする
JavaScript → ボタンのクリックに応じて追加表示する
という構成で実装できます。
WordPressの場合も考え方は同じで、PHPによってWordPressの記事やカスタムフィールドなどからコンテンツを取得し、HTMLとして出力した後、JavaScriptで表示件数を制御できます。
また、コンテンツが非常に多い場合には、AjaxやAPIを利用した追加読み込み、ページネーション、無限スクロールなど、別の方法を検討することも重要です。
大切なのは、単純に「もっと見る」を導入することではありません。
コンテンツの量、ユーザーの閲覧方法、ページの目的、表示速度、SEO、スマートフォンでの操作性などを考慮して、最適な表示方法を選択することが重要です。
Webサイトの構成やコンテンツ量に合わせて適切な実装方法を選ぶことで、ユーザーにとって使いやすく、運用しやすいWebサイトを構築できます。
夢双では、HTML・CSS・JavaScriptによるフロントエンド実装から、WordPressなどのCMS構築まで、Webサイトの目的や運用方法に合わせたサイト制作を行っています。
夢双合同会社では、
など、ゲーム業界向けのWeb制作を行っています。
RPG・FPS・ノベルゲーム・アクションなど、ジャンルごとの世界観に合わせたデザイン・演出設計にも対応しています。
新作タイトルのプロモーションサイト制作や、既存サイトの見直しについてお悩みの方は、お気軽にご相談ください。
企画段階からのご相談にも対応しており、「何から考えればいいか分からない」といった状態でも問題ありません。
内容を整理しながら、最適なサイトの方向性をご提案いたします。
実際にご相談いただくケースでも、「まだ具体的な要件が固まっていない」という段階からスタートすることがほとんどです。
そのため、初期の方向性整理から伴走する形でサポートしています。
制作実績 → https://6sou.site/works.php
壁打ち相談はこちら → https://6sou.site/free_consult.php