Documentation-style layout with a collapsible sidebar and main content area. Use with the Docs scaffold variation.
This block is the docs layout pattern: a sidebar for navigation and a main content area. The Rizzo docs site uses this layout. When you scaffold with the Docs variation, you get the same structureâsidebar, header, and content containerâusing Rizzo tokens and BEM-style classes (docs__sidebar, docs__main, etc.).
Structure
Conceptually, the layout looks like this:
Page title
Optional description.
Main content goes here. Use Rizzo typography and spacing tokens. On small screens the sidebar can collapse behind a toggle.
Usage
Copy the snippet for your framework. Same BEM classes (docs-sidebar, docs__main, docs__container, docs__content) work in any stack.
Usage
Full example for each framework (Astro, Vanilla, Svelte, Vue, React). Switch framework via View as or by clicking a Usage tabâboth stay in sync.
Astro Vanilla Svelte Vue React
astroastro
---
// Astro: same BEM structure; use DocsSidebar.astro for nav.
---
<!-- Docs layout: sidebar + main. Same BEM classes work in any framework. -->
<div class="docs" data-docs>
<aside class="docs-sidebar" aria-label="Documentation navigation">
<nav class="docs-sidebar__nav">
<a href="#" class="docs-sidebar__link docs-sidebar__link--active">Introduction</a>
<a href="#" class="docs-sidebar__link">Foundations</a>
<a href="#" class="docs-sidebar__link">Components</a>
</nav>
</aside>
<main class="docs__main">
<div class="docs__container">
<header class="docs__header">
<h1 class="docs__title">Page title</h1>
<p class="docs__description">Optional description.</p>
</header>
<div class="docs__content">
<p>Main content. Use Rizzo typography and spacing tokens.</p>
</div>
</div>
</main>
</div>
htmlhtml
<!-- Docs layout: sidebar + main. Same BEM classes work in any framework. -->
<div class="docs" data-docs>
<aside class="docs-sidebar" aria-label="Documentation navigation">
<nav class="docs-sidebar__nav">
<a href="#" class="docs-sidebar__link docs-sidebar__link--active">Introduction</a>
<a href="#" class="docs-sidebar__link">Foundations</a>
<a href="#" class="docs-sidebar__link">Components</a>
</nav>
</aside>
<main class="docs__main">
<div class="docs__container">
<header class="docs__header">
<h1 class="docs__title">Page title</h1>
<p class="docs__description">Optional description.</p>
</header>
<div class="docs__content">
<p>Main content. Use Rizzo typography and spacing tokens.</p>
</div>
</div>
</main>
</div>
sveltesvelte
<script>
// Svelte: same BEM classes; use DocsSidebar from $lib/rizzo for nav.
</script>
<!-- Docs layout: sidebar + main. Same BEM classes work in any framework. -->
<div class="docs" data-docs>
<aside class="docs-sidebar" aria-label="Documentation navigation">
<nav class="docs-sidebar__nav">
<a href="#" class="docs-sidebar__link docs-sidebar__link--active">Introduction</a>
<a href="#" class="docs-sidebar__link">Foundations</a>
<a href="#" class="docs-sidebar__link">Components</a>
</nav>
</aside>
<main class="docs__main">
<div class="docs__container">
<header class="docs__header">
<h1 class="docs__title">Page title</h1>
<p class="docs__description">Optional description.</p>
</header>
<div class="docs__content">
<p>Main content. Use Rizzo typography and spacing tokens.</p>
</div>
</div>
</main>
</div>
vuevue
<script setup>
// Vue: same BEM classes; use DocsSidebar from @/components/rizzo for nav.
</script>
<template>
<div class="docs" data-docs>
<aside class="docs-sidebar" aria-label="Documentation navigation">
<nav class="docs-sidebar__nav">
<a href="#" class="docs-sidebar__link docs-sidebar__link--active">Introduction</a>
<a href="#" class="docs-sidebar__link">Foundations</a>
<a href="#" class="docs-sidebar__link">Components</a>
</nav>
</aside>
<main class="docs__main">
<div class="docs__container">
<header class="docs__header">
<h1 class="docs__title">Page title</h1>
<p class="docs__description">Optional description.</p>
</header>
<div class="docs__content">
<p>Main content. Use Rizzo typography and spacing tokens.</p>
</div>
</div>
</main>
</div>
</template>