Drawer
Drawerは、画面の端から表示されるパネルのコンポーネントです。
<Drawer.Root>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
使い方
import { Drawer } from "@yamada-ui/react"
import { Drawer } from "@/components/ui"
import { Drawer } from "@workspaces/ui"
<Drawer.Root>
<Drawer.OpenTrigger />
<Drawer.Content>
<Drawer.Overlay />
<Drawer.CloseButton />
<Drawer.Header />
<Drawer.Body />
<Drawer.Footer />
<Drawer.CloseTrigger />
</Drawer.Content>
</Drawer.Root>
Drawer.OverlayとDrawer.CloseButtonは、省略することができます。サイズを変更する
<Wrap gap="md">
<For each={["xs", "sm", "md", "lg", "xl", "full"]}>
{(size) => (
<Drawer.Root key={size} size={size}>
<Drawer.OpenTrigger>
<Button>Open "{size}" Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
)}
</For>
</Wrap>
位置を変更する
配置を変更する場合は、placementに"block-start"や"inline-start"などを設定します。デフォルトでは、"inline-end"が設定されています。
<Wrap gap="md">
<For each={["block-start", "inline-start", "inline-end", "block-end"]}>
{(placement) => (
<Drawer.Root key={placement} placement={placement}>
<Drawer.OpenTrigger>
<Button>Open "{placement}" Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
)}
</For>
</Wrap>
所要時間を変更する
所要時間を変更する場合は、durationに数値(秒)を設定します。
<Drawer.Root duration={0.7}>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
マウント時にスクロールをブロックしない
デフォルトでは、パネルを開いた際に主要なコンテンツのスクロールをブロックしています。これは、アクセシビリティを確保するためです。もし、主要なコンテンツのスクロールをブロックしたくない場合は、blockScrollOnMountをfalseに設定します。
<Drawer.Root blockScrollOnMount={false}>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
閉じるボタンを無効にする
閉じるボタンを無効にする場合は、withCloseButtonをfalseに設定します。
<Drawer.Root withCloseButton={false}>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
オーバーレイを無効にする
パネルのオーバーレイを無効(非表示)にする場合は、withOverlayをfalseにします。
<Drawer.Root withOverlay={false}>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
ドラッグして閉じる
Drawerをドラッグで閉じたい場合は、closeOnDragをtrueに設定します。
<Drawer.Root closeOnDrag>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
ドラッグバーを非表示にする
ドラッグバーを非表示にする場合は、withDragBarをfalseに設定します。
<Drawer.Root closeOnDrag withDragBar={false}>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
閉じるボタンをカスタマイズする
<Drawer.Root>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Content>
<Drawer.CloseButton colorScheme="red" />
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
オーバーレイをカスタマイズする
<Drawer.Root>
<Drawer.OpenTrigger>
<Button>Open Drawer</Button>
</Drawer.OpenTrigger>
<Drawer.Overlay bg="blackAlpha.300" backdropFilter="blur(10px)" />
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Drawer.CloseTrigger>
<Button variant="ghost">とじる</Button>
</Drawer.CloseTrigger>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
制御する
表示・非表示を制御する場合は、openとonCloseを設定します。
const { open, onOpen, onClose } = useDisclosure()
return (
<>
<Button onClick={onOpen}>Open Drawer</Button>
<Drawer.Root open={open} onClose={onClose}>
<Drawer.Content>
<Drawer.Header>ドラゴンボール</Drawer.Header>
<Drawer.Body>
『ドラゴンボール』は、鳥山明による日本の漫画作品です。『週刊少年ジャンプ』(集英社)にて1984年51号から1995年25号まで連載された。世界中に散らばった七つの球をすべて集めると、どんな願いも一つだけ叶えられるという秘宝・ドラゴンボールと、主人公・孫悟空(そん・ごくう)を中心に展開する、「冒険」「夢」「バトル」「友情」などを描いた長編漫画。
</Drawer.Body>
<Drawer.Footer>
<Button variant="ghost" onClick={onClose}>
とじる
</Button>
<Button>Wikipedia</Button>
</Drawer.Footer>
</Drawer.Content>
</Drawer.Root>
</>
)
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
Drawerは、アクセシビリティに関してWAI-ARIA - Dialog (Modal) Patternに従います。
キーボード操作
モーダルが開くと、フォーカスはモーダル内にロックされます。つまり、モーダルを閉じない限り、モーダル外の要素をフォーカスすることはできません。
| キー | 説明 | 状態 |
|---|---|---|
Tab | モーダル内の無効ではない次の要素にフォーカスします。最後の要素の場合は最初の無効ではない要素をフォーカスします。 | open={true} |
Shift + Tab | モーダル内の無効ではない前の要素をフォーカスします。最初の要素の場合は最後の無効ではない要素をフォーカスします。 | open={true} |
Escape | モーダルを閉じます。 | open={true} + closeOnEsc={true} |
ARIAロールと属性
| コンポーネント | ロールと属性 | 使い方 |
|---|---|---|
Drawer.Content | role="dialog" | ダイアログであることを示します。 |
aria-modal="true" | 表示されているウィジェットがモーダルであることを示します。 | |
aria-labelledby | 関連したDrawer.Titleのidを設定します。 | |
aria-describedby | 関連したDrawer.Bodyのidを設定します。 | |
Drawer.OpenTrigger | aria-expanded | モーダルが開いている場合は"true"を設定し、閉じている場合は"false"を設定します。 |
aria-controls | モーダルが開いている場合はDrawer.Contentのidを設定し、閉じている場合は設定しません。 | |
aria-haspopup="dialog" | ダイアログが存在することを示します。 | |
aria-label | "モーダルを開く"を設定します。 | |
Drawer.CloseButton | aria-label | "モーダルを閉じる"を設定します。 |
Drawer.CloseTrigger | aria-label | "モーダルを閉じる"を設定します。 |
Drawer.Overlay | aria-hidden="true" | 要素をアクセシビリティツリーから除外します。 |
類似のコンポーネント
Modal
Modalは、主要なコンテンツに重ねて表示され、ユーザーの注意を情報のみに集中させるコンポーネントです。
Tooltip
Tooltipは、要素の補足など短い情報を表示するコンポーネントです。
Popover
Popoverは、要素の周りにフローティングして情報を表示するコンポーネントです。
SlideFade
SlideFadeは、要素を指定位置から移動しながら次第に表示または非表示にするコンポーネントです。
Slide
Slideは、要素をページの隅から表示または非表示にするコンポーネントです。
Fade
Fadeは、要素を次第に表示または非表示にするコンポーネントです。
Collapse
Collapseは、要素を展開または折りたたんで表示するコンポーネントです。
FadeScale
FadeScaleは、要素を次第に拡大して表示または縮小して非表示にするコンポーネントです。
使用しているコンポーネント・フック
Modal
Modalは、主要なコンテンツに重ねて表示され、ユーザーの注意を情報のみに集中させるコンポーネントです。
Button
Buttonは、フォームの送信、モーダルの開閉など、ユーザーが操作できるインタラクティブなコンポーネントです。
CloseButton
CloseButtonは、基本的にコンポーネントの閉じる機能をトリガーするために使用するコンポーネントです。
FocusLock
FocusLockは、モーダルやダイアログなどの要素でフォーカスを制限し、フォーカスをその範囲内にロックすることで、アクセシビリティを向上させるコンポーネントです。
Motion
Motionは、MotionにYamada UIのStyle Propsを拡張した便利なコンポーネントです。
Portal
Portalは、現在のDOM階層の外側に要素をレンダリングするコンポーネントです。
Slide
Slideは、要素をページの隅から表示または非表示にするコンポーネントです。
Fade
Fadeは、要素を次第に表示または非表示にするコンポーネントです。