検索

NavMenu

このページは現在調整中です
Lism UI (@lism-css/ui) はまだ準備中です。

ナビゲーションメニュー用のリストを作成できるコンポーネントです。

How to use

@lism-css/ui パッケージでNavMenu(.c--navMenu)として提供しています。

Import

import { NavMenu } from '@lism-css/ui/react';

Props

プロパティ説明
<NavMenu.Root>
hovBgc
--hov-bgcを出力します。(.c--navMenu_link.-hov:bgcを付けた時用)
<NavMenu.Root>
hovC
--hov-cを出力します。 (.c--navMenu_link.-hov:cを付けた時用)
<NavMenu.Link>
hov
hover時のスタイルを指定できます。デフォルトはopが指定されています。

Source Code

@layer lism.modules {
	.c--navMenu {
		--link-td: none;
		--hl: var(--hl--s);
		--_item-p: var(--s20);
		--focus-offset: -1px; /* アコーディオン化した時にoutlineが一部見えなくなるのを防ぐ */
	}

	.c--navMenu_nest {
		--_item-p: inherit;
	}

	.c--navMenu_link {
		padding: var(--_item-p);
	}

	.c--navMenu_nest,
	.c--navMenu_item {
		--bdc: inherit;
	}
}

Examples

シンプルな例

<NavMenu.Root>
<NavMenu.Item>
<NavMenu.Link href='#menu' hov='bgc'>Menu item 1</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<NavMenu.Link href='#menu' hov='bgc'>Menu item 2</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<NavMenu.Link href='#menu' hov='bgc'>Menu item 3</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Root>

アイコンやバッジを表示する例

<NavMenu.Root>
<NavMenu.Item>
<NavMenu.Link href='#menu1' g='15' ai='center' bgc="text" c="base" hov='neutral'>
<span>Menu item</span>
<Lism tag='span' bd px='10' bdrs='10' fz='xs' fw='bold'>New</Lism>
<Icon icon='caret-right' mx-s='auto' />
</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<NavMenu.Link href='#menu2' g='15' ai='center' bgc="text" c="base" hov='neutral'>
<span>Menu item</span>
<Icon icon='caret-right' mx-s='auto' />
</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<NavMenu.Link href='#menu3' g='15' ai='center' bgc="text" c="base" hov='neutral'>
<span>Menu item</span>
<Icon icon='caret-right' mx-s='auto' />
</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Root>

各リストのpaddingを一括で調整する方法

itemPを指定すると--_item-p変数をセットできるようになっています。

ただし、ブレイクポイントで値を変更させたい場合は、<NavMenu.Link>それぞれにpを指定してください。

itemPを指定
<NavMenu.Root bd itemP='30'>
<NavMenu.Item hov='bgc'>
<NavMenu.Link href='#menu1'>Menu item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item hov='bgc' bd-t>
<NavMenu.Link href='#menu2'>Menu item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item hov='bgc' bd-t>
<NavMenu.Link href='#menu3'>Menu item</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Root>

メニューのネスト

メニューのネスト
<NavMenu.Root bd-y hovBgc='base-2'>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#menu1'>Menu item 1</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item bd-t>
<NavMenu.Link hov='bgc' href='#menu2'>Menu item 2</NavMenu.Link>
<NavMenu.Nest bd-t>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#child-menu1'>Nested item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item bd-t>
<NavMenu.Link hov='bgc' href='#child-menu3'>Nested item</NavMenu.Link>
<NavMenu.Nest bd-t>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#child-menu4'>Nested level 2 item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item bd-t>
<NavMenu.Link hov='bgc' href='#child-menu5'>Nested level 2 item</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Nest>
</NavMenu.Item>
</NavMenu.Nest>
</NavMenu.Item>
</NavMenu.Root>

ネストしたメニューをアコーディオンで展開する

リンクのpaddingは--_item-pで管理されているため、アコーディオン化した時に var(--_item-p)を使えば同じ量のpaddingを受け取れます。

  • Menu item
  • Menu item (Accordion)
<NavMenu.Root bd-y hovBgc='base-2'>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#menu1'>Menu item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<Accordion.Root>
<Accordion.Header hov='bgc' p='var(--_item-p)'>
<Accordion.Label>Menu item (Accordion)</Accordion.Label>
<Accordion.Icon />
</Accordion.Header>
<Accordion.Body>
<NavMenu.Nest>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#child-menu1'>Nested item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item>
<NavMenu.Link hov='bgc' href='#child-menu2'>Nested item</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Nest>
</Accordion.Body>
</Accordion.Root>
</NavMenu.Item>
</NavMenu.Root>

横並びメニューでホバー時に子メニューを表示する例

<NavMenu.Root>fxd='row'を指定し、横並びにする例を紹介します。

hoverでネストメニューを表示
<Box min-h="15rem">
<NavMenu.Root fxd='row' lh='s' itemP='10'>
<NavMenu.Item hov='o'>
<NavMenu.Link href='#menu1'>Menu item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item setHov pos='rel'>
<NavMenu.Link href='#menu3' ai='center' g='5'>
<Fragment>Hover Menu Item <Icon icon='caret-down' style={{translate: '10%'}} /></Fragment>
</NavMenu.Link>
<NavMenu.Nest fz='s' hov='to:show' pos='abs' t='100%' px-s='0' lh='s' bgc='base' bxsh='20' bdrs='5'>
<NavMenu.Item hov='bgc'>
<NavMenu.Link href='#child-menu1'>Nested item</NavMenu.Link>
</NavMenu.Item>
<NavMenu.Item hov='bgc'>
<NavMenu.Link href='#child-menu2'>Nested Menu item</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Nest>
</NavMenu.Item>
<NavMenu.Item hov='o'>
<NavMenu.Link href='#menu1'>Menu item</NavMenu.Link>
</NavMenu.Item>
</NavMenu.Root>
</Box>

© Lism CSS. All rights reserved.