Drawer
Fixed slide-in panels. Toggle with the .nf-open class and a backdrop overlay.
Structure
The drawer is composed of an overlay and a panel. The panel contains a header, body, and footer:
DRAWER PANEL STRUCTURE
SYSTEM_NAV
Drawer content goes here.
<!-- Overlay -->
<div class="nf-drawer-overlay" id="drawer-overlay"></div>
<!-- Left drawer -->
<div class="nf-drawer nf-drawer-left nf-open" id="my-drawer" role="dialog" aria-modal="true" aria-labelledby="drawer-title">
<div class="nf-drawer-header">
<h2 class="nf-drawer-title" id="drawer-title">SYSTEM_NAV</h2>
<button class="nf-button nf-button-ghost nf-button-icon" aria-label="Close drawer">✕</button>
</div>
<div class="nf-drawer-body">
<p>Drawer content goes here.</p>
</div>
<div class="nf-drawer-footer">
<button class="nf-button nf-button-ghost nf-button-sm">CLOSE</button>
</div>
</div>Sides
Add .nf-drawer-left or .nf-drawer-right to control which edge the panel slides in from.
| Class | Edge | Open transform |
|---|---|---|
nf-drawer-left |
Left | translateX(-100%) → translateX(0) |
nf-drawer-right |
Right | translateX(100%) → translateX(0) |
Sizes
WIDTH VARIANTS
nf-drawer-sm 14rem
default 20rem
nf-drawer-lg 28rem
nf-drawer-xl 36rem
<div class="nf-drawer nf-drawer-left nf-drawer-sm">...</div>
<div class="nf-drawer nf-drawer-left">...</div> <!-- default 20rem -->
<div class="nf-drawer nf-drawer-left nf-drawer-lg">...</div>
<div class="nf-drawer nf-drawer-left nf-drawer-xl">...</div>JavaScript
const overlay = document.getElementById('drawer-overlay');
const drawer = document.getElementById('my-drawer');
const trigger = document.getElementById('open-drawer');
const close = drawer.querySelector('[aria-label="Close drawer"]');
function openDrawer() {
drawer.classList.add('nf-open');
overlay.classList.remove('nf-hidden');
drawer.removeAttribute('aria-hidden');
}
function closeDrawer() {
drawer.classList.remove('nf-open');
overlay.classList.add('nf-hidden');
drawer.setAttribute('aria-hidden', 'true');
}
trigger.addEventListener('click', openDrawer);
close.addEventListener('click', closeDrawer);
overlay.addEventListener('click', closeDrawer);
Class reference
| Class | Description |
|---|---|
nf-drawer-overlay |
Fixed backdrop — hide with nf-hidden or aria-hidden="true" |
nf-drawer |
Fixed panel — slides in when .nf-open is added |
nf-drawer-left |
Left edge, primary right border |
nf-drawer-right |
Right edge, primary left border |
nf-open |
Reveals the drawer — transform: translateX(0) |
nf-drawer-sm |
14rem width |
nf-drawer-lg |
28rem width |
nf-drawer-xl |
36rem width |
nf-drawer-header |
Top section with title and close button |
nf-drawer-title |
Title text inside the header |
nf-drawer-body |
Scrollable content area |
nf-drawer-footer |
Bottom action area |