NavMenu
This page is currently under construction
Lism UI (@lism-css/ui) is still in preparation.
A component for creating navigation menu lists.
Usage
Provided as NavMenu (c--navMenu) from the @lism-css/ui package.
Import
import { NavMenu } from '@lism-css/ui/react'; Props
| Prop | Description |
|---|---|
<NavMenu.Root> hovBgc | Outputs --hov-bgc. (For use when -hov:-bgc is applied to c--navMenu_link.) |
<NavMenu.Root> hovC | Outputs --hov-c. (For use when -hov:-c is applied to c--navMenu_link.) |
<NavMenu.Root> itemP | Outputs the --_item-p variable. Adjusts the padding of each link at once. |
<NavMenu.Link> hov | Specifies the hover style. Defaults to -bgc, changing the background color on hover. |
Structure
<NavMenu.Root> <NavMenu.Item> <NavMenu.Link href="">Menu item</NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="">Menu item</NavMenu.Link> <NavMenu.Nest> <NavMenu.Item> <NavMenu.Link href="">Nested item</NavMenu.Link> </NavMenu.Item> </NavMenu.Nest> </NavMenu.Item></NavMenu.Root>Use <NavMenu.Nest> to create nested menus.
Source Code
The source code is available on GitHub.
Examples
Simple example
↓
Example
<NavMenu.Root> <NavMenu.Item> <NavMenu.Link href="#menu"> Menu item 1 </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#menu"> Menu item 2 </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#menu"> Menu item 3 </NavMenu.Link> </NavMenu.Item></NavMenu.Root>Adding icons and badges
↓
Example
<NavMenu.Root> <NavMenu.Item> <NavMenu.Link href="#menu1" g="15" ai="center" bgc="text" c="base"> <span>Menu item</span> <Lism as="span" bd px="10" bdrs="10" fz="xs" fw="bold"> New </Lism> <Icon icon="caret-right" ms="auto" /> </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#menu2" g="15" ai="center" bgc="text" c="base"> <span>Menu item</span> <Icon icon="caret-right" ms="auto" /> </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#menu3" g="15" ai="center" bgc="text" c="base"> <span>Menu item</span> <Icon icon="caret-right" ms="auto" /> </NavMenu.Link> </NavMenu.Item></NavMenu.Root>Setting common styles for all items at once
Some props can be specified on NavMenu.Root and applied to all links at once, instead of setting them directly on each NavMenu.Link.
itemPadjusts the padding (--_item-p) of eachNavMenu.Link.hovBgcprovides the hover background color (--hov-bgc). (Requires-hov:-bgconNavMenu.Link.)hovCprovides the hover text color (--hov-c). (Requires-hov:-conNavMenu.Link.)
To change the padding per breakpoint, set p on each <NavMenu.Link> instead of using itemP.
↓
Common styles on the Root
<NavMenu.Root bd itemP="30" hovBgc="text" hovC="base"> <NavMenu.Item> <NavMenu.Link href="#menu1" hov="-bgc,-c">Menu item</NavMenu.Link> </NavMenu.Item> <NavMenu.Item bd-t> <NavMenu.Link href="#menu2" hov="-bgc,-c">Menu item</NavMenu.Link> </NavMenu.Item> <NavMenu.Item bd-t> <NavMenu.Link href="#menu3" hov="-bgc,-c">Menu item</NavMenu.Link> </NavMenu.Item></NavMenu.Root>Nested menus
↓
Nested menus
<NavMenu.Root bd-y hovBgc="base-2"> <NavMenu.Item> <NavMenu.Link href="#menu1"> Menu item 1 </NavMenu.Link> </NavMenu.Item> <NavMenu.Item bd-t> <NavMenu.Link href="#menu2"> Menu item 2 </NavMenu.Link> <NavMenu.Nest bd-t> <NavMenu.Item> <NavMenu.Link href="#child-menu1"> Nested item </NavMenu.Link> </NavMenu.Item> <NavMenu.Item bd-t> <NavMenu.Link href="#child-menu3"> Nested item </NavMenu.Link> <NavMenu.Nest bd-t> <NavMenu.Item> <NavMenu.Link href="#child-menu4"> Nested level 2 item </NavMenu.Link> </NavMenu.Item> <NavMenu.Item bd-t> <NavMenu.Link href="#child-menu5"> Nested level 2 item </NavMenu.Link> </NavMenu.Item> </NavMenu.Nest> </NavMenu.Item> </NavMenu.Nest> </NavMenu.Item></NavMenu.Root>Expanding nested menus with an accordion
Since link padding is managed by --_item-p, you can use var(--_item-p) inside an accordion to apply the same padding amount.
↓
Example
<NavMenu.Root bd-y hovBgc="base-2"> <NavMenu.Item> <NavMenu.Link href="#menu1"> Menu item </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <Accordion.Root> <Accordion.Item> <Accordion.Heading> <Accordion.Button hov="-bgc" p="var(--_item-p)"> Menu item (Accordion) </Accordion.Button> </Accordion.Heading> <Accordion.Panel> <NavMenu.Nest> <NavMenu.Item> <NavMenu.Link href="#child-menu1"> Nested item </NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#child-menu2"> Nested item </NavMenu.Link> </NavMenu.Item> </NavMenu.Nest> </Accordion.Panel> </Accordion.Item> </Accordion.Root> </NavMenu.Item></NavMenu.Root>Horizontal menu with hover-revealed submenu
An example of adding fxd='row' to <NavMenu.Root> to display items horizontally.
↓
Showing nested menu on hover
<Box min-h="15rem"> <NavMenu.Root fxd="row" hl="s" itemP="10"> <NavMenu.Item> <NavMenu.Link href="#menu1" hov="-o">Menu item</NavMenu.Link> </NavMenu.Item> <NavMenu.Item set="hov" pos="relative"> <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="in:show" pos="absolute" t="100%" ps="0" hl="s" bgc="base" bxsh="20" bdrs="10"> <NavMenu.Item> <NavMenu.Link href="#child-menu1">Nested item</NavMenu.Link> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#child-menu2">Nested Menu item</NavMenu.Link> </NavMenu.Item> </NavMenu.Nest> </NavMenu.Item> <NavMenu.Item> <NavMenu.Link href="#menu1" hov="-o">Menu item</NavMenu.Link> </NavMenu.Item> </NavMenu.Root></Box>