Navbar
Base dashboard navbar.
Usage
Simple Navbar
<template>
<p-navbar>
<p-navbar-brand>
<img src="assets/images/icon-privy.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-item active>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
Navbar Brand
Navbar brand is used for company, product, or project name. You can add permalink in navbar brand by prop href
. Navbar brand can be an image or text and combination of both.
Text
<template>
<p-navbar>
<p-navbar-brand>
Persona
</p-navbar-brand>
</p-navbar>
</template>
Image and Text
<template>
<p-navbar>
<p-navbar-brand>
<img src="assets/images/logo.svg" /> Persona
</p-navbar-brand>
</p-navbar>
</template>
Fixed Navbar
Fixed navbar are using z-fixed
for z-index value. It posible to change z-index value using CSS variable --p-navbar-z-index
. But don't forget to see the all z-index variant for layer-ordering component.
<template>
<p-navbar fixed>
<p-navbar-brand>
<img src="assets/images/logo.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-item active>Home</p-nav-item>
<p-nav-item>Products</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
Variants
Navbar has 2 variant of nav type: pills
and lines
.
<template>
<p-navbar variant="pills">
<p-navbar-brand>
<img src="assets/images/logo.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-item active>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
<p-navbar variant="lines">
<p-navbar-brand>
<img src="assets/images/logo.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-item active>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
Alignment
To align Navigation, use align prop in <p-navbar-nav>
. Available value are left
, right
and center
<template>
<p-navbar>
<p-navbar-nav align="left">
<p-nav-item active>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
<p-navbar>
<p-navbar-nav align="center">
<p-nav-item active>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
<p-navbar>
<p-navbar-nav align="right">
<p-nav-item>Label</p-nav-item>
<p-nav-item active>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
With Icon
<template>
<p-navbar class="mb-5">
<p-navbar-nav>
<p-nav-item active>
<template #icon>
<IconPersona />
</template>
Label
</p-nav-item>
<p-nav-item>
<template #icon>
<IconPersona />
</template>
Label
</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
With Form
<template>
<p-navbar>
<p-navbar-brand>
<img src="assets/images/logo.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-form>
<p-input-group>
<p-input placeholder="Search" />
<p-button variant="input">
Submit
</p-button>
</p-input-group>
</p-nav-form>
</p-navbar-nav>
</p-navbar>
</template>
Condensed Navigation
<template>
<p-navbar>
<p-navbar-nav condensed>
<p-nav-item active>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
<p-nav-item>Label</p-nav-item>
</p-navbar-nav>
</p-navbar>
</template>
Dropdown
<template>
<p-navbar>
<p-navbar-nav>
<p-nav-item active>
<template #icon>
<IconPersona />
</template>
Label
</p-nav-item>
<p-nav-item-dropdown>
<template #button-content>
<IconPersona /> Label
</template>
<p-dropdown-item>Children 1</p-dropdown-item>
<p-dropdown-item>Children 2</p-dropdown-item>
<p-dropdown-item>Children 3</p-dropdown-item>
</p-nav-item-dropdown>
</p-navbar-nav>
</p-navbar>
</template>
Responsive
Navbar support responsive by adding toggleable
prop in <p-navbar>
with available value lg
, md
and sm
. Then <p-navbar-toggle>
used with <p-collapse is-nav>
component. Max height of navbar collapse is 20rem
by default, but it's very possible to custom it via --p-navbar-collapse-max-height
variable.
<template>
<p-navbar toggleable="lg">
<p-navbar-brand>
<img src="assets/images/logo.svg" />
</p-navbar-brand>
<p-navbar-toggle @click="menu =! menu">
<template #default="{ expanded }">
<IconPersona v-if="expanded" />
<IconView v-else />
</template>
</p-navbar-toggle>
<p-collapse v-model="menu" is-nav>
<p-navbar-nav>
<p-nav-item active>
Label
</p-nav-item>
</p-navbar-nav>
</p-collapse>
</p-navbar>
</template>
<script setup>
import IconPersona from '@privyid/persona-icon/vue/persona/20.vue'
import IconView from '@privyid/persona-icon/vue/view/20.vue'
const menu = ref(false)
</script>
Custom
<template>
<p-navbar>
<div class="flex flex-row">
<div class="transition-all duration-200 ease-in-out basis-2/4 focus-within:basis-full">
<p-navbar-nav>
<p-input-group>
<p-input-group-addon>
<IconSearch />
</p-input-group-addon>
<p-input placeholder="Search" />
</p-input-group>
</p-navbar-nav>
</div>
</div>
<p-navbar-nav align="right">
<p-nav-item>
<template #icon>
<IconNotif />
</template>
</p-nav-item>
<p-nav-item-dropdown no-caret size="xs" variant="outline">
<template #button-content>
<span class="flex items-center space-x-2">
<p-avatar size="xs">
<IconUser />
</p-avatar>
<span class="block text-left">
<span class="text-sm">Tarjono Sujono</span>
<p-caption size="xs">Personal Account</p-caption>
</span>
<IconChevron />
</span>
</template>
<p-dropdown-item>Edit Profile</p-dropdown-item>
<p-dropdown-item>Preference</p-dropdown-item>
<p-dropdown-item>Sign out</p-dropdown-item>
</p-nav-item-dropdown>
<p-nav-text>
<p-avatar src="https://picsum.photos/50" />
</p-nav-text>
</p-navbar-nav>
</p-navbar>
</template>
Navbar with CTA
<template>
<p-navbar>
<p-navbar-brand>
<img src="../../public/assets/images/logo-privy.svg" />
</p-navbar-brand>
<p-navbar-nav>
<p-nav-item active>Home</p-nav-item>
<p-nav-item>Products</p-nav-item>
</p-navbar-nav>
<p-navbar-nav align="right">
<p-nav-form>
<p-button href="#" variant="link">Login</p-button>
<p-button href="#" color="info">Create Free Account</p-button>
</p-nav-form>
</p-navbar-nav>
</p-navbar>
</template>
Variables
Navbar use local CSS variables on .navbar
for enhanced real-time customization.
--p-navbar-z-index: theme(zIndex.fixed);
--p-navbar-sticky-top: theme(spacing.0);
--p-navbar-collapse-max-height: 20rem; /* 320px */
--p-navbar-padding-x: theme(spacing.3);
--p-navbar-padding-left: var(--p-navbar-padding-x);
--p-navbar-padding-right: var(--p-navbar-padding-x);
--p-navbar-padding-y: theme(spacing.3);
--p-navbar-padding-top: var(--p-navbar-padding-y);
--p-navbar-padding-bottom: var(--p-navbar-padding-y);
--p-navbar-bg: theme(backgroundColor.default.DEFAULT);
--p-navbar-bg-dark: theme(backgroundColor.dark.default.DEFAULT);
--p-navbar-shadow: none;
--p-navbar-shadow-on-scroll: theme(boxShadow.lg);
API
Props <p-navbar>
Props | Type | Default | Description |
---|---|---|---|
variant | String | pills | Navbar variant, valid value is pills and lines |
condensed | Boolean | false | Activate condensed navigation with less space |
fixed | Boolean | false | Activate fixed Navbar |
sticky | Boolean | false | Activate sticky Navbar |
toggleable | String | - | automatically expand navigation with desired breakpoint |
Slots <p-navbar>
Name | Description |
---|---|
default | Content to place in the Navbar |
Props <p-navbar-brand>
Props | Type | Default | Description |
---|---|---|---|
href | String | undefined | Target URL of the Navbar Brand link |
Slots <p-navbar-brand>
Name | Description |
---|---|
default | Content to place in the Navbar Brand |
Props <p-navbar-nav>
Props | Type | Default | Description |
---|---|---|---|
align | String | left | Navbar alignment, valid value is left , center and right |
Slots <p-navbar-nav>
Name | Description |
---|---|
default | Content to place in the Navbar Nav |
Props <p-navbar-toggle>
Props | Type | Default | Description |
---|---|---|---|
There no prop here |
Slots <p-navbar-toggle>
Name | Description |
---|---|
default | Content to place expanded or collapsed icon in the Navbar Toggle |
Events <p-navbar-toggle>
Name | Arguments | Description |
---|---|---|
click | Native DOM Event object | Event when navbar toggle is clicked |