ナビゲーションとページ内リンクを作ろう(Flexとスクロール演出)

  • サイトの上部にナビゲーションメニュー(<nav>)を設置する
  • Flexbox を使って <h1> と <nav> を横並びにする
  • ページ内リンクを使ってセクションへの移動を行えるようにする
  • ページ内リンク(href="#id")で、ジャンプ先にスクロール移動できるようにする
  • CSSの scroll-behavior を使ってなめらかなスクロールを実現する
  • 画面右下に「上へ戻る」ボタンを設置し、絶対位置で固定表示するテクニック!

作成ファイル・保存場所

  • css-basic フォルダの中に以下の2つのファイルを用意してください:
    • HTMLファイル:11.html HTMLファイルはコピーして使用可
  • CSSファイル:style11.css
    • meta: <meta name="viewport" content="width=device-width, initial-scale=1.0"> を <head> に追加してください
htmlは下記からコピー
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML課題11</title>
    <link rel="stylesheet" href="style11.css">
</head>

<body id="top">

    <!-- サイトのヘッダーとナビゲーション -->
    <header>
        <div class="header-top">
            <h1>My Website</h1>
            <nav>
                <ul>
                    <li><a href="#services">サービス紹介</a></li>
                    <li><a href="#access">アクセス</a></li>
                    <li><a href="#contact">お問い合わせ</a></li>
                </ul>
            </nav>
        </div>
    </header>
    <figure class="kv">
        <img src="https://dummy.kobeya.com/?width=960&height=300&text=KV" alt="キービジュアル">
    </figure>

    <!-- メインコンテンツ -->
    <main>

        <section>
            <h2 id="services">サービス紹介</h2>
            <p>ここでは提供しているサービスを簡単に紹介します。ここでは提供しているサービスを簡単に紹介します。ここでは提供しているサービスを簡単に紹介します。ここでは提供しているサービスを簡単に紹介します。ここでは提供しているサービスを簡単に紹介します。
            </p>
            <img src="https://dummy.kobeya.com/?width=960&height=500&text=Service+Image" alt="サービス紹介イメージ">
        </section>

        <section>
            <h2 id="access">アクセス</h2>
            <p>ここでは会社の地図を掲載しています。ここでは会社の地図を掲載しています ここでは会社の地図を掲載しています ここでは会社の地図を掲載しています ここでは会社の地図を掲載しています
                ここでは会社の地図を掲載しています </p>
            <img src="https://dummy.kobeya.com/?width=960&height=500&text=Map+Image" alt="マップ">
        </section>

        <section>
            <h2 id="contact">お問い合わせ</h2>
            <p>ご不明点などはお問い合わせください。</p>
            <img src="https://dummy.kobeya.com/?width=960&height=600&text=Contact+Image" alt="お問い合わせイメージ">
        </section>


    </main>

    <!-- サイト全体のフッター -->
    <footer>
        <div class="backtoTop"><a href="#top">上へ戻る</a></div>
        <p><small>&copy; 2025 MySite</small></p>
    </footer>

</body>

</html>

チェックポイント

  • h1 と nav がスマホで縦並び/PCで横並びに切り替わっているか
  • nav ul が Flex によって横に整列しているか
  • ページ内リンクで各セクションにジャンプできるか
  • scroll-behavior: smooth によりスムースな移動になっているか
  • 「上へ戻る」ボタンが常に右下に固定表示されているか
  • それぞれのスタイル指定がシンプルに書かれているか

今回使うCSSプロパティのポイント

scroll-behavior

プロパティ・値説明
scroll-behavior: smooth;ページ内リンクのスクロールをなめらかにする指定。ユーザー体験が向上します。
scroll-behavior: auto;(初期値)通常の一瞬でジャンプするスクロール動作。

html 要素に指定すると、ページ全体に効果が適用されます。

position プロパティ

説明
static初期値。文書の流れどおりに配置される。位置指定プロパティは無効。
relative元の位置を基準にずらす。微調整や absolute の基準点として使用。
absolute親要素(relativeなど)を基準にして絶対配置。重ね配置に便利。
fixed画面の指定位置に固定。スクロールしても動かない。ナビやボタンで使用。

位置指定プロパティ(positionとセットで使用)

プロパティ説明
top:上からの距離を指定
bottom:下からの距離を指定
left:左からの距離を指定
right:右からの距離を指定

transition

プロパティ説明
transition:要素の状態が変わるときにアニメーションのように変化させる指定。
transition: background-color 0.3s;背景色が変わるときに、0.3秒かけてなめらかに変化させる。
.back-button {
  background-color: #666;
  transition: background-color 0.3s;
}

.back-button:hover {
  background-color: #333;
}

このように設定すると、ホバー時に背景色がパッと切り替わるのではなく、スーッと変化します

指示

以下の条件に従って、CSSファイルを作成・適用してください。

  1. html11.html に <header> 内で h1 と nav を横並びにレイアウトしてください
  2. <nav> の中に <ul><li><a></a></li></ul> 構造でメニューを作成してください
  3. <main> に複数の <section> を用意し、それぞれに id を指定して、ページ内リンクのジャンプ先にしてください
  4. scroll-behavior: smooth; を指定して、スクロールアニメーションを有効にしてください
  5. footer に「上へ戻る」ボタンを作成し、画面右下に固定表示してください
  6. ボタンはページ上部に戻るように、<body id="top"> + <a href="#top"> を活用してください
  7. 画像や段落などを追加して、ページを縦長にし、スクロールの動作確認ができるようにしてください

スタイルの指定内容(style11.css)

  1. リセット&基本設定
    • * { box-sizing: border-box; }
    • html { font-size: 100%; scroll-behavior: smooth; }
    • bodysans-seriffont-size: 0.875rem, 背景色など
  2. .header-top に Flex を指定
    • display: flex;
    • スマホでは縦並び → @media(min-width: 768px) で flex-direction: row に切り替え
    • justify-content: space-between; で h1 と nav を両端に配置
  3. nav ul を横並びに整える
    • display: flex; gap: 1rem; list-style: none;
    • a のカラーやホバー演出(text-decoration: underline)任意で追加
  4. キービジュアル(<figure class="kv">
    • 横幅いっぱいに画像を表示:width: 100%;
  5. メインコンテンツとセクション
    • セクションごとに id を指定(例:#services#access#contact
    • タイトル h2 に左線+余白
    • コンテンツを縦長にするために画像やテキストを追加
  6. フッターに「上へ戻る」ボタンを設置
    • .backtoTop a に position: fixedbottom:right: を指定
    • ボタンを円形で目立つようにスタイリング(border-radiusbox-shadow
    • href="#top" によって最上部へ戻る動作を実現

応用ポイント(任意で挑戦!)

  • メニュー項目の数やリンク先を増やしてみる
  • ボタンの色や角丸を調整して、オリジナルの「戻るボタン」をデザインする

表示例(画面イメージ)

解答例(CSS)

/* --- リセットと基本 --- */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
    font-size: 100%;
}

body {
    font-family: "メイリオ", sans-serif;
    font-size: 0.875rem;
    line-height: 1.7;
    background-color: #fefefe;
}

/* --- ヘッダー部分(h1 + nav を横並び)--- */
header {
    background-color: #f2f2f2;
    padding: 1rem 2rem;
    border-bottom: 2px solid #ddd;
}

.header-top {
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
}

/* 省略はできますが、明示的に重複記載 */
@media(min-width:768px) {
    .header-top {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: space-between;
        align-items: center;
    }
}

h1 {
    font-size: 1.5rem;
    color: #333;
}

/* --- ナビゲーションメニュー --- */
nav ul {
    display: flex;
    gap: 1rem;
    list-style: none;
}

nav a {
    text-decoration: none;
    color: #007acc;
    font-weight: bold;
}

nav a:hover {
    text-decoration: underline;
}

.kv img {
    width: 100%;
}

/* --- メインコンテンツ --- */
main {
    max-width: 960px;
    width: calc(100% - 2rem);
    margin: 2rem auto;
}

section {
    margin-bottom: 4rem;
}

h2 {
    font-size: 1.25rem;
    margin-bottom: 1rem;
    border-left: 5px solid #ccc;
    padding-left: 0.5rem;
    color: #444;
}

section p {
    margin-bottom: 1rem;
}

section img {
    width: 100%;
    height: auto;
    display: block;
    margin-top: 1rem;
}

/* --- フッター --- */
footer {
    text-align: center;
    background-color: #333;
    color: #fff;
    padding: 2rem 1rem;
    position: relative;
}

/* --- 上へ戻るボタン(固定) --- */
.backtoTop a {
    position: fixed;
    right: 2rem;
    bottom: 1.5rem;
    background-color: #38a0e6;
    color: #fff;
    padding: 0.6rem 1.2rem;
    border-radius: 999px;
    font-size: 0.875rem;
    cursor: pointer;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
    z-index: 1000;
    transition: background-color 0.3s;
    text-decoration: none;
}

.backtoTop a:hover {
    background-color: #074063;
}