ProComponents, templates & AI tooling
HeroUI
27.7k

ColorSwatchPicker 颜色色块选择器

允许用户从预置调色板中选择颜色的 swatch 列表。

引入

import { ColorSwatchPicker, parseColor } from '@heroui/react';

用法

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

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

export function Basic() {

组件结构

导入 ColorSwatchPicker 组件,并通过点语法访问所有子部分。

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

export default () => (
  <ColorSwatchPicker>
    <ColorSwatchPicker.Item color="#F43F5E">
      <ColorSwatchPicker.Swatch />
      <ColorSwatchPicker.Indicator />
    </ColorSwatchPicker.Item>
    <ColorSwatchPicker.Item color="#D946EF">
      <ColorSwatchPicker.Swatch />
      <ColorSwatchPicker.Indicator />
    </ColorSwatchPicker.Item>
    <ColorSwatchPicker.Item color="#8B5CF6">
      <ColorSwatchPicker.Swatch />
      <ColorSwatchPicker.Indicator />
    </ColorSwatchPicker.Item>
  </ColorSwatchPicker>
);

变体

圆形(默认)
方形
import {ColorSwatchPicker} from "@heroui/react";

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

export function Variants() {

尺寸

特小
特大
import {ColorSwatchPicker} from "@heroui/react";

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

const sizes = ["xs", "sm", "md", "lg", "xl"] as const;

堆叠布局

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

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

export function StackLayout() {

默认值

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

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

export function DefaultValue() {

受控

已选:#F43F5E

"use client";

import {ColorSwatchPicker, parseColor} from "@heroui/react";
import {useState} from "react";

禁用

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

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

export function Disabled() {

自定义指示器

import {HeartFill} from "@gravity-ui/icons";
import {ColorSwatchPicker} from "@heroui/react";

export function CustomIndicator() {
  const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

自定义渲染函数

"use client";

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

const colors = ["#F43F5E", "#D946EF", "#8B5CF6", "#3B82F6", "#06B6D4", "#10B981", "#84CC16"];

样式

传入 Tailwind CSS 类

你可以使用 className props 自定义 ColorSwatchPicker:

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

function CustomColorSwatchPicker() {
  return (
    <ColorSwatchPicker className="gap-4">
      <ColorSwatchPicker.Item color="#F43F5E" className="shadow-lg">
        <ColorSwatchPicker.Swatch />
      </ColorSwatchPicker.Item>
      <ColorSwatchPicker.Item color="#D946EF">
        <ColorSwatchPicker.Swatch />
      </ColorSwatchPicker.Item>
    </ColorSwatchPicker>
  );
}

自定义组件类

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

@layer components {
  .color-swatch-picker {
    @apply gap-4;
  }

  .color-swatch-picker__item {
    @apply shadow-md;
  }

  .color-swatch-picker__swatch {
    @apply border-2 border-white;
  }
}

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

CSS 类

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

基础与结构

  • .color-swatch-picker - 基础容器(flex 布局)
  • .color-swatch-picker__item - 单个 swatch 包裹层
  • .color-swatch-picker__swatch - swatch 视觉元素

尺寸类

  • .color-swatch-picker--xs - 特小(16px)
  • .color-swatch-picker--sm - 小(24px)
  • .color-swatch-picker--md - 中(32px,默认)
  • .color-swatch-picker--lg - 大(36px)
  • .color-swatch-picker--xl - 特大(40px)

形状变体

  • .color-swatch-picker--circle - 圆形(默认)
  • .color-swatch-picker--square - 圆角方形

布局类

  • .color-swatch-picker--grid - 横向换行网格(默认)
  • .color-swatch-picker--stack - 纵向堆叠

交互状态

组件同时支持 CSS 伪类与 data 属性,以便灵活控制状态:

  • 悬停:hover[data-hovered="true"] — 缩放至 1.1(仅在未选中时)
  • 聚焦:focus-visible[data-focus-visible="true"] — 焦点环
  • 已选中[data-selected="true"] — 与 swatch 同色的内边框
  • 禁用[data-disabled="true"] — 降低透明度

API 参考

ColorSwatchPicker Props

继承自 React Aria ColorSwatchPicker

Prop类型默认值描述
valuestring | Color-当前选中颜色(受控)
defaultValuestring | Color-默认选中颜色(非受控)
onChange(value: Color) => void-选中变化时调用的处理函数
size"xs" | "sm" | "md" | "lg" | "xl""md"swatch 尺寸
variant"circle" | "square""circle"swatch 形状
layout"grid" | "stack""grid"布局方向
classNamestring-额外的 CSS 类
childrenReact.ReactNode-ColorSwatchPicker.Item 元素
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, ColorSwatchPickerRenderProps>-通过自定义渲染函数覆盖默认的 DOM 元素。

ColorSwatchPicker.Item Props

Prop类型默认值描述
colorstring | Color必填swatch 颜色
isDisabledbooleanfalse是否禁用该项
classNamestring-额外的 CSS 类
childrenReact.ReactNode-ColorSwatchPicker.Swatch 元素
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, ColorSwatchPickerItemRenderProps>-通过自定义渲染函数覆盖默认的 DOM 元素。

ColorSwatchPicker.Swatch Props

Prop类型默认值描述
classNamestring-额外的 CSS 类

parseColor

为方便使用,从 React Aria Components 重新导出 parseColor 函数:

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

// 解析十六进制颜色
const red = parseColor('#ff0000');

// 解析 RGB
const green = parseColor('rgb(0, 255, 0)');

// 解析 HSL
const blue = parseColor('hsl(240, 100%, 50%)');

本页目录