DigtalBloomStudio

CSSスクロール操作

top画像

CSSスクロールスナップの種類

縦(Y) 横(X)

CSSのスクロールスナップは、ユーザーがスクロール操作を行った際
特定の位置に自動的にスナップする機能
これにより、ユーザーはコンテンツをより直感的に閲覧できるようになります。

scroll-snap-type 値

意味 説明
none スナップ無効 スクロールスナップの機能を無効化
デフォルト値
scroll-snap-type: none;
mandatory 強制スナップ スクロールが終わると必ずスナップ位置に合わせてスクロール scroll-snap-type: y mandatory;
proximity 近ければスナップ ユーザーがスナップポイントの近くまでスクロールした場合のみスナップが発動 scroll-snap-type: y proximity;

scroll-snap-type 構文

方向の種類 説明 使用例
x 横スクロールに適用 scroll-snap-type: x mandatory;
y 縦スクロールに適用 croll-snap-type: y mandatory;
block 書字方向のブロック軸 通常は y と同等
inline 書字方向のインライン軸 通常は x と同等
both 横・縦両方に適用 scroll-snap-type: both mandatory;

scroll-snap-align 値

意味・効果
none スクロールスナップしない scroll-snap-align: none;
start 開始位置でスナップ scroll-snap-align: start;
end 終了位置でスナップ scroll-snap-align: end;
center 要素の中央でスナップ scroll-snap-align: center;

CSSスクロールスナップ(縦)Y方

  
    HTML
    <div class="scroll-main-div">

      <div class="scroll-container">    /* 要素の開始位置でスナップ */
        <section class="scroll-section">
          <img class="scroll-img" src="../img/logo/scroll.jpg" alt="スクロール画像">
        </section>
      </div>
      <div class="scroll-container">   /* 要素の開始位置でスナップ */
        <section class="scroll-section">
          <img class="scroll-img" src="../img/logo/scroll1.jpg" alt="スクロール画像">
        </section>
      </div>
      <div class="scroll-container">    /* 要素の開始位置でスナップ */
        <section class="scroll-section">
          <img class="scroll-img" src="../img/logo/scroll2.jpg" alt="スクロール画像">
        </section>
      </div>

    </div>

    CSS
    /* スクロールスナップのメインコンテナ */
    .scroll-main-div {
      scroll-snap-type: y mandatory; /* Y軸方向の強制的なスクロールスナップを有効化 */
      overflow-y: scroll; /* 縦スクロールを可能にする */
      height: 100vh; /* ビューポートの高さに設定 */
    }

    /* 各スクロールセクションのコンテナ */
    .scroll-container {
      scroll-snap-align: start; /* 要素の開始位置でスナップ */
      height: 100vh; /* 各セクションを画面の高さに設定 */
    }

    /* スクロールセクション内のコンテンツエリア */
    .scroll-section {
      width: 100%; /* 幅を100%に設定 */
      height: 100%; /* 高さを100%に設定 */
    }

    /* スクロール表示される画像 */
    .scroll-img {
      width: 100%; /* 幅を100%に設定 */
      height: 100%; /* 高さを100%に設定 */
      object-fit: cover; /* 画像のアスペクト比を保持しつつ要素全体を覆う */
      object-position: center; /* 画像の中央部分を表示 */
    }
  
スクロール画像
スクロール画像
スクロール画像

CSSスクロールスナップ(横)X方向

  
  HTML
  <div class="X-scroll-main-div">
    <div class="X-scroll-container">    /* 要素の開始位置でスナップ */
      <section class="X-scroll-section">
        <img class="X-scroll-img" src="../img/logo/scroll.jpg" alt="スクロール画像">
      </section>
    </div>
    <div class="X-scroll-container">    /* 要素の開始位置でスナップ */
      <section class="X-scroll-section">
        <img class="X-scroll-img" src="../img/logo/scroll1.jpg" alt="スクロール画像">
      </section>
    </div>
    <div class="X-scroll-container">    /* 要素の開始位置でスナップ */
      <section class="X-scroll-section">
        <img class="X-scroll-img" src="../img/logo/scroll2.jpg" alt="スクロール画像">
      </section>
    </div>
  </div>
  
  CSS
  .X-scroll-main-div {
    scroll-snap-type: x mandatory; /* X軸方向の強制的なスクロールスナップを有効化 */
    overflow-x: scroll; /* 横スクロールを可能にする */
    overflow-y: hidden; /* 縦スクロールを無効にする */
    width: 100%; /* 各セクションを画面の幅に設定 */
    height: 100vh; /* ビューポートの高さに設定 */
    display: flex; /* フレックスボックスを使用して横並びにする */
    justify-content: flex-start; /* コンテンツを左端から開始 */
    align-items: center; /* コンテンツを垂直方向に中央に配置 */
    scroll-behavior: smooth; /* スムーズなスクロール動作 */
  }

  /* 各横スクロールセクションのコンテナ */
  .X-scroll-container {
    scroll-snap-align: start; /* 要素の開始位置でスナップ */
    width: 100%; /* 各セクションを画面の幅に設定 */
    height: 100vh; /* 各セクションを画面の高さに設定 */
    flex-shrink: 0; /* コンテナが縮小されないようにする */
    display: flex; /* フレックスボックスを使用 */
    justify-content: center; /* 水平方向に中央配置 */
    align-items: center; /* 垂直方向に中央配置 */
  }

  /* 横スクロールセクション内のコンテンツエリア */
  .X-scroll-section {
    width: 100%; /* 幅を100%に設定 */
    height: 100%; /* 高さを100%に設定 */
  }  

  /* 横スクロール表示される画像 */
  .X-scroll-img {
    width: 100%; /* 幅を100%に設定 */
    height: 100%; /* 高さを100%に設定 */
    object-fit: cover; /* 画像のアスペクト比を保持しつつ要素全体を覆う */
    object-position: center; /* 画像の中央部分を表示 */
  }
  
スクロール画像
スクロール画像
スクロール画像

CSSスムーズスクロール

スムーズスクロールの効果

ページ内リンクをクリックした際
<a href="#id">
ページ内リンクに対して滑らかにスクロール

  
    CSS
    
    /* スムーズスクロールを有効化 */
    html {
      scroll-behavior: smooth; /* スムーズスクロールを有効化 */
    }
  
Top