ネイティブ チェックボックス トグルを使用した CSS のみの Tailwind CSS ドロワー。 JavaScript を使用しないナビゲーションまたはフィルター用のスライドイン サイド パネル。 WCAG AA にアクセス可能で、Django、HTMX、Laravel、React、およびあらゆるスタックで動作します。
ドロワー コンポーネントはビューポートの側面からスライドして挿入され、非表示のナビゲーション、フィルター、または追加のコンテンツが表示されます。 CSS アニメーションを備えたネイティブ HTML ダイアログ要素に基づいて構築されたドロワーは、モバイルおよびデスクトップ デバイス上のレイアウトを管理するための応答性の高い方法を提供します。 Frutjam ドロワー システムは、カスタマイズ可能な幅、スムーズなアニメーション、プロフェッショナルなサイドバー ナビゲーションのためのオーバーレイ背景をサポートしています。
CSS のみ。JavaScript は必要ありません。 WCAG AA にアクセス可能で、フレームワークに依存しない - Django、HTMX、Laravel、React、およびあらゆるスタックで動作します。
| クラス | タイプ | 説明 |
|---|---|---|
| drawer | ベース | ネイティブダイアログ要素に基づいて構築されたスライドインパネル |
| drawer-content | 修飾子 | ドロワーの内部コンテンツ領域 |
| drawer-backdrop | 修飾子 | 引き出しの後ろにオーバーレイ |
| drawer-start | 修飾子 | 左からスライドさせて入ります |
| drawer-end | 修飾子 | 右からスライドさせて入ります |
| drawer-top | 修飾子 | 上からスライドさせて入ります |
| drawer-bottom | 修飾子 | 下からスライドさせて入ります |
基本的な使い方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <button type="button" class="btn btn-sm" onclick="defaultDrawer.show()">Open drawer</button> <dialog class="drawer" id="defaultDrawer"> <div class="drawer-content w-full lg:w-56 p-4"> <ul class="menu"> <li class="menu-title"><span>Dashboard</span></li> <li><a class="menu-item">Overview</a></li> <li><a class="menu-item">Analytics</a></li> <li class="menu-title mt-4"><span>Management</span></li> <li><a class="menu-item">Users</a></li> <li><a class="menu-item">Inventory</a></li> <li><a class="menu-item">Settings</a></li> </ul> </div> <button type="button" class="drawer-backdrop" onclick="defaultDrawer.close()">Close Drawer via Backdrop</button> </dialog> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import { useDrawer } from 'frutjam/react' export default function DrawerDemo() { const drawer = useDrawer() return ( <> <button type="button" className="btn btn-sm" onClick={drawer.open}>Open drawer</button> <dialog ref={drawer.ref} className="drawer"> <div className="drawer-content w-full lg:w-56 p-4"> <ul className="menu"> <li className="menu-title"><span>Dashboard</span></li> <li><a className="menu-item">Overview</a></li> <li><a className="menu-item">Analytics</a></li> <li className="menu-title mt-4"><span>Management</span></li> <li><a className="menu-item">Users</a></li> <li><a className="menu-item">Inventory</a></li> <li><a className="menu-item">Settings</a></li> </ul> </div> <button type="button" className="drawer-backdrop" onClick={drawer.close}>Close Drawer via Backdrop</button> </dialog> </> ) } |
JS と React ヘルパー
トリガーがドロワーの外にある場合、またはコード内の任意の場所からプログラムによる制御が必要な場合は、frutjam/js の createDrawer または frutjam/react の useDrawer を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <button class="btn btn-sm" id="helper-open-btn">Open drawer</button> <dialog class="drawer" id="helper-drawer"> <div class="drawer-content w-full lg:w-56 p-4"> <p class="mb-4 text-sm opacity-70">Controlled via <code>createDrawer</code>.</p> <button class="btn btn-sm" id="helper-close-btn">Close</button> </div> <button type="button" class="drawer-backdrop" id="helper-backdrop">Close</button> </dialog> <script type="module"> import { createDrawer } from 'frutjam/js' const drawer = createDrawer(document.getElementById('helper-drawer')) document.getElementById('helper-open-btn').onclick = () => drawer.open() document.getElementById('helper-close-btn').onclick = () => drawer.close() document.getElementById('helper-backdrop').onclick = () => drawer.close() </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import { useDrawer } from 'frutjam/react' export default function DrawerDemo() { const drawer = useDrawer() return ( <> <button className="btn btn-sm" onClick={drawer.open}>Open drawer</button> <dialog ref={drawer.ref} className="drawer"> <div className="drawer-content w-full lg:w-56 p-4"> <p className="mb-4 text-sm opacity-70">Controlled via useDrawer.</p> <button className="btn btn-sm" onClick={drawer.close}>Close</button> </div> <button type="button" className="drawer-backdrop" onClick={drawer.close}>Close</button> </dialog> </> ) } |
ドロワーのカスタマイズ
.drawer-backdrop は、ドロワーの外側をクリックしたときにドロワーを閉じるクリック可能な背景を提供します。デフォルトでこの要素を削除することで、外側をクリックしたときにドロワーが閉じないようにします。
背景クリックで閉じる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <button type="button" class="btn btn-sm" onclick="closeDrawerOnBackdropClick.show()">Open drawer</button> <dialog class="drawer" id="closeDrawerOnBackdropClick"> <div class="drawer-content w-full lg:w-56 p-4"> <div class="flex justify-between mb-3"> <strong>Drawer</strong> <button type="button" class="btn btn-xs btn-square btn-rounded btn-ghost" onclick="closeDrawerOnBackdropClick.close()"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> <ul class="menu"> <li class="menu-title"><span>Dashboard</span></li> <li><a class="menu-item">Overview</a></li> <li><a class="menu-item">Analytics</a></li> <li class="menu-title mt-4"><span>Management</span></li> <li><a class="menu-item">Users</a></li> <li><a class="menu-item">Inventory</a></li> <li><a class="menu-item">Settings</a></li> </ul> </div> <button type="button" class="drawer-backdrop" onclick="closeDrawerOnBackdropClick.close()">Close Drawer via Backdrop</button> </dialog> |
外側をクリックしても閉じないようにする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <button type="button" class="btn btn-sm" onclick="preventCloseClickOutsideDrawer.show()">Open drawer</button> <dialog class="drawer" id="preventCloseClickOutsideDrawer"> <div class="drawer-content w-full lg:w-56 p-4"> <div class="flex justify-between mb-3"> <strong>Drawer</strong> <button type="button" class="btn btn-xs btn-square btn-rounded btn-ghost" onclick="preventCloseClickOutsideDrawer.close()"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg> </button> </div> <ul class="menu"> <li class="menu-title"><span>Dashboard</span></li> <li><a class="menu-item">Overview</a></li> <li><a class="menu-item">Analytics</a></li> <li class="menu-title mt-4"><span>Management</span></li> <li><a class="menu-item">Users</a></li> <li><a class="menu-item">Inventory</a></li> <li><a class="menu-item">Settings</a></li> </ul> </div> </dialog> |
引き出しの配置
左引き出し(開始)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <button type="button" class="btn btn-sm" onclick="leftDrawer.show()">Open drawer</button> <dialog class="drawer drawer-start" id="leftDrawer"> <div class="drawer-content w-full lg:w-56 p-4"> <ul class="menu"> <li> <div class="menu-title">Dashboard</div> <ul> <li><a class="menu-item">Overview</a></li> <li><a class="menu-item">Analytics</a></li> </ul> </li> <li> <div class="menu-title">Management</div> <ul> <li><a class="menu-item">Users</a></li> <li><a class="menu-item">Inventory</a></li> <li><a class="menu-item">Settings</a></li> </ul> </li> </ul> </div> <button type="button" class="drawer-backdrop" onclick="leftDrawer.close()">Close Drawer via Backdrop</button> </dialog> |
右引き出し(端)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <button type="button" class="btn btn-sm" onclick="rightDrawer.show()">Open drawer</button> <dialog class="drawer drawer-end" id="rightDrawer"> <div class="drawer-content w-full lg:w-56 p-4"> <ul class="menu w-full"> <li> <div class="menu-title">Dashboard</div> <ul> <li><a class="menu-item">Overview</a></li> <li><a class="menu-item">Analytics</a></li> </ul> </li> <li> <div class="menu-title">Management</div> <ul> <li><a class="menu-item">Users</a></li> <li><a class="menu-item">Inventory</a></li> <li><a class="menu-item">Settings</a></li> </ul> </li> </ul> </div> <button type="button" class="drawer-backdrop" onclick="rightDrawer.close()">Close Drawer via Backdrop</button> </dialog> |
上部の引き出し
1 2 3 4 5 6 7 8 9 10 11 12 | <button type="button" class="btn btn-sm" onclick="topDrawer.show()">Open drawer</button> <dialog class="drawer drawer-top" id="topDrawer"> <div class="drawer-content p-4"> <div class="heading-3xl mb-3">Contact us</div> <form class="grid grid-cols-12 gap-3"> <input type="text" placeholder="Enter your text here" class="input col-span-5"> <input type="text" placeholder="Enter your text here" class="input col-span-5"> <button class="btn col-span-2">Submit</button> </form> </div> <button type="button" class="drawer-backdrop" onclick="topDrawer.close()">Close Drawer via Backdrop</button> </dialog> |
一番下の引き出し
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <button type="button" class="btn btn-sm" onclick="bottomDrawer.show()">Open drawer</button> <dialog class="drawer drawer-bottom" id="bottomDrawer"> <div class="drawer-content p-4"> <ul class="menu menu-md w-full"> <li> <div class="accordion accordion-flush"> <details name="nav" open> <summary><span class="heading-md">Dashboard</span></summary> <div class="accordion-content"> <ul> <li class="menu-item"><span>Overview</span></li> <li class="menu-item"> <span>Analytics</span> <div class="badge badge-xs badge-accent ml-1 uppercase">Live</div> </li> </ul> </div> </details> <details name="nav"> <summary><span class="heading-md">Settings</span></summary> <div class="accordion-content"> <ul> <li class="menu-item"><span>Profile</span></li> <li class="menu-item"><span>Security</span></li> </ul> </div> </details> </div> </li> </ul> </div> <button type="button" class="drawer-backdrop" onclick="bottomDrawer.close()">Close Drawer viaBackdrop</button> </dialog> |
Claude コード、Cursor、または別の AI エディターを使用していますか?
Cherry MCP は、AI エディタに正確な 引き出し クラス名と構造をオンデマンドで提供します。もう幻覚のような授業はありません。