@spark-web/nav-link
Version:
--- title: Nav Link storybookPath: navigation-navlink--default isExperimentalPackage: true ---
128 lines (109 loc) • 2.99 kB
Markdown
---
title: Nav Link
storybookPath: navigation-navlink--default
isExperimentalPackage: true
---
Nav links are styled links for use in site navigation.
```jsx live
<Stack as="nav" gap="small">
<NavLink href="#" isSelected>
<HomeIcon />
Dashboard
</NavLink>
<NavLink href="#">
<ClipboardListIcon />
Applications
</NavLink>
<NavLink href="#">
<BriefcaseIcon />
Leads
</NavLink>
<NavLink href="#">
<AcademicCapIcon />
Training
</NavLink>
<NavLink href="#">
<ChartSquareBarIcon />
Analytics
</NavLink>
<NavLink href="#">
<CogIcon />
Settings
</NavLink>
</Stack>
```
## Children
Valid children of a `NavLink` are a string, or a string plus an icon. No other
combinations are allowed.
## Border Radius
There are two valid border radii for a `NavLink`: `'small'` and `'full'`.
Typically `'small'` should be used for vertical navigations (like a sidebar) and
`'full'` should be used for horizontal navigations like in a header.
```jsx live
<Stack gap="large">
<Text weight="semibold">
Hover or focus to see the different border radius options
</Text>
<Stack as="nav" gap="small">
<NavLink href="#">"Small" border radius nav item</NavLink>
<NavLink href="#" borderRadius="full">
"Full" border radius nav item
</NavLink>
</Stack>
</Stack>
```
## isSelected
The `isSelected` prop is used to style the currently active page. It is
important that it is only treated as active if the page is current as it also
sets the `aria-current` attribute to `page`.
## Size
`NavLink`s can be either `medium` or `large`.
```jsx live
<Columns gap="small" collapseBelow="desktop">
<Stack as="nav" gap="small">
<NavLink href="#">Medium size nav item</NavLink>
<NavLink href="#" size="large">
Medium size nav item
</NavLink>
</Stack>
<Stack as="nav" gap="small">
<NavLink href="#">
<HomeIcon />
Large size nav item
</NavLink>
<NavLink href="#" size="large">
<HomeIcon />
Large size nav item
</NavLink>
</Stack>
</Columns>
```
## Inline
By default, the underlying element will be `display: flex` and will take up all
available space. By setting the `inline` prop to `true` the `NavLink` will be
`display: inline-flex` instead.
```jsx live
<Stack gap="small">
<Box>
<NavLink href="#">NavLink without inline prop</NavLink>
<NavLink href="#">NavLink without inline prop</NavLink>
<NavLink href="#">NavLink without inline prop</NavLink>
</Box>
<Divider />
<Box>
<NavLink inline href="#">
NavLink with inline prop
</NavLink>
<NavLink inline href="#">
NavLink with inline prop
</NavLink>
<NavLink inline href="#">
NavLink with inline prop
</NavLink>
</Box>
</Stack>
```
## Props
<PropsTable displayName="NavLink" />
[data-attribute-map]:
https://github.com/brighte-labs/spark-web/blob/e7f6f4285b4cfd876312cc89fbdd094039aa239a/packages/utils/src/internal/buildDataAttributes.ts#L1