Zaidan

Command Palette

Search for a command to run...

GitHub

Sidebar (Floating)

A sidebar variant that appears to float with rounded corners and padding, creating a modern card-like appearance.

Installation

See the Sidebar component for installation instructions.

Features

  • Floating appearance with rounded corners
  • Visual padding from window edges
  • Modern card-like aesthetic
  • Customizable width via CSS variable

Props

PropTypeValueDescription
variantstring"floating"Enables floating visual style

CSS Variables

VariableDefaultDescription
--sidebar-width16remWidth of the sidebar

Examples

Here is the source code of the example from the preview page:

Floating Variant

import { GalleryVerticalEnd } from "lucide-solid";
import type { JSX } from "solid-js";
import { For, Show } from "solid-js";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "~/components/ui/breadcrumb";
import { Separator } from "~/components/ui/separator";
import {
Sidebar,
SidebarContent,
SidebarGroup,
SidebarHeader,
SidebarInset,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
SidebarMenuSub,
SidebarMenuSubButton,
SidebarMenuSubItem,
SidebarProvider,
SidebarTrigger,
} from "~/components/ui/sidebar";
export default function SidebarFloatingExample() {
return (
<SidebarProvider
style={
{
"--sidebar-width": "19rem",
} as JSX.CSSProperties
}
>
<Sidebar variant="floating">
<SidebarHeader>
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton size="lg" as="a" href="#">
<div class="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
<GalleryVerticalEnd class="size-4" />
</div>
<div class="flex flex-col gap-0.5 leading-none">
<span class="font-medium">Documentation</span>
<span class="">v1.0.0</span>
</div>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarMenu class="gap-2">
<For each={data.navMain}>
{(item) => (
<SidebarMenuItem>
<SidebarMenuButton as="a" href={item.url} class="font-medium">
{item.title}
</SidebarMenuButton>
<Show when={item.items?.length}>
<SidebarMenuSub class="ml-0 border-l-0 px-1.5">
<For each={item.items}>
{(subItem) => (
<SidebarMenuSubItem>
<SidebarMenuSubButton
as="a"
href={subItem.url}
isActive={subItem.isActive}
>
{subItem.title}
</SidebarMenuSubButton>
</SidebarMenuSubItem>
)}
</For>
</SidebarMenuSub>
</Show>
</SidebarMenuItem>
)}
</For>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
</Sidebar>
<SidebarInset>
<header class="flex h-16 shrink-0 items-center gap-2 px-4">
<SidebarTrigger class="-ml-1" />
<Separator orientation="vertical" class="mr-2 data-[orientation=vertical]:h-4" />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem class="hidden md:block">
<BreadcrumbLink href="#">Building Your Application</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator class="hidden md:block" />
<BreadcrumbItem>
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</header>
<div class="flex flex-1 flex-col gap-4 p-4 pt-0">
<div class="grid auto-rows-min gap-4 md:grid-cols-3">
<div class="aspect-video rounded-xl bg-muted/50" />
<div class="aspect-video rounded-xl bg-muted/50" />
<div class="aspect-video rounded-xl bg-muted/50" />
</div>
<div class="min-h-[100vh] flex-1 rounded-xl bg-muted/50 md:min-h-min" />
</div>
</SidebarInset>
</SidebarProvider>
);
}

See Also