ProComponents, templates & AI tooling
HeroUI
27.7k

Surface 表面

提供表面级样式与子组件上下文的容器组件。

引入

import { Surface } from '@heroui/react';

用法

默认

表面内容

这是默认表面变体,使用 bg-surface 样式。

次要

表面内容

这是次要表面变体,使用 bg-surface-secondary 样式。

第三

表面内容

这是第三表面变体,使用 bg-surface-tertiary 样式。

透明

表面内容

这是透明表面变体,无背景,适用于遮罩层和自定义背景的卡片。

import {Surface} from "@heroui/react";

export function Variants() {
  return (
    <div className="flex flex-col gap-4">

概述

Surface 组件是语义化容器,通过变体提供不同的视觉层次。

变体

Surface 提供描述视觉层次的语义化变体:

  • default — 标准表面外观(bg-surface)
  • secondary — 中等层次(bg-surface-secondary)
  • tertiary — 更高层次(bg-surface-tertiary)

与表单组件配合

在 Surface 内使用表单组件时,请为这些组件设置 variant="secondary",以应用适合表面背景的低强调变体。

import { Surface, Input, TextArea } from '@heroui/react';

function App() {
  return (
    <Surface variant="default">
      <Input placeholder="Input with secondary variant" variant="secondary" />
      <TextArea placeholder="TextArea with secondary variant" variant="secondary" />
    </Surface>
  );
}

样式

传入 Tailwind CSS 类

import { Surface } from '@heroui/react';

function CustomSurface() {
  return (
    <Surface
      className="rounded-2xl p-8 shadow-lg"
      variant="secondary"
    >
      <h2>Custom Styled Surface</h2>
      <p>Content goes here</p>
    </Surface>
  );
}

自定义组件类

若要自定义 Surface 组件类,可以使用 @layer components 指令。
了解更多

@layer components {
  .surface {
    @apply rounded-2xl border border-border;
  }

  .surface--secondary {
    @apply bg-gradient-to-br from-blue-50 to-purple-50;
  }
}

HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。

CSS 类

Surface 组件使用以下 CSS 类(查看源码样式):

基础类

  • .surface - Surface 根容器

变体类

  • .surface--default - 默认 Surface 变体(bg-surface)
  • .surface--secondary - Secondary Surface 变体(bg-surface-secondary)
  • .surface--tertiary - Tertiary Surface 变体(bg-surface-tertiary)

API 参考

Surface Props

Prop类型默认值描述
variant "transparent" | "default" | "secondary" | "tertiary""default"Surface 的视觉变体。
classNamestring-额外的 CSS 类。
childrenReactNode-Surface 内容。

Context API

SurfaceContext

子组件可通过 Surface 上下文读取当前变体:

import { useContext } from 'react';
import { SurfaceContext } from '@heroui/react';

function MyComponent() {
  const { variant } = useContext(SurfaceContext);
  // variant 为 "transparent" | "default" | "secondary" | "tertiary" | undefined
}

本页目录