Documentation Block Documentation
Overview
The Documentation block is a specialized layout component designed for structured documentation presentation. It features a comprehensive navigation system with nested menu support, content display area, and responsive layout optimized for technical documentation and knowledge bases.
Purpose and Use Cases
Primary Use Cases
Technical documentation with hierarchical navigation
Knowledge bases with organized content sections
API documentation with structured references
User guides with step-by-step instructions
Help centers with categorized content
Design Philosophy
The Documentation block emphasizes content organization and navigation efficiency, providing a clean sidebar-content layout that helps users find information quickly while maintaining readability and accessibility.
Component Structure
HTML Architecture
<div class="wrapper documentation-wrapper">
<section class="block documentation-block">
<div class="container documentation-container py-8">
<div class="grid grid-cols-1 lg:grid-cols-8 gap-8">
<!-- Navigation Sidebar -->
<div class="flex flex-col gap-2 col-span-1 lg:col-span-2 documentation-navigation">
<!-- Navigation Menu -->
</div>
<!-- Content Area -->
<div class="flex flex-col gap-8 col-span-1 lg:col-span-4 documentation-content">
<x-article :article="$block->article" />
</div>
</div>
</div>
</section>
</div>
CSS Classes Reference
Container Classes
.documentation-wrapper
Purpose: Outermost container for the documentation section
Tailwind Classes:
wrapper
+ custom classes from block settingsCustomization: Add full-width backgrounds, borders, or section styling
Usage: Section-wide visual modifications
.documentation-block
Purpose: Main semantic container without default background
Tailwind Classes:
block
Default Styling:
.documentation-block { display: block; }
Note: No background applied for flexible theming
.documentation-container
Purpose: Content width and spacing container
Tailwind Classes:
container py-8
Default Styling:
.documentation-container { max-width: responsive; /* container */ padding-top: 2rem; /* py-8 */ padding-bottom: 2rem; /* py-8 */ }
Layout Grid Classes
Main Grid Container
Purpose: Responsive grid layout for sidebar and content
Tailwind Classes:
grid grid-cols-1 lg:grid-cols-8 gap-8
Default Styling:
.documentation-grid { display: grid; /* grid */ grid-template-columns: 1fr; /* grid-cols-1 */ gap: 2rem; /* gap-8 */ } @media (min-width: 1024px) { .documentation-grid { grid-template-columns: repeat(8, 1fr); /* lg:grid-cols-8 */ } }
Navigation Classes
.documentation-navigation
Purpose: Sidebar navigation container
Tailwind Classes:
flex flex-col gap-2 col-span-1 lg:col-span-2
Default Styling:
.documentation-navigation { display: flex; /* flex */ flex-direction: column; /* flex-col */ gap: 0.5rem; /* gap-2 */ grid-column: span 1; /* col-span-1 */ } @media (min-width: 1024px) { .documentation-navigation { grid-column: span 2; /* lg:col-span-2 */ } }
.documentation-subnavigation
Purpose: Nested navigation menu container
Tailwind Classes:
flex flex-col pl-4 mt-2 gap-2
Default Styling:
.documentation-subnavigation { display: flex; /* flex */ flex-direction: column; /* flex-col */ padding-left: 1rem; /* pl-4 */ margin-top: 0.5rem; /* mt-2 */ gap: 0.5rem; /* gap-2 */ }
Content Classes
.documentation-content
Purpose: Main content area container
Tailwind Classes:
flex flex-col gap-8 col-span-1 lg:col-span-4
Default Styling:
.documentation-content { display: flex; /* flex */ flex-direction: column; /* flex-col */ gap: 2rem; /* gap-8 */ grid-column: span 1; /* col-span-1 */ } @media (min-width: 1024px) { .documentation-content { grid-column: span 4; /* lg:col-span-4 */ } }
Navigation System
Statamic Navigation Integration
<statamic:nav :handle="$block->navigation">
@if($url=='#' || $url=='')
<p class="text-sm text-foreground-muted uppercase tracking-wider pl-4">
{{ $title }}
</p>
@else
<x-button
:label="$title"
:link="$url"
variant="{{ $url == $current_uri ? 'ghost' : 'link' }}"
class="justify-start text-left w-full"
/>
@endif
</statamic:nav>
Navigation Features
Hierarchical Structure: Supports nested menu items
Active States: Highlights current page
Button Integration: Uses Button component for styling
Accessibility: Proper semantic markup
Navigation Typography
Section Headers
Purpose: Category/section identifiers
Tailwind Classes:
text-sm text-foreground-muted uppercase tracking-wider pl-4
Default Styling:
.nav-section { font-size: 0.875rem; /* text-sm */ color: var(--foreground-muted); /* text-foreground-muted */ text-transform: uppercase; /* uppercase */ letter-spacing: 0.1em; /* tracking-wider */ padding-left: 1rem; /* pl-4 */ }
Navigation Links
Component: Uses
<x-button>
componentVariants:
ghost
(active) orlink
(inactive)Classes:
justify-start text-left w-full
Active Detection: Compares
$url
with$current_uri
Nested Navigation
@if($children && count($children) > 0)
<div class="flex flex-col pl-4 mt-2 gap-2 documentation-subnavigation">
@foreach($children as $child)
<x-button
:label="$child['title']"
:link="$child['url']"
variant="{{ $child['url'] == $current_uri ? 'ghost' : 'link' }}"
class="justify-start text-left w-full"
/>
@endforeach
</div>
@endif
Content Fields
Available Fields
navigation (Navigation): Statamic navigation handle
article (Bard): Main documentation content
sidebar_width (Select): Navigation column width (future enhancement)
show_toc (Toggle): Table of contents display (future enhancement)
Field Configuration
# Blueprint configuration
navigation:
type: nav
instructions: 'Navigation structure for the documentation'
article:
type: bard
instructions: 'Main documentation content with rich text'
sets:
text:
display: Text
fields:
- type: bard
code:
display: Code Block
fields:
- code
- language
Block Settings Integration
Custom Classes
{{ $block->block_settings->block_classes ?? '' }} // Applied to .documentation-wrapper
{{ $block->block_settings->container_classes ?? '' }} // Applied to .documentation-container
Inline Styles
{{ $block->block_settings->block_styles ?? '' }} // Applied to .documentation-block
{{ $block->block_settings->container_styles ?? '' }} // Applied to .documentation-container
Grid Layout Breakdown
Column Distribution
Navigation: 2 columns (lg:col-span-2)
Content: 4 columns (lg:col-span-4)
Available: 2 columns (unused, future enhancements)
Responsive Behavior
/* Mobile (default) */
.documentation-grid {
grid-template-columns: 1fr;
/* Navigation stacks above content */
}
/* Desktop (1024px+) */
@media (min-width: 1024px) {
.documentation-grid {
grid-template-columns: repeat(8, 1fr);
/* 2-column nav, 4-column content, 2-column available */
}
}
Customization Examples
1. Wider Content Area
<div class="flex flex-col gap-8 col-span-1 lg:col-span-6 documentation-content">
<!-- Expand content to 6 columns -->
</div>
2. Narrow Navigation
<div class="flex flex-col gap-2 col-span-1 lg:col-span-1 documentation-navigation">
<!-- Reduce navigation to 1 column -->
</div>
3. Full-Width Content (No Navigation)
<div class="flex flex-col gap-8 col-span-1 lg:col-span-8 documentation-content">
<!-- Content spans all 8 columns -->
</div>
4. Three-Column Layout
<div class="grid grid-cols-1 lg:grid-cols-12 gap-8">
<div class="col-span-3"><!-- Navigation --></div>
<div class="col-span-6"><!-- Content --></div>
<div class="col-span-3"><!-- Table of Contents --></div>
</div>
5. Compact Navigation Spacing
<div class="flex flex-col gap-1 col-span-1 lg:col-span-2 documentation-navigation">
<!-- Reduced gap from 0.5rem to 0.25rem -->
</div>
Navigation Setup
Creating Navigation Structure
# content/navigation/docs.yaml
tree:
- entry: getting-started
children:
- entry: installation
- entry: configuration
- entry: components
children:
- entry: buttons
- entry: forms
- entry: examples
Navigation Builder
Use Statamic's Navigation builder in the Control Panel:
Navigate to Navigation section
Create new navigation tree
Add entries and organize hierarchy
Reference navigation handle in block
Article Component Integration
Content Rendering
@if($block->article)
<x-article :article="$block->article" />
@endif
Supported Content Types
Rich Text: Standard paragraph content
Code Blocks: Syntax-highlighted code samples
Images: Inline images with captions
Lists: Ordered and unordered lists
Tables: Data tables with proper styling
Headings: Hierarchical content structure
Performance Considerations
Navigation Caching
Statamic Caching: Navigation structures are cached
Button Components: Reusable button components
Static Navigation: No JavaScript required
Efficient Queries: Navigation data loaded once
Content Loading
Progressive Enhancement: Works without JavaScript
Image Optimization: Article images use lazy loading
Code Highlighting: Server-side syntax highlighting
Clean Markup: Semantic HTML structure
Accessibility Features
Navigation Accessibility
Semantic Markup: Proper navigation structure
Focus Management: Keyboard navigation support
Active States: Clear current page indication
Screen Readers: Descriptive link text
Content Accessibility
Heading Hierarchy: Logical heading structure
Alt Text: Images include descriptive alt text
Color Contrast: Sufficient contrast ratios
Keyboard Access: All interactive elements accessible
Advanced Features
Dynamic Navigation Width
@php
$navColumns = $block->nav_width ?? 2;
$contentColumns = 8 - $navColumns;
@endphp
<div class="col-span-1 lg:col-span-{{ $navColumns }}">
<div class="col-span-1 lg:col-span-{{ $contentColumns }}">
Table of Contents Generation
@if($block->show_toc)
<div class="col-span-1 lg:col-span-2">
<x-table-of-contents :content="$block->article" />
</div>
@endif
Search Integration
@if($block->enable_search)
<div class="mb-4">
<x-search-box placeholder="Search documentation..." />
</div>
@endif