1 звезда на GitHub = 1 новый компонент.

Поставить звезду
Макеты и Сетки layoutscroll-snapux

Scroll Snap Page

Постраничная прокрутка секций с фиксацией нативного CSS Scroll Snap.

Живое превью

Scroll Snap Page

Использование

Скопируйте и вставьте этот код на вашу страницу Astro:

astro
---
import { ScrollSnapPage } from 'astro-component-kit';
---

<ScrollSnapSection>Content</ScrollSnapSection>
--- import { ScrollSnapPage } from 'astro-component-kit'; --- <ScrollSnapSection>Content</ScrollSnapSection>

Ручная установка

Если вы не используете пакет npm, создайте файл и вставьте следующий код: src/components/lib/ScrollSnapPage.astro:

astro
---
/**
 * ScrollSnapSection — Layout wrapper that snaps sections to the full viewport height.
 */
interface Props {
  height?: string;
  className?: string;
}

const { height = '300px', className = '' } = Astro.props;
---

<div class={`snap-wrap ${className}`} style={`--snap-height: ${height};`}>
  <slot>
    <section class="snap-panel panel-1"><h4>Slide 1 (Scroll to snap)</h4></section>
    <section class="snap-panel panel-2"><h4>Slide 2</h4></section>
    <section class="snap-panel panel-3"><h4>Slide 3</h4></section>
  </slot>
</div>

<style>
  .snap-wrap {
    height: var(--snap-height, 300px);
    overflow-y: scroll;
    scroll-snap-type: y mandatory;
    width: 100%;
    border-radius: var(--r-lg, 12px);
    border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
  }
  .snap-wrap :global(section), .snap-panel {
    height: var(--snap-height, 300px);
    scroll-snap-align: start;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
  }
  .panel-1 { background: rgba(99, 102, 241, 0.15); }
  .panel-2 { background: rgba(192, 132, 252, 0.15); }
  .panel-3 { background: rgba(251, 191, 36, 0.15); }
</style>
--- /** * ScrollSnapSection — Layout wrapper that snaps sections to the full viewport height. */ interface Props { height?: string; className?: string; } const { height = '300px', className = '' } = Astro.props; --- <div class={`snap-wrap ${className}`} style={`--snap-height: ${height};`}> <slot> <section class="snap-panel panel-1"><h4>Slide 1 (Scroll to snap)</h4></section> <section class="snap-panel panel-2"><h4>Slide 2</h4></section> <section class="snap-panel panel-3"><h4>Slide 3</h4></section> </slot> </div> <style> .snap-wrap { height: var(--snap-height, 300px); overflow-y: scroll; scroll-snap-type: y mandatory; width: 100%; border-radius: var(--r-lg, 12px); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1); } .snap-wrap :global(section), .snap-panel { height: var(--snap-height, 300px); scroll-snap-align: start; display: flex; align-items: center; justify-content: center; color: #fff; } .panel-1 { background: rgba(99, 102, 241, 0.15); } .panel-2 { background: rgba(192, 132, 252, 0.15); } .panel-3 { background: rgba(251, 191, 36, 0.15); } </style>

Краткая информация

Категория
Макеты и Сетки
Имя файла
ScrollSnapPage.astro
Зависимости
Нет — чистый Astro + CSS
Теги
layoutscroll-snapux