Skip to content

FullScreenLayout ​

Full-screen storytelling, one idea per screen: product tours, annual reports, onboarding. Each direct child takes the height of the area and scrolling snaps to each one.

Usage ​

Successive screens ​

Scroll the area (wheel, swipe, or with the keyboard once focused with Tab):

vue
<template>
  <SuFullScreenLayout snap="mandatory" label="Product tour">
    <section class="screen">…</section>
    <section class="screen">…</section>
    <section class="screen">…</section>
  </SuFullScreenLayout>
</template>

Snapping ​

  • proximity (default): scrolling stops on a screen only when close to it. A screen taller than the area stays fully readable.
  • mandatory: scrolling always stops at the start of a screen. Keep it for screens that fit the height.
  • none: free scrolling, full-height screens.

API ​

Props ​

PropTypeDefaultDescription
snap'mandatory' | 'proximity' | 'none''proximity'Scroll snapping
heightstring'100svh'Height of the scroll area (one screen)
labelstring—Accessible name of the area; makes it a findable region

Slots ​

SlotDescription
defaultSuccessive screens: each direct child (for example a <section>) is a screen

Responsive behavior ​

100svh (small viewport height) matches the visible height on mobile with browser bars shown: a screen is never hidden behind the browser UI. Each screen is at least that tall and grows when its content requires it.

Accessibility ​

  • Keyboard (WCAG 2.1.1): the scroll area is focusable (tabindex="0"); once focused, arrows and Page Up / Page Down scroll it.
  • Region: with label, the area becomes a named region that screen readers can reach directly.
  • Motion: smooth scrolling is only enabled when the user has not asked for reduced motion.
  • Long content: avoid mandatory with screens taller than the area, the end of the content would become hard to reach.

Publié sous licence MIT.