Skip to content
Esc
navigateopen⌘Jpreview
On this page

Separator

Visually or semantically separates content.

Base UI Primitives
An open-source UI component library.
BlogDocsSource
import * as stylex from '@stylexjs/stylex';

import { Separator } from '@/components/ui/separator';
import { space, fontSize, fontWeight } from '@/lib/constants.stylex';
import { colors, font } from '@/lib/tokens.stylex';

export default function SeparatorDemo() {
  return (
    <div {...stylex.props(styles.root)}>
      <div>
        <div {...stylex.props(styles.title)}>Base UI Primitives</div>
        <div {...stylex.props(styles.muted)}>An open-source UI component library.</div>
      </div>
      <Separator />
      <div {...stylex.props(styles.row)}>
        <span>Blog</span>
        <Separator orientation="vertical" />
        <span>Docs</span>
        <Separator orientation="vertical" />
        <span>Source</span>
      </div>
    </div>
  );
}

const styles = stylex.create({
  root: {
    display: 'flex',
    flexDirection: 'column',
    fontFamily: font.sans,
    fontSize: fontSize.sm,
    gap: space.s4,
  },
  title: {
    fontWeight: fontWeight.medium,
  },
  muted: {
    color: colors.mutedForeground,
  },
  row: {
    alignItems: 'center',
    display: 'flex',
    gap: space.s4,
    height: space.s5,
  },
});

Install

npx shadcn@latest add @madeui/separator

Usage

import { Separator } from '@/components/ui/separator';

Vertical

BlogDocsSource
import * as stylex from '@stylexjs/stylex';

import { Separator } from '@/components/ui/separator';
import { space, fontSize } from '@/lib/constants.stylex';
import { font } from '@/lib/tokens.stylex';

export default function SeparatorVertical() {
  return (
    <div {...stylex.props(styles.row)}>
      <span>Blog</span>
      <Separator orientation="vertical" />
      <span>Docs</span>
      <Separator orientation="vertical" />
      <span>Source</span>
    </div>
  );
}

const styles = stylex.create({
  row: {
    alignItems: 'center',
    display: 'flex',
    fontFamily: font.sans,
    fontSize: fontSize.sm,
    gap: space.s4,
    height: space.s5,
  },
});

List

Your invoice has been paid2h ago
New comment on your PR4h ago
Weekly digest is ready1d ago
import * as React from 'react';

import * as stylex from '@stylexjs/stylex';

import { Separator } from '@/components/ui/separator';
import { space, fontSize, fontWeight, container } from '@/lib/constants.stylex';
import { colors, font } from '@/lib/tokens.stylex';

const notifications = [
  { title: 'Your invoice has been paid', time: '2h ago' },
  { title: 'New comment on your PR', time: '4h ago' },
  { title: 'Weekly digest is ready', time: '1d ago' },
];

export default function SeparatorList() {
  return (
    <div {...stylex.props(styles.root)}>
      {notifications.map((item, index) => (
        <React.Fragment key={item.title}>
          {index > 0 && <Separator />}
          <div {...stylex.props(styles.row)}>
            <span {...stylex.props(styles.title)}>{item.title}</span>
            <span {...stylex.props(styles.time)}>{item.time}</span>
          </div>
        </React.Fragment>
      ))}
    </div>
  );
}

const styles = stylex.create({
  root: {
    display: 'flex',
    flexDirection: 'column',
    fontFamily: font.sans,
    gap: space.s3,
    width: container.sm,
  },
  row: {
    alignItems: 'center',
    display: 'flex',
    justifyContent: 'space-between',
  },
  title: {
    fontSize: fontSize.sm,
    fontWeight: fontWeight.medium,
  },
  time: {
    color: colors.mutedForeground,
    fontSize: fontSize.xs,
  },
});

API reference

Built on Base UI Separator. All props are forwarded — see the Base UI Separator API reference.

Prop Type Default Description
orientation 'horizontal' | 'vertical' 'horizontal' Vertical separators stretch to their flex container’s height.
style StyleXStyles StyleX styles merged last — always win over the component’s own styles.

Was this page helpful?